Rust 中的尾调用解释器:switch、子例程与间接线程对比
来源:lordgoati.us — 2026-08-01
📋 概述
作者把一篇 Scala 虚拟机派发风格的博文移植到 Rust,对比几种解释器派发策略:switch 派发、子例程线程、间接线程,并在更贴近他项目的寄存器机器上做了变体测试。核心是尾调用解释技术——把递归在编译期转成跳转,避免分配新栈帧,从而防止栈溢出。Rust 的显式尾调用特性(explicit_tail_calls / become)让这种优化可以直接声明。
🔑 核心要点
- 尾调用解释把递归编译成跳转,省去栈帧分配。
- 对比 switch、子例程线程、间接线程三种派发方式。
- Rust 不稳定特性 explicit_tail_calls(become)可显式声明尾调用。
- 子例程线程用 &dyn Fn() 动态派发替换 match 语句。
💡 金句
become 关键字确保我们的递归不会导致栈溢出。
👍 0
👎 0
← 返回 Lobsters 首页