このガイドについて
このガイドは、rustc(Rust コンパイラ)がどのように動作するかを文書化するのに役立てること、 また新しいコントリビューターが rustc 開発に参加しやすくすることを目的としています。
このガイドはいくつかの部で構成されています。
rustcのビルドとデバッグ: どのような形でコントリビュートする場合にも役立つはずの情報、 すなわちビルド、デバッグ、プロファイリングなどについての情報が含まれています。- Rust へのコントリビュート: どのような形でコントリビュートする場合にも役立つはずの情報、 すなわちコントリビューションの手順、git と GitHub の使用、機能の安定化などについての情報が含まれています。
- ブートストラップ: Rust コンパイラが以前のバージョンを使って自身をビルドする仕組みについて説明します。これには、 ブートストラッププロセスの概要とデバッグ方法の紹介が含まれます。
- 高レベルなコンパイラアーキテクチャ: コンパイラの高レベルなアーキテクチャとコンパイルプロセスの各段階について説明します。
- ソースコード表現: ユーザーから受け取った生のソースコードを、 コンパイラが扱いやすいさまざまな形式へ変換するプロセスについて説明します。
- 支援インフラストラクチャ: コマンドライン引数の規約、rustc_driver や rustc_interface のようなコンパイラのエントリーポイント、エラーと lint の設計および実装を扱います。
- 解析: コードのさまざまな性質をチェックし、コンパイルプロセスの後続段階(例: 型チェック)に情報を提供するために コンパイラが使用する解析について説明します。
- MIR からバイナリへ: リンク済みの実行可能な機械語コードがどのように生成されるか。
- 末尾に、有用な参考情報を含む付録があります。 用語集を含め、異なる情報を扱うものがいくつかあります。
絶え間ない変化
rustc は実際のプロダクション品質のプロダクトであり、
かなりの数のコントリビューターによって継続的に作業されていることを念頭に置いてください。
そのため、コードベースの変更や技術的負債も相応に存在します。
加えて、このガイド全体で論じられている多くのアイデアは、
まだ完全には実現されていない理想化された設計です。
これらすべてのため、このガイドをあらゆる点で完全に最新の状態に保つことは非常に困難です!
もちろん、このガイド自体もオープンソースであり、 ソースは GitHub リポジトリでホストされています。 ガイドに誤りを見つけた場合は、issue を提出してください。 さらによいのは、修正を含む PR を開くことです!
このガイドにコントリビュートする場合は、 このガイドのドキュメント作成に関する対応する小節を参照してください。
「『すべての条件づけられたものは無常である』―― これを智慧によって見るとき、人は苦しみから離れる。」 ダンマパダ、第277偈
情報を見つけるその他の場所
現在あなたが読んでいるこのガイドには、 コンパイラのさまざまな部分がどのように動作するか、 そしてコンパイラにどのようにコントリビュートするかについての情報が含まれています。
次のサイトも役立つかもしれません。
- rustc API docs – コンパイラ、devtools、内部ツール向けの rustdoc ドキュメント
- Forge – Rust インフラストラクチャ、チーム手順などに関するドキュメントが含まれています
- compiler-team – Rust コンパイラチームの拠点であり、チーム手順、 アクティブなワーキンググループ、チームカレンダーについての説明があります。
- std-dev-guide – 標準ライブラリを開発するための同様のガイド。
- rust-analyzer book – rust-analyzer のドキュメント。
- The t-compiler Zulip
- Rust Internals フォーラム。質問したり、Rust の内部について議論したりする場所です
- Rust リファレンス。Rust の内部について特に述べているわけではありませんが、 それでも非常に優れたリソースです
- 古くなってはいますが、Tom Lee の優れたブログ記事は非常に役立ちます
- Rust Compiler Testing Docs
- @bors については、このチートシートが役立ちます
- プログラミング中、Google はいつでも役に立ちます。 すべての Rust ドキュメントを検索(標準ライブラリ、 コンパイラ、各種書籍、リファレンス、ガイド)して、言語やコンパイラに関する 情報をすばやく見つけることができます。
- また、Rustdoc に組み込まれた検索機能を使用して、見ている crate 内の
型や関数に関するドキュメントを見つけることもできます。
型シグネチャでも検索できます!
たとえば、
* -> vecを検索すると、Vec<T>を返す関数がすべて見つかるはずです。 ヒント: Rustdoc の任意のページで?を入力すると、さらに多くのヒントやキーボードショートカットを確認できます!