Open3
Rustへのコントリビュートメモ
![long_long_float](https://res.cloudinary.com/zenn/image/fetch/s--OVQeWp3n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/3c5c8f5073.jpeg)
Rustへのコントリビュートを行う時のメモを書いていく。
一応目的としては、以下の通り。
- コンパイラの理解を深める
- Rustの理解を深める
- 対外的な実績の作成
コントリビュートを始めるにあたって、 https://rustc-dev-guide.rust-lang.org/ がかなり詳しい。
開発の流れなども詳細に書いてあるが、自分用に開発の流れを簡単にまとめる。
-
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 とあれば成功
-
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
のラベルがついている
-
- 内容を確認し、できそうなら
@rustbot claim
とコメントすることで該当issueにアサインされる。 - Rustリポジトリをforkして修正、pushする。
- Pull requstを作成する。Descriptionは特にテンプレートがないが、自分はこのPRで何をしたかを書いた。
- 修正のコメントがあれば修正する。
- マージされる。
ビルドしたコンパイラを使うには、rustcなどに +stage1
を渡せばよい。
rustc +stage1 test.rs
cargo +stage1 build
![long_long_float](https://res.cloudinary.com/zenn/image/fetch/s--OVQeWp3n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/3c5c8f5073.jpeg)
複数のブランチで同時に作業する場合はworktreeを使うと便利
git worktree add <path> <branch>
注意点としては、gitの管理下にないファイル(.vscode
や config.toml
)はコピーされないので自分でコピーする必要がある。
![long_long_float](https://res.cloudinary.com/zenn/image/fetch/s--OVQeWp3n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/3c5c8f5073.jpeg)
長い期間を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
ディレクトリを削除したら解決した。