Size: a a a

2020 April 04

EG

Emmanuel Goldstein in rust_offtopic
В Miranda тоже ленивые списки, ЕМНИП
источник

EG

Emmanuel Goldstein in rust_offtopic
Не говоря уж о «диалектах хаскелля» вроде Idris
источник

DS

Doge Shibu in rust_offtopic
Emmanuel Goldstein
В Miranda тоже ленивые списки, ЕМНИП
Да, но там rewrite rules нету
источник

DS

Doge Shibu in rust_offtopic
А тут речь именно про них
источник

PK

Pavel Kvasnikov in rust_offtopic
Doge Shibu
И вот этот трюк как раз только в хаскеле и доступен, потому что без ленивости и чистоты - вот это сворачивание операций fold и unfold не всегда корректно
Насколько я помню это приводит к новому классу проблем - space leak я правда не пересекался так на хаскеле только хеллуовордил. Это большая проблема?
источник

EG

Emmanuel Goldstein in rust_offtopic
Doge Shibu
Да, но там rewrite rules нету
Но можно сделать
источник

DS

Doge Shibu in rust_offtopic
Emmanuel Goldstein
Но можно сделать
Но не сделали. Можно это много где сделать, но только из коробки оно в хаскеле есть.
источник

EG

Emmanuel Goldstein in rust_offtopic
Pavel Kvasnikov
Насколько я помню это приводит к новому классу проблем - space leak я правда не пересекался так на хаскеле только хеллуовордил. Это большая проблема?
Если быть неаккуратным, можно соорудить себе серьёзный space leak. Но:
1. GHC в целом умеет иногда это оптимизировать
2. Если быть аккуратным и отменять ленивость, где не надо, то это фиксиццо
источник

DS

Doge Shibu in rust_offtopic
Pavel Kvasnikov
Насколько я помню это приводит к новому классу проблем - space leak я правда не пересекался так на хаскеле только хеллуовордил. Это большая проблема?
Ну в сообществе с ними работать более-менее умеют. То есть я в живую ни разу не ловил, но я следую гайдлайнам и вообще стараюсь поменьше ленивость юзать.
источник

EG

Emmanuel Goldstein in rust_offtopic
Doge Shibu
Ну в сообществе с ними работать более-менее умеют. То есть я в живую ни разу не ловил, но я следую гайдлайнам и вообще стараюсь поменьше ленивость юзать.
Ну есть, например, вот такой простой пример
bad :: [Int] -> Int -> Int
bad []         c = c
bad (_:others) c = bad others $ c + 1
источник

EG

Emmanuel Goldstein in rust_offtopic
Хвостовая рекурсия, казалось бы, что может пойти не так
источник

DS

Doge Shibu in rust_offtopic
Emmanuel Goldstein
Ну есть, например, вот такой простой пример
bad :: [Int] -> Int -> Int
bad []         c = c
bad (_:others) c = bad others $ c + 1
Ну работать со списками напрямую без комбинаторов - это как раз то, что в гайдлайнах не советуют.
источник

В

Вафель in rust_offtopic
теперь я знаю что такое space leak, спасибо
источник

СД

Стас Донцов... in rust_offtopic
Doge Shibu
Но из-за этого всё хранится в куче, что для гц языка - более менее нормально, а для раста это плохо, если пользоваться системным аллокатором
а он не имеет ручек для аллоцирования? выходит в расте не используют персистентные коллекции?
источник

СД

Стас Донцов... in rust_offtopic
Doge Shibu
На расте это скорее не нужно, потому что пока никто не сделал нормальную поддержку кастомных аллокаторов для конкретных типов.

Такие коллекции вполне эффективны, если они работают с аллокатором как в гц языках
и кстати почему в языках с гц они эффективны, а в языках без - нет?
источник

DS

Doge Shibu in rust_offtopic
Стас Донцов
а он не имеет ручек для аллоцирования? выходит в расте не используют персистентные коллекции?
Да, в расте есть крейт с ними, но в живую его использования я пока не видел.
источник

DS

Doge Shibu in rust_offtopic
Стас Донцов
и кстати почему в языках с гц они эффективны, а в языках без - нет?
Потому что в языках с гц аллокации очень дешевые - тупо инкремент одного указателя
источник

DS

Doge Shibu in rust_offtopic
А в языках без гц и на системном аллокаторе - аллокация это не самый тривиальный кусок логики
источник

DS

Doge Shibu in rust_offtopic
Можешь ради интереса погуглить устройства маллока в том же glibc
источник

DS

Doge Shibu in rust_offtopic
И если у тебя куча мелких аллокаций (как при использовании персистетных коллекций и бывает), то вот эта цена аллокации через системный аллокатор сыграет ощутимую роль
источник