Rust缺少增量编译意味着什么呢?

Max*_*axB 4 incremental-linking incremental-build rust incremental-compiler

我是一个局外人,试图看看Rust是否适合我的项目.

我读过Rust缺少渐进式编译(尽管有beta版功能).

  1. 这类似于在C++的头文件中实现所有内容(就像在很多Boost中一样)?

  2. 如果以上是正确的,这是否会将Rust限制为具有较小依赖性的相当小的项目?(如果QtKDE只是标题库,那么使用它们的程序开发起来会非常痛苦,因为每次你想编译自己的代码时都会有效地重新编译Qt/KDE.)

Fra*_*gné 7

在C和C++中,编译单元通常是源文件以及它可传递的所有头文件.应用程序或库通常由链接在一起的多个编译单元组成.应用程序或库还可以与其他库链接.这意味着更改源文件需要仅重新编译该源文件然后重新链接,更改外部库只需要重新链接,但更改头文件(无论是项目的一部分还是外部的;编译器无法区分)需要重新编译使用它然后重新链接的所有源文件.

在Rust中,crate是编译单元.(包可以是应用程序或库.)Rust不使用头文件 ; 相反,等效信息作为元数据存储在已编译的包中(解析速度更快,并且与C/C++中的预编译头具有相同的效果).箱子还可以与其他板条箱相连.这意味着更改包的任何源文件需要重新编译整个包,并且更改包需要重新编译依赖它的所有包(当前,这意味着从源重新编译,即使API恰好没有更改).

为了回答你的问题,不,每次重新编译项目时Rust都不会重新编译所有依赖项; 事实恰恰相反.

Rust中的增量编译是关于重复使用以前编译包中的工作来加快编译时间.例如,如果更改模块并且它不影响其他模块,则编译器将能够重用上次编译其他模块时生成的数据.缺少增量编译通常只是大型或复杂的板条箱(例如那些大量使用宏)的问题.