64·进阶特性进阶

单态化与静态分发

单态化与静态分发

学习目标

  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...