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