Alexander
с ленивостью сложно, что обычно её не понимают
Alexander
я, например, не всегда понимаю
Anonymous
https://twitter.com/zedshaw/status/965481063555522560 да что с ним не так?
он токсичный гопник, и за 10 лет никак не изменился. про "Rails Is A Ghetto" слышал?
A64m
Мне не очень ясно, какие проблемы испытывают люди с ленивостью в Haskell. При прочих равных, о ленивости, о потреблении памяти, о производительности хаскельного кода можно не думать вообще, - до поры, когда это действительно понадобится, а это, пожалуй, небольшой процент случаев работы с большим количеством данных. Некоторые жалуются на ленивое IO, но я даже не представляю, что они там такого написали, чтобы поиметь проблем. Аргументация к производительности вообще довольно смешна, и детектит либо плюсовиков, либо студентов, которые с бешенными глазами носятся вокруг, желая все преждевременно оптимизировать. Хотя лишь 10% задач требуют оптимизации, а из них - только 10% кода, да и то - только после обнаружения этих проблем в профилировщике (цифры с потолка). И уж совсем странно выглядит хейт производительности в ФП/Хаскеле на фоне крайней распространенности Питона.
такая позиция по оптимизации сформирована теми кто писал на алголоподобном языке фортраноподобную лапшу, где и оптимизировать-то нечего. Сейчас, когда комбинаторы комбинируют, можно запросто написать код который в 10000 раз медленнее лапши, и это будет заметно не только в узких местах каких-то там
Alexander
Можно. Но известно же, что наивные, лобовые решения в Хаскеле работают не очень хорошо. Это, я думаю, все уважающие себя хаскеллисты знают, и умеют с этим жить. Точно так же и плюсовики обходят свои обстрелы ног.
Alexander
Такого вывода из моего сообщения сделать никак нельзя. Стреляют. Но учатся не стрелять, и оттого стреляют в меньшем количестве случаев, чем могли бы, или чем когда знали С++ плохо.
Aliester
вот в руби хорошо
Aliester
в ногу себе выстрелить невозможно
Dmitry
За исключением, когда тебе прилетает поломанный гем
Aliester
правда можно дойти до точки когда твой проект неподдерживаемое месиво а потом потратить кучу денег на переход на другую технологию(в случае с Рельсами)
Alexander
в ногу себе выстрелить невозможно
Почему? В динамическом языке по опрерделению стрельба со всех сторон
kosc
Чё-то как много стало тут у вас оффтопика. Раньше заходишь - нихрена не понятно, какие-то монадные трансформеры, анафорические лябмды, которые обсуждают зихистоморфный полиморфизм с лябмдяонидом.
Aliester
да
kosc
А теперь просто ЯП обсеряют - всё понятно и просто.
Aliester
даешь транслинзовые эктоморфизмы на банаховых полях!
kosc
С рельс?
Alexander
С рельс?
С рельс
Aliester
заходит такой воннаби хаскелист в чат
Aliester
не понимает ничего
A64m
Вообще "текучесть" (в смысле ВНЕЗАПНОГО подскакивания потребляемой памяти на несколько гигов с последующим рассасыванием, а не заагдочного роста потребления памяти на сколько-то там в день) это не свойство ленивости, а ФП вообще. Т.е. сами подходы с приниманием и возвращением иммутабельных данных такие. В строгом ФЯ просто в таком смысле текут все функции над списками кроме foldl, а в ленивом foldl
Aliester
выходит
Aliester
а мог бы с нами шутками перекидываться
kosc
Только я не вышел. Видимо, я всё же что-то понял. Осталось понять, что именно.
Aliester
а потом понемногу ему бы дали Real World Haskell, другие книжки, посмотрел бы видосы Пейтона Джонса
Aliester
и подсел бы
Alexander
Только я не вышел. Видимо, я всё же что-то понял. Осталось понять, что именно.
"Ты уже сделал свой выбор, Нео. Теперь ты должен понять его"
Aliester
хаскель-евангелисты должны действовать как наркодилеры
A64m
s/foldl/foldr/
да нет, все правильно. foldr как раз в ленивом может не течь, а в строгом не может.
kosc
Но не сказать, что бы стал понимать суть как-то лучше.
kosc
Надо больше кода писать, очевидно.
kosc
А то я сижу в этом своём питоне.
Denis
A64m
ну строгий фолдл со строгими конструкторами в аккумуляторе не течет, так про это я и написал.
Denis
блин, я с отрицаниями походу запутался !
Denis
короче ленивый foldl течет, а строгий нет
Ю ли я? 🤔
Душкина уже прочёл, однако.
Душкина надо расчитать и взять что-то человеческое.
kosc
Что не так с Душкиным?
A64m
ленивый фолдр с ленивыми конструкторами/функциями не течет, строгий - течет. Поскольку 90% функций над списками это foldr и 10% foldl то дальше последствия для строгости и ленивости понятны
kosc
Первые 100 страниц справочника по-моему отличный ман.
Ю ли я? 🤔
Что не так с Душкиным?
Косноязычие и заумь
kosc
Факты, факты! Или хотя бы примеры.
Ю ли я? 🤔
Справочник, мб, норм, но справочник - не учебник
kosc
Ну я и учебник по ФП читал.
Denis
> 90% функций над списками это foldr и 10% foldl Детали реализации же.
kosc
Но там больше про ФП, чем про хаскель.
Ю ли я? 🤔
А вот первая его книга совершенно отвратительна
A64m
> 90% функций над списками это foldr и 10% foldl Детали реализации же.
да нет, детали реализации могут быть другими, это как раз фундаментальный вопрос, что эти функции на самом деле делают
Ю ли я? 🤔
Скачет с темы на тему
Denis
я не очень понимаю фразу что о том что 90% это foldr, т.к. выразимо в обе стороны, семантика одинаковая будет, если пренебречь временем выполнения и ресурсами
Ю ли я? 🤔
То пережёвывает какие-то простые вещи, то поверхностно даёт или вообще пропускает совершенно необходимые
Denis
если мы выбираем более оптимальную реализацию по строгости/ленивости ЯП, то ответы же будут разные
Ю ли я? 🤔
Базовая часть про язык - вообще корявый перевод Gentle introduction to Haskell
Alexander
А вот первая его книга совершенно отвратительна
(Я, в целом, согласен, но хотел бы в скобках заметить, что в западной культуре не принято так резко говорить вещи в глаза или за глаза. Там бы сказали: написана в качестве хобби, то бишь, с любовью и без профессонализма. P.S. https://cs8.pikabu.ru/post_img/big/2016/08/15/1/1471214713140571170.jpg).
A64m
потому, что это по сути фолдр, а с фолдром без ленивости проблемы
Denis
если только какие-нибудь фокусы со snoc или DiffList применять
Denis
тогда может быть нормально получится
Denis
но я не пробовал
Denis
я помню был пост га гисте на эту тему, но я целиком не прочитал - там такие варианты рассматривались?
A64m
понятно, что на практике в строгих языках что-то делают не строго, а в ленивых что-то нелениво, но общая проблема ФП остается: ФП практичен только при неполной материализации промежуточных структур, но как не хитри, опасность влететь на полную материализацию всегда реально существует
Alexander
A64m
я помню был пост га гисте на эту тему, но я целиком не прочитал - там такие варианты рассматривались?
нет, пост на гисте, если имеется в виду "строгость и нищета списков" не про это. там про то, как сделать работающий текущий мап в строгом языке. Там прямо в предисловии о том, что обычно считается что ленивость нужно для того чтоб функции над списками не текли, но даже если вы согласны с тем, что они будут течь, вы все равно с ними помучаетесь
Denis
я давненько пролистывал, уже не помню
Andrey
не зря я вчера сюда восстановился )
Andrey
как раз запросил сабж
A64m
т.е. там у всех мапов списки материализуются, борются там с тем, чтоб материализация происходила однократно и без вышибания стека
Andrey
материализация списков вообще чревата сама по себе, даже в отрыве от неоптимальности ее реализации. поэтому фьюзинг и трансдьюсеры всякие придумывают.
A64m
материализация списков вообще чревата сама по себе, даже в отрыве от неоптимальности ее реализации. поэтому фьюзинг и трансдьюсеры всякие придумывают.
да, там есть еще сложности, если вообще запретить материализацию, даже частичную - как в итераторах - будут утечки времени, из-за пересчета всего по многу раз, причем даже с асимптотическим ухучшением алгоритма