对于我的类项目,我必须实现一个(简单的)Scheme编译器.
在这一点上,我正在集思广益,我将如何实现各种功能.
为什么典型的Scheme实现会使用复杂的GC?如果代码真正起作用(没有副作用),则当前未执行的函数不能保持分配的内存.永远!(除非它是泄漏!)
因此,为什么不使用大多数命令式语言遵循的策略,例如C堆栈分配.每次输入新的词汇上下文(即(define (foo ..)或(letrec ...)时,在堆栈上分配变量存储,然后在退出上下文后简单地调整堆栈指针.
由于scheme没有malloc()并且只允许分配预定义类型,因此简单的实现可以使用池或区域分配器,因此"堆栈"永远不应该分段.
我不必实现闭包,但我认为即使这些也可以通过将绑定值复制到用于专门跟踪闭包状态的单独堆栈来完成.
思考?