Kyoto Univ MACS SG10

View My GitHub Profile

23 December 2018

Remacs にプルリクエストを送ってマージしてもらった話

by Daichi Mukai

さっそくこのスタディグループの活動の一環ではないことを書いて申し訳ないのですが、最近送ったプルリクエストがマージされた話をします。

Remacs とは

Remacs は Emacs の Rust への移植です。 現在は C で実装された関数を Rust で書きなおしている最中です。 今回は二つの関数を書きかえて Pull Request を送り、レビューを受けて直してマージしてもらいました。

window-parameters の移植

window-parameters はウィンドウを引数にとり、そのパラメータを alist 形式で返す elisp の関数です。 詳しくは Emacs で M-x describe-functions RET window-parameters RET とかしてドキュメントを見て下さい。 C のソースコードでは elisp から呼べる関数は引数にも返り値にも Lisp_Object という型しかとれずごちゃごちゃしていますが、Remacs では std::convert::From<T> トレイトで LispObject に変換できる型を作れば関数の引数にとれるのでわかりやすくていいですね。

この移植はかなり自明なものなのでレビューでもコードは OK なのでテスト書いてねって言われて、テスト書いたらマージしてもらえました。

coding-system-p の移植

coding-system-p は引数が適切な文字エンコーディングであるかどうかを返す関数です。 ちなみに (coding-system-p nil) でも t となります。 ドキュメントにもそう書いてあるので意図してそうなってるんでしょうが、どういうときのためにこの仕様なのかは知りません。

はじめは C のコードをそのまま移植したんですが、 if 文がどういう経緯でこの形なんだっていう感じになっていました。 レビュアーの方にもシンプルにしたらって言われたので、直すとすっきりしました。 あとはこまごましたことを変更したらマージしてもらえました。

感想

最近は Rust がおもしろいなと思っていて、ちょうど貢献できそうなプロジェクトを見つけたので参加してみました。 実は Emacs のソースコードってあまり読んだことなかったので、そのコードリーディングとしてもいい機会になりました。

Pull Request を送ったら驚くくらい早く Collaborator の方から反応がありました。 コメントやアドバイスもたくさんもらいましたし、よい勉強になりました。 あとみんな優しかったです。 今回の Pull Request のように移植が簡単なコードもたくさん残っているのでこれから OSS に参加してみたいと思っている方にはオススメです。

巨大なプロジェクトなのでビルドやテストに時間がかかるのは大変でした。

tags: OSS - Rust