Rust 中的 Monomorphization —— 泛型如何变成快速、具体代码

发布: (2026年2月27日 GMT+8 14:41)
2 分钟阅读
原文: Dev.to

Source: Dev.to

Rust 中的单态化是什么?

单态化是 Rust 在编译期间将泛型代码转换为针对每个具体使用类型的特定硬编码版本的过程。这实现了零成本抽象:你可以编写高级泛型代码而不会产生运行时性能惩罚。

fn main() {
    let integer = Some(5); // Compiles to Option_i32
    let float = Some(5.0); // Compiles to Option_f64
}
# Cargo.toml
edition = "2021"
use std::ops::Add;

fn add + Copy>(a: T, b: T) -> T {
    a + b
}

fn main() {
    let x = add(1i32, 2i32);
    let y = add(1.5f64, 2.5f64);
    println!("x = {}, y = {}", x, y);
}

单态化的权衡

二进制膨胀

为每种类型生成单独的具体版本的泛型代码会增加最终二进制文件的大小。

编译时间变慢

编译器必须实例化并优化每个具体版本,这会延长编译时间。

总结

  • 好处: 零成本抽象——静态分发、内联以及出色的运行时性能。
  • 成本: 更大的二进制文件和更长的编译时间。
  • Rust 哲学: 优先考虑运行时性能和安全性,因此单态化是默认策略。
0 浏览
Back to Blog

相关文章

阅读更多 »