Alexander
Ну или так, не суть
A64m
ну бывает что может, да
Alexander
А что вы (все, хаскеллисты, функциональщики и сочувствующие) думаете, что есть "идиоматично функциональный код", и нужно ли его придерживаться? Или можно лепить императивщину в IO и забить на все?
Ну то есть, я знаю, что комбинаторный стиль - это функциональный код. А есть еще критерии?
Aliester
иммутабельность
Aliester
ленивость
Alexander
Это слишком абстрактно. У меня каждая вторая программа на С++ использовала иммутабельность, и ленивые лямбды по возможности
Ilya
Alexander
Ленивость, она и в Хаскеле по прямому назначению редко используется. Обычный код будет работать и без лени, даже если его в PureScript закопипастить
Дима
Дима
Шаг влево шаг вправо и вся иллюзия рассеивается, и пурса в этом лучший пример
Дима
Люди решили что они пишут на хаскеле а во что это компилируется — мелочи; результат столкновения с реальностью — чудовищно неоптимизированный код
A64m
других языках там такие боль и ужас будет, что только держись
Дима
lazy by default это просто протекающая абстракция
A64m
Alexander
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 выходит. Следствие: подходы хаскеля требуют хаскель рантайма, без него ни шагу сделать нельзя
Anatolii
я думал на плюсах пишут когда нужен только производительный код
A64m
да на плюсах много чего пишут где на производительность вообще плевать
Дима
В purescript по вышеописанным причинам производительности нет вообще ни при каких условиях
Alexander
На плюсах пишут по разным причинам, часто не очень рациональным, но просто брать и писать производительный код - это вряд ли, даже если программист так будет думать
Alexander
Пока не начнешь работать над плюсовым кодом в угоду производительности, он будет обычный
Anatolii
Alexander
Ты не поверишь!
Anatolii
а в чем у пурсы заточеность под фронт?
кана
это элм
кана
пурсе все равно
Anatolii
вот у эльма заточенность под фронт
кана
пурса заточена на фронт ровно так же, как жс заточен на фронт
Дима
Фиг там был
Дима
У ноджс есть обязательства перед энтерпрайзом
A64m
нету у пурсы заточенности на фронт, есть всякие идеологические проблемы с оптимизациями (не делать их чтоб читаемый выхлоп был и т.д.)
Дима
И какие то разумные рамки производительности
Alexander
NodeJS
A64m
но если хоть необольшие усилия к этому приложат - уже будет на порядки быстрее в таких тестах
A64m
но чтоб как ghc было уже адовый труд понадобится
Alexander
Реальный кейс, между прочим.
Дима
Если бы у пурсы были обязательства перед кем то кроме slamdata то её тоже можно было бы юзать на бэке в кейсах ноды
Дима
A64m
нормальный рантайм для пурскрипта легче чем для хаскеля сделать
кана
а не для языка
Дима
Если ты не вывозишь по производительности даже в каких-то минимальных пределах — это не используется никем кроме энтузиастов
кана
языку все равно даже если код на нем никогда не смогут скомпилировать
Alexander
Дима
Дима
Что и как может работать, в каких рамках может быть деградация
Дима
Это даёт всяким пейпалам надежду (ну, в рамках допустимой в опенсорсе), что они могут взять технологию и не огрести x10 замедление
Alexander
Из моего опыта: производительность - это такая вещь, с которой бегают, "глаза бешеные, шерсть дыбом", а по факту она мало кому нужна и достигается совсем другими способами.
A64m
ну имплементации которые на порядок тормознее топовых вполне используются в мейнстриме, даже на два порядка
A64m
4 конечно уже проблема Ж(((
Дима
Это уже бюрократия, так что в деталях не поясню, но соглашенности там вполне конкретные
A64m
Дима
A64m
какой-нибудь ранний адаптер вполне рядовым образом сталкивается с проблемами когда самый некритичный в смысле производительности код просто умирает на совсем небольших данных
Alexander
мейнтейнеры платформ в курсе
Это хорошо, потому что я такюу практику только один раз видел, а пока не увидел, не знал, но ощущения, что "производительность" - это баззворд, не покидали.
A64m
как какой-нибудь Лев Валкин, который во времена ghc 6.6 просто не мог разбирать эксемель файл в какие-то смешные мегабайты
Дима
Если просто умирает это ладно, тут ключевая идея в том, что если код раньше норм бегал а сейчас как амеба — вот это плохо. Никто не просит срывать звёзд с неба
Alexander
A64m
можно попробовать нагуглить
Дима
Ну это понятное дело 🙃
Alexander
Оптимизируют что-то, не выяснив, а есть ли вообще проблема
Alexander
Вот и с ленивостью то же самое: а есть ли вообще проблема, ленивый код или нет, пока не понадобится по-настоящему
Alexander
Ну разве что фолдить большие структуры все же надо с умом