我听说弹床是实现TCO的一种低效方式。DrScheme (从技术上讲,是PLAI Scheme )是如何做到的呢?它是否采用了“正确”的方式(即,生成直接分支到尾部调用的汇编代码,而不是通过堆栈和trampolining)?
发布于 2008-12-05 17:15:20
PLT Scheme的实现者在他们的Google group中相当活跃,你可以从编写代码的人那里得到快速的回答。
不过,我不确定他们是否读到了,所以你最好的选择可能是在那里询问。
发布于 2008-12-06 03:28:50
MzScheme (现在的PLT Scheme)的首席实现者Matthew Flatt在2008年6月告诉我,他们曾经编译成虚拟机代码,在这种情况下,很容易编写一个执行适当尾部调用的VM。然而,现在这个系统已经足够成熟了,他们在x86上使用了一个简单的JIT。在任何一种情况下,都没有跳床- PLT计划的人知道他们的业务。
发布于 2008-12-07 20:55:31
在将Scheme代码转换为目标语言X (C、Java等)的实现中使用了Trampolines。这不支持正确的尾部调用。PLT Scheme采用JIT编译,因此不需要使用弹床。有关所使用的具体实现策略,请咨询PLT邮件列表中的问题。
PS:你可以在ReadScheme.org上的各种“编译方案到C”的论文中阅读更多关于跳床的内容。
https://stackoverflow.com/questions/344549
复制相似问题