Size: a a a

Compiler Development

2020 April 16

AT

Alexander Tchitchigin in Compiler Development
Sailor Moon
нет, именно ленивое вычисление включает мемоизацию https://en.m.wikipedia.org/wiki/Lazy_evaluation
. Call by name не включает мемоизации
И тем не менее, call-by-name налево и направо называют "lazy evaluation". 🤷‍♀️
источник

SM

Sailor Moon in Compiler Development
Зигохистоморфный Препроморфизм
а я где-то это сказал? про мемоизацию и оптимизацию санков это про вычислительной модели по требованию
ты сказал что это уже другое, а я изначально хотел подчеркнуть что мемоизация не менее важна
источник

ЗП

Зигохистоморфный Препроморфизм in Compiler Development
Sailor Moon
ты сказал что это уже другое, а я изначально хотел подчеркнуть что мемоизация не менее важна
та господи, если у тебя строгий язык и ты делаешь лень через () -> A
то забудь о оптимизации, у тебя просто call by name
источник

ЗП

Зигохистоморфный Препроморфизм in Compiler Development
Alexander Tchitchigin
И тем не менее, call-by-name налево и направо называют "lazy evaluation". 🤷‍♀️
ну так это и есть ленивое, но не оптимизированное)
никто не следит в памяти было это вычислено или еще нет и делает работу дважды/трижды/и тд
источник

SM

Sailor Moon in Compiler Development
Зигохистоморфный Препроморфизм
та господи, если у тебя строгий язык и ты делаешь лень через () -> A
то забудь о оптимизации, у тебя просто call by name
Почему? Можно же запоминать значения этой самой ()->A
источник

AT

Alexander Tchitchigin in Compiler Development
Зигохистоморфный Препроморфизм
ну так это и есть ленивое, но не оптимизированное)
никто не следит в памяти было это вычислено или еще нет и делает работу дважды/трижды/и тд
Я в курсе. Но это всё равно вопрос терминологии. Которой строго никто не придерживается.
источник

ЗП

Зигохистоморфный Препроморфизм in Compiler Development
Sailor Moon
Почему? Можно же запоминать значения этой самой ()->A
где? у тебя компилятор не имеет такой возможности)
костылить рядом какой-то стек вычислений?)
источник

VY

Vasiliy Yorkin in Compiler Development
@xgrommx Говорит о том, что мемоизацией таких вычислений должен кто-то заниматься. В ленивых языках это делает компилятор (пример — STG в х-е)
источник

SM

Sailor Moon in Compiler Development
Зигохистоморфный Препроморфизм
где? у тебя компилятор не имеет такой возможности)
костылить рядом какой-то стек вычислений?)
Почему не имеет такой возможности? Пример наивного кода сгенерированого компилятором:
(define x
      (let ((save nil))
         (lambda ()
            (unless save
                 (set! save (evaluate-x))
            save)))
источник

ЗП

Зигохистоморфный Препроморфизм in Compiler Development
Sailor Moon
Почему не имеет такой возможности? Пример наивного кода сгенерированого компилятором:
(define x
      (let ((save nil))
         (lambda ()
            (unless save
                 (set! save (evaluate-x))
            save)))
и? тут свой стек, который еще не понятно как будет чиститься
источник

ЗП

Зигохистоморфный Препроморфизм in Compiler Development
тут дело такое, или иметь какой-то weak map что сам подчищает ресурс или не выделываться и брать хаскель модель вычислений :D
источник

ЗП

Зигохистоморфный Препроморфизм in Compiler Development
уровень кода != уровень компилятора (извините, но тут все быстрее и надежней)
источник

ЗП

Зигохистоморфный Препроморфизм in Compiler Development
+ еще мерзский force тягать надо для () -> A чтобы вытащить данные, а вот представте если там будет переполнение стека вызовов?
источник

M

MaxGraey in Compiler Development
Cloudflare показали как можно написать программу на COBOL и запускать её в Cloudflare Worker через #WebAssembly.

https://blog.cloudflare.com/cloudflare-workers-now-support-cobol/

(конечно это хайп на недавних новостях из Нью Джерси)
источник

C

Constantine in Compiler Development
источник

AG

Alex Gryzlov in Compiler Development
Зигохистоморфный Препроморфизм
но это же и есть 3 модели
по значению
по имени
по требованию
есть еще call-by-coneed (мемоизация козначений) :)
источник

МБ

Михаил Бахтерев in Compiler Development
Alex Gryzlov
есть еще call-by-coneed (мемоизация козначений) :)
А как можно запомнить козначение?.. Не очень понятно.
источник

МБ

Михаил Бахтерев in Compiler Development
Зигохистоморфный Препроморфизм
+ еще мерзский force тягать надо для () -> A чтобы вытащить данные, а вот представте если там будет переполнение стека вызовов?
Ленивость нужна в нескольких местах программы, которые, всё равно, будут внутри библиотек. Никакой мерзости особой заметно не будет. Ситуация, в принципе, дуальна. В Haskell порой надо вызывать seq или обвешивать параметры !. Это же не кажется мерзким? :)

P.S. По опыту, ленивость уместна реже, чем уместны seq и ! в Haskell.
источник

T

TGG in Compiler Development
Кстати, оффтоп, но...
Может мне кто-нибудь пояснить, почему хаскель стал резко популярным?
источник

K

Konstantin in Compiler Development
потому, что ФП пошло в массы
источник