Max*_*axB 4 incremental-linking incremental-build rust incremental-compiler
我是一个局外人,试图看看Rust是否适合我的项目.
我读过Rust缺少渐进式编译(尽管有beta版功能).
在C和C++中,编译单元通常是源文件以及它可传递的所有头文件.应用程序或库通常由链接在一起的多个编译单元组成.应用程序或库还可以与其他库链接.这意味着更改源文件需要仅重新编译该源文件然后重新链接,更改外部库只需要重新链接,但更改头文件(无论是项目的一部分还是外部的;编译器无法区分)需要重新编译使用它然后重新链接的所有源文件.
在Rust中,crate是编译单元.(包可以是应用程序或库.)Rust不使用头文件 ; 相反,等效信息作为元数据存储在已编译的包中(解析速度更快,并且与C/C++中的预编译头具有相同的效果).箱子还可以与其他板条箱相连.这意味着更改包的任何源文件需要重新编译整个包,并且更改包需要重新编译依赖它的所有包(当前,这意味着从源重新编译,即使API恰好没有更改).
为了回答你的问题,不,每次重新编译项目时Rust都不会重新编译所有依赖项; 事实恰恰相反.
Rust中的增量编译是关于重复使用以前编译包中的工作来加快编译时间.例如,如果更改模块并且它不影响其他模块,则编译器将能够重用上次编译其他模块时生成的数据.缺少增量编译通常只是大型或复杂的板条箱(例如那些大量使用宏)的问题.