The Rust Calling Convention We Deserve
3 months ago
- #Rust
- #Performance
- #ABI
- 文章批评了C语言ABI在传递复杂类型时的低效性,并建议采用Go寄存器ABI作为更优替代方案。
- Rust当前采用模仿C ABI的保守调用约定,导致简单函数的代码生成不够优化。
- 作者提出名为`-Zcallconv=fast`的新Rust调用约定,通过更高效利用寄存器来优化参数传递。
- 该提案包含复杂的寄存器分配启发式规则,涉及结构体、联合体和枚举类型的处理以最大化寄存器利用率。
- 文章探讨了在LLVM中实现此类调用约定的技术挑战,包括需要函数序言和尾声来处理基于寄存器的参数传递。
- 作者指出Rust可利用其检查函数体的能力进一步优化ABI,例如消除未使用参数或将高频参数放入寄存器传递。
- 结论部分强调这些改进可能带来显著性能提升,但也承认在Rust编译器中实现这些变更需要应对复杂性和专业知识的挑战。