Начало серии Куча Хаскеля
Дух новогодних подарков
Сегодня в статье мы кратко рассмотрим, что происходит, когда вы в куче Хаскеля открываете подарок с духом внутри. Почти во всём, что есть в куче, кроме констант и того, что уже вычислено, сидит дух. Весь вопрос в том, что станет делать дух в подарке.
В простейшем случае почти ничего!
В отличие от реальных подарочных сертификатов, вы обязаны забрать подарок (Хаскель не позволит вам вычислить thunk, а потом наплевать на указание, которое находится внутри)
В большинстве случаев оказывается, что дух полный лентяй. Когда его будят, чтобы ознакомиться с содержимым подарка, он ещё ничего не сделал и сперва должен поработать с другими подарками!
Чтобы выполнить примитивную операцию, требуется открыть все задействованные в ней подарки.
Однако, дух вдруг без видимой причины может открыть внеочередной подарок...
или выполнить опасное IO действие с побочным эффектом...
Учтите, что, открывая подарки, дух будит других духов:
В результате духи устраивают настоящий шабаш, и всё это, чтобы открыть единственный подарок!
Факт, что открытие одного подарка (thunk) может привести к цепной реакции — и есть причина, почему ленивые вычисления удивляют людей, которые раньше держали все свои объекты в куче уже распакованными (вычисленными). Чтобы удивление прошло, нужно понять, когда дух решит распаковать подарок (анализ строгости/strictness analysis) или может быть ваш подарок уже распакован (анализ амортизации/amortized analysis).
В прошлый раз: Куча Хаскеля
В следующий раз: IO работает с кучей Хаскеля
Дух новогодних подарков
Сегодня в статье мы кратко рассмотрим, что происходит, когда вы в куче Хаскеля открываете подарок с духом внутри. Почти во всём, что есть в куче, кроме констант и того, что уже вычислено, сидит дух. Весь вопрос в том, что станет делать дух в подарке.
В простейшем случае почти ничего!
В отличие от реальных подарочных сертификатов, вы обязаны забрать подарок (Хаскель не позволит вам вычислить thunk, а потом наплевать на указание, которое находится внутри)
В большинстве случаев оказывается, что дух полный лентяй. Когда его будят, чтобы ознакомиться с содержимым подарка, он ещё ничего не сделал и сперва должен поработать с другими подарками!
Чтобы выполнить примитивную операцию, требуется открыть все задействованные в ней подарки.
Однако, дух вдруг без видимой причины может открыть внеочередной подарок...
или выполнить опасное IO действие с побочным эффектом...
Учтите, что, открывая подарки, дух будит других духов:
В результате духи устраивают настоящий шабаш, и всё это, чтобы открыть единственный подарок!
Факт, что открытие одного подарка (thunk) может привести к цепной реакции — и есть причина, почему ленивые вычисления удивляют людей, которые раньше держали все свои объекты в куче уже распакованными (вычисленными). Чтобы удивление прошло, нужно понять, когда дух решит распаковать подарок (анализ строгости/strictness analysis) или может быть ваш подарок уже распакован (анализ амортизации/amortized analysis).
В прошлый раз: Куча Хаскеля
В следующий раз: IO работает с кучей Хаскеля