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 :

Ленивый режим означает, что элементы будут создаваться только тогда, когда на них действительно ссылаются.

Поэтому, чтобы заставить компилятор мономорфизировать код в низкоуровневом крейте, мне нужно вызвать объектные функции из общедоступного неуниверсального функционального крейта нижнего уровня. (не знаю почему, но он не работает из асинхронной функции).

(Если кто-то знает о макросе, который говорит компилятору использовать «режим нетерпения», это будет лучше)

Другие вопросы по тегам