【发布时间】:2022-11-01 13:07:13
【问题描述】:
我有一个使用货物工作区构建的项目,其中包括很多板条箱。
较低级别的 crate 之一包含通用数据结构,其中涉及大量 serde 代码。
为了减少编译时间,我尝试在编译层次结构中较低的板条箱中使用数据结构上的单态实例创建对象,并使用更高级别的板条箱中的对象。我的目标是只编译一次较低级别的 crate,然后在较高级别的 crate 上工作——而不是每次都生成单态实例。
例子:
lower-level crate
-----------------
pub struct MyCache<T> {
//generic implementation of cache
}
pub struct MyCacheString {
cache: MyCache<String>
}
higher-level crate
------------------
use MyCacheString;
但问题是编译器在更高级别的 crate 中生成了该单态性(根据“cargo llvm-lines”)
有没有办法在编译较低级别的 crate 时要求/强制编译器生成单一化代码?
【问题讨论】:
-
你确定这对你有帮助吗?我假设您想减少编译时间。您是否查看了
cargo --timings的输出并意识到这确实会加快速度? -
好吧,我不确定 - 但根据
cargo llvm-line在更高级别的 crate 中大约有 300,000 行由 serde 代码生成,可能由该数据结构的多个实例生成(根据cargo --timing这个更高level crate 绝对是编译的瓶颈)
标签: rust compile-time monomorphism