加载中...

单态化(monomorphization)是泛型的一种编译实现策略:编译器为泛型函数或泛型类型的每一组实际类型参数生成一份专门的机器代码副本,运行时不存在「泛型」本身。
例如 Rust 中的 fn max<T: Ord>(a: T, b: T),若程序中以 i32 和 f64 两种类型调用,编译器就生成两个独立的具体函数。C++ 模板实例化本质上是同一机制。
单态化后的代码无需运行时类型信息与间接调用,方法可被内联,性能与手写专用代码相同,这是 Rust「零成本抽象」口号的重要支撑。
代价是编译时间变长、二进制体积膨胀(代码膨胀问题),且无法用于类型在运行时才确定的场景。
与之相对的是字典传递/虚表方案(如 Haskell 类型类默认实现、Rust 的 dyn Trait、Java 擦除),后者共享一份代码但引入间接开销。

登录 后参与讨论
暂无讨论,来发表第一条评论吧