Alexander
Ну или так, не суть
Alexander
а, так это распространенный паттерн расширения
Паттерн расширения? Или желание запихнуть побольше функциональности туда, где оно может и без того обойтись?
A64m
ну бывает что может, да
Alexander
А что вы (все, хаскеллисты, функциональщики и сочувствующие) думаете, что есть "идиоматично функциональный код", и нужно ли его придерживаться? Или можно лепить императивщину в IO и забить на все? Ну то есть, я знаю, что комбинаторный стиль - это функциональный код. А есть еще критерии?
Aliester
иммутабельность
Aliester
ленивость
Alexander
Это слишком абстрактно. У меня каждая вторая программа на С++ использовала иммутабельность, и ленивые лямбды по возможности
Alexander
Ленивость, она и в Хаскеле по прямому назначению редко используется. Обычный код будет работать и без лени, даже если его в PureScript закопипастить
Дима
Шаг влево шаг вправо и вся иллюзия рассеивается, и пурса в этом лучший пример
Дима
Люди решили что они пишут на хаскеле а во что это компилируется — мелочи; результат столкновения с реальностью — чудовищно неоптимизированный код
A64m
На хаскеле можно писать на любом языке
на хаскеле и на хаскеле писать не всегда получается, только если научишься через все обручи прыгать и скользкие места обходить
A64m
других языках там такие боль и ужас будет, что только держись
Дима
lazy by default это просто протекающая абстракция
A64m
ленивость используется много где
Alexander
а вот и нет
Почему? Сколько кода ни пишу, есть там ленивость, нету ли ее - все едино. Разве что, на характеристики программы влияет
Дима
А разве это кому-то нужно?
Пурса или что?) Там в ряде случаев банально стек вышибет или все ресурсы системы кончатся потому что в V8, как и в большинстве других рантаймов ленивость не бесплатна
Alexander
Я не очень понял про Пурсу и ленивость
A64m
код который пищут "как на хаскеле" предполагает, что ленивость работает
A64m
также он предполагает что оптимизации работают.
A64m
без этого получается вот так
A64m
ФЯ 90-х | comp | VM | t | | --------------------- | --------------- | ------ | | ghc 8.2.2 (O2) llvm 6 | stg ghc x64 | 7 | | clean | abc | 40 | | ocaml 4.04 flambda O3 | | 72 | против ФЯ 2010-х | idris 0.99 | | 54308 | | purescript 0.11.4 | node v7.10.0 V8 | 128369 |
A64m
а работающая ленивость и оптимизации вообще непосильны для имплементаторов идриса и пурскрипта
A64m
им в это надо больше человекочасов вбухать чем во все что они сделали до этого
Дима
Да. По сути это портирование ghc выходит. Следствие: подходы хаскеля требуют хаскель рантайма, без него ни шагу сделать нельзя
Alexander
код который пищут "как на хаскеле" предполагает, что ленивость работает
Это предполагают, если только нужно предполагать. А так - пишут код, как и везде. В плюсах тоже надо предполагать, что код будет производительный, но только при двух условиях: если это действительно нужно, и если ты этим заморачиваешься
Anatolii
я думал на плюсах пишут когда нужен только производительный код
A64m
да на плюсах много чего пишут где на производительность вообще плевать
Дима
В purescript по вышеописанным причинам производительности нет вообще ни при каких условиях
Alexander
На плюсах пишут по разным причинам, часто не очень рациональным, но просто брать и писать производительный код - это вряд ли, даже если программист так будет думать
Alexander
Пока не начнешь работать над плюсовым кодом в угоду производительности, он будет обычный
Alexander
Ты не поверишь!
Alexander
это же как на хаскеле!
Ну я про это и говорю.
Anatolii
а в чем у пурсы заточеность под фронт?
кана
это элм
кана
пурсе все равно
Anatolii
вот у эльма заточенность под фронт
кана
пурса заточена на фронт ровно так же, как жс заточен на фронт
Дима
Фиг там был
Дима
У ноджс есть обязательства перед энтерпрайзом
A64m
нету у пурсы заточенности на фронт, есть всякие идеологические проблемы с оптимизациями (не делать их чтоб читаемый выхлоп был и т.д.)
Дима
И какие то разумные рамки производительности
Alexander
NodeJS
A64m
но если хоть необольшие усилия к этому приложат - уже будет на порядки быстрее в таких тестах
A64m
но чтоб как ghc было уже адовый труд понадобится
Alexander
Реальный кейс, между прочим.
Дима
Если бы у пурсы были обязательства перед кем то кроме slamdata то её тоже можно было бы юзать на бэке в кейсах ноды
кана
У ноджс есть обязательства перед энтерпрайзом
характеристики ноды ничего не говорят про заточенность жс или пурсы
A64m
нормальный рантайм для пурскрипта легче чем для хаскеля сделать
кана
Это блок
блок для кода на языке
кана
а не для языка
Дима
Если ты не вывозишь по производительности даже в каких-то минимальных пределах — это не используется никем кроме энтузиастов
кана
языку все равно даже если код на нем никогда не смогут скомпилировать
Дима
Критерий, когда еще "не вывозишь", а когда "уже можно" - неясен
Я уже написал выше, есть обязательства конкретные
Дима
Что и как может работать, в каких рамках может быть деградация
Дима
Это даёт всяким пейпалам надежду (ну, в рамках допустимой в опенсорсе), что они могут взять технологию и не огрести x10 замедление
Alexander
Из моего опыта: производительность - это такая вещь, с которой бегают, "глаза бешеные, шерсть дыбом", а по факту она мало кому нужна и достигается совсем другими способами.
A64m
ну имплементации которые на порядок тормознее топовых вполне используются в мейнстриме, даже на два порядка
A64m
4 конечно уже проблема Ж(((
Дима
Это уже бюрократия, так что в деталях не поясню, но соглашенности там вполне конкретные
Alexander
Это даёт всяким пейпалам надежду (ну, в рамках допустимой в опенсорсе), что они могут взять технологию и не огрести x10 замедление
Нельзя мерить производительность просто 10х или там сколько. Нужно раскладывать запросы по перцентилям и отдельно по каждому достигать нужных показателей
A64m
Из моего опыта: производительность - это такая вещь, с которой бегают, "глаза бешеные, шерсть дыбом", а по факту она мало кому нужна и достигается совсем другими способами.
так это опыт работы с имплементациями где производительность так и так сносная, выворачиваться на изнанку чтоб она приемлемая была не нужно
A64m
какой-нибудь ранний адаптер вполне рядовым образом сталкивается с проблемами когда самый некритичный в смысле производительности код просто умирает на совсем небольших данных
Alexander
мейнтейнеры платформ в курсе
Это хорошо, потому что я такюу практику только один раз видел, а пока не увидел, не знал, но ощущения, что "производительность" - это баззворд, не покидали.
A64m
как какой-нибудь Лев Валкин, который во времена ghc 6.6 просто не мог разбирать эксемель файл в какие-то смешные мегабайты
Дима
Если просто умирает это ладно, тут ключевая идея в том, что если код раньше норм бегал а сейчас как амеба — вот это плохо. Никто не просит срывать звёзд с неба
A64m
можно попробовать нагуглить
Alexander
Если просто умирает это ладно, тут ключевая идея в том, что если код раньше норм бегал а сейчас как амеба — вот это плохо. Никто не просит срывать звёзд с неба
Окей. Я все же немного про другое: когда бегают с криками "производительность" как ошпаренные, а по факту оптимизируют и не там, и не теми методами, и не нужно было
Дима
Ну это понятное дело 🙃
Alexander
Оптимизируют что-то, не выяснив, а есть ли вообще проблема
Alexander
Вот и с ленивостью то же самое: а есть ли вообще проблема, ленивый код или нет, пока не понадобится по-настоящему
Alexander
Ну разве что фолдить большие структуры все же надо с умом