64·进阶特性进阶

单态化与静态分发

monomorphizationstatic-dispatch

单态化与静态分发

学习目标

  1. 理解单态化的原理
  2. 掌握 impl Trait 语法
  3. 理解编译时间 vs 运行时间权衡

核心概念

单态化

// 泛型函数
fn add<T: std::ops::Add<Output = T>>(a: T, b: T) -> T {
    a + b
}

fn main() {
    add(1, 2);      // 编译器生成 add_i32
    add(1.0, 2.0);  // 编译器生成 add_f64
    // 每种类型一个副本,零运行时开销
}

impl Trait 语法糖

// 等价于泛型 + trait bound
fn make_adder(offset: i32) -> impl Fn(i32) -> i32 {
    move |x| x + offset
}

// 编译器知道具体类型,可以内联优化

静态 vs 动态

特性静态分发动态分发
语法impl Traitdyn Trait
确定时机编译时运行时
性能更快(内联)有间接调用开销
二进制大小更大(每个类型一份)更小
灵活性类型必须编译时确定可以运行时变化

小结

概念说明
单态化为每个具体类型生成代码
impl Trait静态分发
dyn Trait动态分发
权衡编译时间 vs 运行时间 vs 二进制大小

练习编辑器

rust
Loading...

继续学习

完成本课后,建议继续学习下一课「Newtype 模式」 以巩固所学知识。