Rust 尾调用优化新突破:nightly become 关键字性能超越手写汇编

Available in: 中文
2026-04-05T23:47:29.196Z·1 min read
开发者 Matt Keeter 发表了一篇深入的技术分析,展示了 Rust 新的 nightly 尾调用优化关键字可以构建出性能超越惯用 Rust 实现和手写 ARM64 汇编代码的 VM 解释器。该项目实现了用于 Hundred Rabbits 创意计算生态系统中的 Uxn 栈式 CPU 模拟器。

Rust 尾调用优化达到新高度

开发者 Matt Keeter 发表了一篇深入的技术分析,展示了 Rust 新的 nightly 尾调用优化关键字可以构建出性能超越惯用 Rust 实现和手写 ARM64 汇编代码的 VM 解释器。该项目实现了用于 Hundred Rabbits 创意计算生态系统中的 Uxn 栈式 CPU 模拟器。

解释器的性能问题

传统解释器循环面临两个关键瓶颈:不可预测的分发分支(在 256 个操作码中选择)和内存绑定的状态访问。Keeter 优化 Uxn 模拟器的历程经历了多个阶段:

  1. 原始 Rust 实现('Raven')——简洁但受编译器优化约束限制
  2. 手写 ARM64 汇编——使用令牌线程技术快 40-50%
  3. 手写 x86-64 汇编——约快 2 倍,但引入了内存安全 bug
  4. 尾调用 Rust 实现——以安全保证匹配汇编性能

尾调用方法的工作原理

核心洞察是使用 Rust 的 关键字(七个月前通过 RFC PR #144232 进入 nightly)在语言层面实现线程化代码:

这种方法实现了与汇编令牌线程相同的效果——每条指令以直接跳转到下一条结束——但拥有 Rust 的安全保证,无需维护约 2000 行不安全的汇编代码。

基准测试结果

尾调用 Rust 后端可作为 x86 汇编后端的可行替代方案,仅有轻微的性能损失。它显著优于原始基于循环的 Rust 实现,验证了现代编译器在获得正确抽象时能够与手写低级代码竞争。

对语言设计的更广泛影响

这项工作是语言设计领域向一等尾调用优化支持发展的更广泛趋势的一部分。Keeter 指出,"尾调用技术近来已成为热门话题",多个语言社区正在探索类似的方法。

该项目展示了:

← Previous: Iran Threatens OpenAI's B Stargate Data Center in Abu Dhabi with 'Complete Annihilation'Next: Qwen 3.6 Plus Breaks Record: First Model to Process Over 1 Trillion Tokens in a Single Day →
Comments0