## Async Rust 代码膨胀与编译器优化
本文深入探讨了 Rust 中 “async 代码膨胀” 的问题——异步代码生成的二进制文件尺寸出乎意料地大,尤其对于资源受限的环境(如微控制器)而言,这尤其成问题。虽然 async Rust 提供了强大的并发性,但它并不总是能实现承诺的零成本抽象。
作者建议在编译器层面解决这个问题,并提交了一个项目目标以资助这项工作。 目前的代码膨胀源于即使对于简单的异步函数,也会生成不必要的复杂状态机。 具体来说,`Future::poll` 函数包含 `Returned` 和 `Panicked` 状态,这会引入开销。作者建议在发布模式下用 `Poll::Pending` 替换 panic,从而在嵌入式固件中实现 2-5% 的尺寸缩减。
进一步的优化包括消除没有 `await` 调用时的异步块的状态机(节省 0.2%)以及内联 future 以避免冗余的状态机创建。折叠状态机内的相同代码路径也为减小尺寸提供了显著的机会。
这些变化结合起来,显示出提高性能和减小二进制文件尺寸的潜力。作者正在寻求资助(预估 30,000 欧元)以在 Rust 编译器中直接实现这些优化,并欢迎感兴趣的组织联系。 ([https://rust-lang.github.io/rust-project-goals/2026/async-statemachine-optimisation.html](https://rust-lang.github.io/rust-project-goals/2026/async-statemachine-optimisation.html))