ガチコンパイラ初心者がRustのOSSにPythonで初コントリビュートした話
ガチコンパイラ初心者が Rust の OSS に Python で初コントリビュートした話
経緯と自分に関して
Rust 言語で書かれた OSS への初コントリビュートを Python で行うというわけわからんことをやってみた記事です。
最初に断っておきますが、自分はコンパイラ等は全くの初心者です。
普段は Web アプリケーションの開発をしています。
記事も、全くのコンパイラ初心者がなんにもわからない(今もわかってない)Rust の OSS になんとかコントリビュートしたという話です。
記事の内容で間違っているところがあるかもしれませんが、ご容赦ください。
経緯
個人的にコンパイラに興味を持ちつつあり、コンパイラの実装をいろいろ探し回っていました。
最近良く触っている、Rust のコンパイラの実装を見てみようと思い、Rust のコンパイラのソースコードを見てみました。
はじめのうちは、ソースコードを流し読みしてました。
「実際に触ってみないと結局わからん...」になってきたので、Rust の コンパイラを実際に手元で動かそうとしていました。
Rust Compiler Development Guide で、Rust のコンパイラに関して詳しく丁寧に書かれていました。
コンパイラの動かし方まで書かれていました。
しかし、手元で上の記事通りに動かそうとしても全く動かない...となって困っていました。
最初は、Windows で開発しているから変な挙動しているのか?と思っていましたが、WSL の Ubuntu で同じようにやってもどうも動かないようでした。
Rust の BootStrap
Rust のコンパイラは、Rust で書かれています。
「ブートストラッピング(Bootstrapping)」とは、コンパイラやその他の自己参照的なシステムを生成するプロセスを指します。コンパイラとは、あるプログラミング言語(ソース言語)で書かれたプログラムを、別の言語(ターゲット言語)に変換するためのプログラムです。
Rust BootStrap の始まりは、Python のスクリプト実行です <- なんでや..
OSS にコントリビュートしたときには知らなかったのですが、わかりやすく日本語で Rust BootStrap について書かれている記事がありました。
上の記事から Rust BootStrap について引用します。
Stage 0
Rust の bootstrapping は Python スクリプトを実行することで始まる。(だからこの時点では Python を実行できる環境でさえあれば良い。) この Python スクリプトの主目的は 2 つ。
- 既存の Rust コンパイラをダウンロードする。
- rustbuild をビルドして実行する。
本当に上の通りで、この時に Python のスクリプト x.py (Rust のソースコード) が実行されます。
この x.py は、Rust のコンパイラをビルドするためのスクリプトです。
初コントリビュート
どうやらそもそも、この Rust のコンパイラをビルドするためのスクリプトが壊れている?ようでした。
上の PR にも詳細を書きましたが、x.py であるファイルを生成するのですが、このファイルの生成には sudo 権限が要求されていました。
良く調べると、sudo 権限を要求されない or される場合は動くように処理されているのですが、あるファイルだけは sudo 権限が要求されていました。
自分は、とりあえず何とかコンパイラのビルドをしたかったので、このファイルの生成を sudo 権限が要求されないように(無理やり)変更しました。
↑ が正しい変更だったのかはわかりませんが、とりあえず 動くようになりました。
そのうちこの話を、知り合いの Rust のコントリビュータに雑談程度に話したら、その人が「それはおかしい」と言っていました。
その後
一旦、自分が困っていたところを PR だしてみるか~くらいの軽い気持ちでなげたら、割と他にも悩んでいる人がいたみたいで、最終的にマージされました。
悩んでいそうな issue
自分は、正直 Rust のコンパイラ自体には手を加えていないのですが、BootStrap 部分で少し手を加えたことで、他の人の役に立てたのかなと思うと嬉しいです。
まとめ
ガチコンパイラ初心者が Rust の OSS に Python で初コントリビュートした話でした!
Discussion