Pull to refresh

Вычисление в куче Хаскеля

Reading time 1 min
Views 1.3K
Original author: Edward Z. Yang
Начало серии Куча Хаскеля

Дух новогодних подарков

Сегодня в статье мы кратко рассмотрим, что происходит, когда вы в куче Хаскеля открываете подарок с духом внутри. Почти во всём, что есть в куче, кроме констант и того, что уже вычислено, сидит дух. Весь вопрос в том, что станет делать дух в подарке.

В простейшем случае почти ничего!

В отличие от реальных подарочных сертификатов, вы обязаны забрать подарок (Хаскель не позволит вам вычислить thunk, а потом наплевать на указание, которое находится внутри)

В большинстве случаев оказывается, что дух полный лентяй. Когда его будят, чтобы ознакомиться с содержимым подарка, он ещё ничего не сделал и сперва должен поработать с другими подарками!

Чтобы выполнить примитивную операцию, требуется открыть все задействованные в ней подарки.


Однако, дух вдруг без видимой причины может открыть внеочередной подарок...

или выполнить опасное IO действие с побочным эффектом...

Учтите, что, открывая подарки, дух будит других духов:

В результате духи устраивают настоящий шабаш, и всё это, чтобы открыть единственный подарок!

Факт, что открытие одного подарка (thunk) может привести к цепной реакции — и есть причина, почему ленивые вычисления удивляют людей, которые раньше держали все свои объекты в куче уже распакованными (вычисленными). Чтобы удивление прошло, нужно понять, когда дух решит распаковать подарок (анализ строгости/strictness analysis) или может быть ваш подарок уже распакован (анализ амортизации/amortized analysis).

В прошлый раз: Куча Хаскеля
В следующий раз: IO работает с кучей Хаскеля
Tags:
Hubs:
+22
Comments 13
Comments Comments 13

Articles