1 个不稳定版本

0.1.0 2023年11月21日

#6 in #预编译


precompile 中使用

MIT 许可证

9KB
169 代码行

预编译

预编译 是一个仅限nightly的crate,它使用 #![feature(specialization)] 对泛型函数的特定单态化进行预编译。这可以为预期使用有限类型集的多下游crate的泛型函数提供优势。

例如

// crate: A
pub fn generic_fn<T>() {
    // ...
}

// crate B
A::generic_fn::<u32>();

// crate C
A::generic_fn::<u32>();

此代码通常将 A::generic_fn::<u32> 编译两次。

而如果我们预编译 generic_fn

// crate: A
#[precompile::precompile]
#[precompile_with(u32)]
pub fn generic_fn<T>() {
    // ...
}

那么无论有多少crate使用 A::generic_fn::<u32>,它都只会在crate A 构建时编译一次。

这意味着构建 A 可能会产生更大的预编译时间成本,但用于下游使用时的单态化成本会更低。

依赖项

~275–720KB
~17K SLoC