Hasty Briefsbeta

双语

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编译器中实现这些变更需要应对复杂性和专业知识的挑战。