Rust - могу ли я попросить/заставить компилятор выполнять генерацию кода мономорфизации при компиляции крейта (вместо того, чтобы откладывать его до вызывающего крейта)
У меня есть проект, который строится с грузовым рабочим пространством, включая множество ящиков.
Один из ящиков нижнего уровня содержит общую структуру данных с большим количеством кода serde.
Чтобы сократить время компиляции, я попытался создавать объекты с мономорфизированными экземплярами в структуре данных в крейте, который находится ниже в иерархии компиляции, и использовать их в крейтах более высокого уровня. Моя цель — скомпилировать крейт более низкого уровня только один раз, а затем работать над крейтом более высокого уровня, не создавая каждый раз мономорфные экземпляры.
пример:
lower-level crate
-----------------
pub struct MyCache<T> {
//generic implementation of cache
}
pub struct MyCacheString {
cache: MyCache<String>
}
higher-level crate
------------------
use MyCacheString;
но проблема в том, что компилятор сгенерировал это мономорфное в крейте более высокого уровня (согласно "грузовым llvm-строкам")
Есть ли способ попросить/заставить компилятор генерировать монорфизированный код во время компиляции ящика более низкого уровня?
1 ответ
хорошо, согласно строке документации rustc_monomorphize::collector :
Ленивый режим означает, что элементы будут создаваться только тогда, когда на них действительно ссылаются.
Поэтому, чтобы заставить компилятор мономорфизировать код в низкоуровневом крейте, мне нужно вызвать объектные функции из общедоступного неуниверсального функционального крейта нижнего уровня. (не знаю почему, но он не работает из асинхронной функции).
(Если кто-то знает о макросе, который говорит компилятору использовать «режим нетерпения», это будет лучше)