这个问题是在 Rust 正式支持增量编译之前被问到的。Rust 1.24.0及更高版本默认为开发(调试)构建启用增量编译。
我是一个局外人,想看看 Rust 是否适合我的项目。
我读过 Rust 缺乏增量编译(尽管有 beta 功能)。
这个问题是在 Rust 正式支持增量编译之前被问到的。Rust 1.24.0及更高版本默认为开发(调试)构建启用增量编译。
我是一个局外人,想看看 Rust 是否适合我的项目。
我读过 Rust 缺乏增量编译(尽管有 beta 功能)。
在 C 和 C++ 中,一个编译单元通常是一个源文件和它传递的所有头文件。应用程序或库通常由链接在一起的多个编译单元组成。应用程序或库还可以与其他库链接。这意味着更改源文件只需要重新编译该源文件然后重新链接,更改外部库只需要重新链接,但更改头文件(无论是项目的一部分还是外部的;编译器无法区分)需要重新编译所有使用它的源文件,然后重新链接。
在 Rust 中,crate 是编译单元。(一个 crate 可以是一个应用程序或一个库。)Rust 不使用头文件。相反,等效信息作为元数据存储在已编译的 crates 中(解析速度更快,并且与 C/C++ 中的预编译头文件具有相同的效果)。一个板条箱还可以与其他板条箱链接。这意味着更改 crate 的任何源文件都需要重新编译整个 crate,而更改 crate 需要重新编译依赖它的所有 crate(目前,这意味着从源重新编译,即使 API 碰巧没有更改)。
为了回答您的问题,不,Rust 不会在您每次重新编译项目时重新编译所有依赖项。事实上恰恰相反。
Rust 中的增量编译是关于重用以前的 crate 编译中完成的工作以加快编译时间。例如,如果您更改了一个模块并且它不会影响其他模块,那么编译器将能够重用上次编译其他模块时生成的数据。缺乏增量编译通常只是大型或复杂 crate 的问题(例如,那些大量使用宏的)。