Retrobootstrapping Rust for some reason
a year ago
- #rust
- #compiler
- #bootstrapping
- Rust的初始编译器rustboot是用OCaml编写的,可生成32位i386机器码。
- 向rustc(使用LLVM)的过渡采用了分阶段验证流程:stage0(用rustboot编译rustc)、stage1(用stage0编译rustc)、stage2(用stage1编译rustc)。
- 由于工具链/编译器/库14年间的变化,位腐烂问题使得历史版本引导变得复杂。
- Debian的过期Docker镜像为重现Rust初始引导和固定点提供了可行环境。
- 正确的Rust固定点提交是2011年4月的6daf440037cb10baab332fde2b471712a3a42c76。
- 需要配合LLVM版本45e1a53efd40a594fa8bb59aee75bb0984770d29(或等效SVN提交)。
- 性能观察:stage0(rustboot)编译更快但生成代码较慢,LLVM带来2倍速度提升但二进制体积增大3倍。
- 现代Rust引导更慢,因代码量从最初的2.5万行增至60万行。