Why is Rust's build system uniquely hard to use?
a day ago
- Rust的构建系统即使是经验丰富的编译器工程师也感到困惑,这是因为其独特的阶段编号和引导过程。
- 将阶段0作为一个单独阶段(而不是“原生编译器”)命名加剧了困惑,因为其他编译器使用不同的术语。
- Rust从源代码构建其标准库,需要支持两个编译器版本(Beta版和树内版),这使得同时对编译器和标准库进行更改时带来显著痛苦。
- 其他编译器如GCC、Clang和GHC处理标准库构建的方式不同;C语言不从源代码构建标准库,Haskell仅需要一个版本。
- x.py的阶段编号存在偏差:--stage N使用阶段N进行构建,而不是创建阶段N,这违背直觉。
- 提议的更改包括重命名为基于系统根的标志(如--bootstrap-sysroot、--dev-sysroot等)、从标准库中移除cfg(bootstrap)、为仅涉及库的更改启用download-rustc,以及全面修订术语。
- 开发者强烈支持移除cfg(bootstrap),以降低复杂性并加速开发。