Open3

Rustへのコントリビュートメモ

long_long_floatlong_long_float

Rustへのコントリビュートを行う時のメモを書いていく。
一応目的としては、以下の通り。

  • コンパイラの理解を深める
  • Rustの理解を深める
  • 対外的な実績の作成

コントリビュートを始めるにあたって、 https://rustc-dev-guide.rust-lang.org/ がかなり詳しい。
開発の流れなども詳細に書いてあるが、自分用に開発の流れを簡単にまとめる。

  1. https://rustc-dev-guide.rust-lang.org/building/how-to-build-and-run.html に従って開発環境をセットアップする。
    • 超簡単にまとめると下記コマンドを実行すればよさそう
    ./x setup
    ./x build
    rustup toolchain link stage1 build/host/stage1
    rustc +stage1 -vV # バージョン末尾に -dev とあれば成功
    
  2. https://github.com/rust-lang/rust/issues?q=is%3Aissue+is%3Aopen でissueを探す。
    • needs-triage のラベルがついているissueはRustのメンバーによってチェックされていないものなのでやらないのが吉 (参考: https://github.com/rust-lang/rust/issues/113261)
    • 簡単なissueは E-easy のラベルがついている
  3. 内容を確認し、できそうなら @rustbot claim とコメントすることで該当issueにアサインされる。
  4. Rustリポジトリをforkして修正、pushする。
  5. Pull requstを作成する。Descriptionは特にテンプレートがないが、自分はこのPRで何をしたかを書いた。
  6. 修正のコメントがあれば修正する。
  7. マージされる。

ビルドしたコンパイラを使うには、rustcなどに +stage1 を渡せばよい。

rustc +stage1 test.rs
cargo +stage1 build
long_long_floatlong_long_float

長い期間をrebaseする際に以下のエラーが出ることがあった。

./x --help
INFO: Downloading and building bootstrap before processing --help command.
      See src/bootstrap/README.md for help with common commands.
Building bootstrap
   Compiling filetime v0.2.23
   Compiling build_helper v0.1.0 (/home/user/git/rust-suggest-move-arg-outside/src/tools/build_helper)
error[E0514]: found crate `cfg_if` compiled by an incompatible version of rustc
  --> /home/user/.cargo/registry/src/index.crates.io-6f17d22bba15001f/filetime-0.2.23/src/lib.rs:43:1
   |
43 | cfg_if::cfg_if! {
   | ^^^^^^
   |
   = note: the following crate versions were found:
           crate `cfg_if` compiled by rustc 1.79.0-beta.1 (6b544f5ff 2024-04-28): /home/user/git/rust-suggest-move-arg-outside/build/boo
tstrap/debug/deps/libcfg_if-e1408dd3e6d0c8e3.rmeta
   = help: please recompile that crate using this compiler (rustc 1.79.0-beta.6 (66eb3e404 2024-05-23)) (consider running `cargo clean` fi
rst)

./x clean は同じエラーが出て使えない。
その場合は build ディレクトリを削除したら解決した。