Jimmy Ostler 在 Rust 中实现尾调用解释器
Tail-Call Interpreters in Rust – Jimmy Ostler
最近我在研究如何优化 ternary 项目时,深入探索了 VM 分发的不同风格。受 Noel Welsh 关于 Scala 中 VM 分发方式的启发,我决定在 Rust 中复现并扩展这些技术。我实现了多种版本:从简单的栈式机器到利用 Rust 特性的复杂寄存器机器,包括 Switch Dispatch、Subroutine Dispatch、Indirect Dispatch 以及 Direct Dispatch。通过基准测试,我发现 Direct Dispatch 在我的机器上表现最佳,因为它完全消除了独立的 dispatch 函数,让每条指令直接调用下一条。这次实验不仅验证了尾调用优化在 Rust 中的可行性,也展示了不同分发策略对性能的具体影响。
尾调用解释技术指的是在编译时将某些递归转换为跳转,从而无需分配新的栈帧。