我正在编写一个Scheme解释器(尝试完全兼容R5RS)并且让我感到震惊的是编译成VM操作码会使它更快。 (如果我错了,请纠正我。)我可以解释内存中的Scheme源代码,但我仍然坚持理解代码生成。
我的问题是:从解析树生成操作码需要哪些模式,例如JVM或任何其他VM(甚至是真机)?如果有的话,这样做的复杂性,优点或缺点是什么?
答案 0 :(得分:7)
对于Scheme,将有两个与JVM相关的主要复杂情况。
首先,JVM不支持显式尾部调用注释,因此您无法保证R5RS(3.5)所需的正确的尾递归,而无需借助昂贵的迷你解释器技巧
第二个问题是延续支持。 JVM没有为实现continuation提供任何有用的东西,所以你再次使用迷你解释器。即,每个CPS平凡函数应返回一个下一个闭包,然后由无限小型解释器循环调用。
但仍有许多有趣的优化可能性。我建议你看看Bigloo(有一个相对较快的JVM后端)和Kawa。对于常规编译技术,请查看Scheme in 90 minutes。
而且,解释是编译的可行替代方案(至少在JVM上,由于其严重的局限性和一般的低效率)。了解SISC的实施方式,这是一种非常有趣和创新的方法。