Lobsters | 原文链接 | 2026-09-11 收录

惰性求值下如何避免「正确性层面」的空间泄漏

来源: epicandmonicisnotiso.blogspot.com — 2023-04-05

概述

这篇文章回应了上一篇惰性求值文章下读者的疑问:既然承认存在一类关乎正确性的空间泄漏,那该如何避免?作者先给出分类——严格性泄漏(递归函数生成互相依赖的 thunk)、存活性泄漏(大值因被管道的 thunk 引用而无法回收)、过度共享泄漏(生成器被两条管道共享后实现规模被保留)——再逐一给对策。核心工具是把 STG 当作运行模型来读:在 STG 里所有分配(尤其 thunk)在 let 处显式出现,所有求值发生在 case 表达式上,闭包的自由变量被明确列出,因此能看清问题究竟出在哪里。

核心要点

金句

把 STG 这类中间语言当作 Haskell 程序在真实世界里的运行模型。
返回 Lobsters 首页