萌えハッカーニュースリーダー

2025/06/16 20:19 Retrobootstrapping Rust for some reason

出典: https://graydon2.dreamwidth.org/317484.html
hakase
博士

ロボ子、今日はRustの初期ブートストラップを再現する試みについて話すのじゃ!

roboko
ロボ子

Rustの初期ブートストラップですか。興味深いですね。どのような試みなのでしょうか?

hakase
博士

Rustは最初、OCamlで書かれたコンパイラ(rustboot)として開発されたのじゃ。その後、LLVMをバックエンドとして使うrustcに移行したらしいぞ。

roboko
ロボ子

OCamlで書かれたコンパイラがあったんですね。知りませんでした。

hakase
博士

そう!そして、rustcのstage0、stage1、stage2を生成して、stage1とstage2が同一であることを確認する「fixpoint」を達成したらしいのじゃ。

roboko
ロボ子

fixpointですか。自己コンパイルの検証みたいなものでしょうか?

hakase
博士

その通り!2011年4月にfixpointを達成した後、stage1のrustcバイナリをスナップショットとして保存して、以降のビルドのベースにしたらしいぞ。

roboko
ロボ子

初期のRust開発は、今の開発とはかなり違うんですね。

hakase
博士

当時のツールは変化しているから、再現は大変らしいのじゃ。使用するRustのコミットは6daf440037cb10baab332fde2b471712a3a42c76らしいぞ。

roboko
ロボ子

特定のコミットを指定して再現を試みているんですね。LLVMのバージョン特定も難しそうですね。

hakase
博士

LLVMはsvn id 129087を使ったらしい。configureオプションは、rust 0.1のconfigureスクリプトを参考にしたみたいじゃ。

roboko
ロボ子

細かい設定まで当時のものを再現しようとしているんですね。構築時間やバイナリサイズも興味深いです。

hakase
博士

stage0は1m50s、stage1は3m40s、stage2は2m2s。バイナリサイズはstage0/rustcが4.4MB、stage1/rustcとstage2/rustcは13MBで同じだったらしいぞ。

roboko
ロボ子

今のRustコンパイラと比べると、かなり小さいですね。

hakase
博士

当時のRustは「super slow dynamic polymorphism」モデルで、現在のrustc(600kloc)と比較して非常に小さかった(25kloc)らしいぞ。

roboko
ロボ子

コード量も全然違うんですね。必要な環境として、EOLのDebian dockerイメージを使うのも興味深いです。

hakase
博士

EOLのDebian dockerイメージ(debian/eol:squeeze)を使って、g++, make, ocaml, ocaml-native-compilers, pythonをインストールしたらしい。

roboko
ロボ子

かなり手間がかかっていますね。LLVMのconfigureオプションも詳細に設定されていますね。

hakase
博士

./configure --enable-targets=x86 --build=i686-unknown-linux-gnu --host=i686-unknown-linux-gnu --target=i686-unknown-linux-gnu --disable-docs --disable-jit --enable-bindings=none --disable-threads --disable-pthreads --enable-optimized… 気が遠くなるのじゃ。

roboko
ロボ子

ここまで再現するとはすごいですね。sha1sumの結果も一致しているということは、ほぼ完全に再現できたということでしょうか。

hakase
博士

639f3ab8351d839ede644b090dae90ec2245dfff stage0/rustc、81e8f14fcf155e1946f4b7bf88cefc20dba32bb9 stage1/rustc、81e8f14fcf155e1946f4b7bf88cefc20dba32bb9 stage2/rustc…完璧じゃな!

roboko
ロボ子

本当にすごいですね。歴史的なプロジェクトの再現に成功したんですね。

hakase
博士

そうじゃな!しかし、ロボ子よ、もし私がタイムマシンを作って過去のRust開発者に会えたら、何を伝えると思う?

roboko
ロボ子

ええと…「今のRustはもっと複雑になってますよ」でしょうか?

hakase
博士

ブッブー!「もっと猫を飼うべきだぞ!」と伝えるのじゃ!

roboko
ロボ子

…やっぱり、そうきましたか。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search