发布于 2017-06-04 00:22:26
在C和C++中,编译单元通常是源文件和它所传递的所有头文件。应用程序或库通常由链接在一起的多个编译单元组成。应用程序或库还可以与其他库链接。这意味着,更改源文件只需要重新编译该源文件,然后再重新链接,更改外部库只需要重新链接,但是更改头文件(它是项目的一部分还是外部的;编译器无法分辨区别)需要重新编译使用它的所有源文件,然后再重新连接。
在Rust中,板条箱是编译单元。(机箱可以是应用程序或库。) Rust不使用头文件;相反,等效的信息存储在已编译的板条箱中的元数据中(解析速度更快,并具有与C/C++中预编译头相同的效果)。一个板条箱还可以与其他板条箱连接。这意味着更改机箱的任何源文件都需要重新编译整个机箱,而更改机箱则需要重新编译所有依赖它的板条箱(目前,这意味着从源代码重新编译,即使API碰巧没有更改)。
为了回答您的问题,不是,Rust并不是每次重新编译项目时都重新编译所有的依赖项;实际上恰恰相反。
Rust中的增量编译是关于重用以前在机箱编译中完成的工作,以加快编译时间。例如,如果更改一个模块而不影响其他模块,编译器将能够重用上次编译其他模块时生成的数据。缺乏增量编译通常只是大型或复杂的板条箱(例如那些大量使用宏的)的问题。
https://stackoverflow.com/questions/44348978
复制相似问题