mruby命令を短くする
2018/11/22
Table of Contents
発端
mruby/c の mruby 2.0 対応がきっかけでした。
諸々実装していると、なぜか必要なさそうなシンボルが必ず命令列ブロック( IREP
(Internal REPresentation)と呼ばれる)に含まれていて、命令から参照されていました。
ということでissueを立てて、実装しました。
実装する
Pull Requestはそれなりにさくっと行きました。
デバッグとかめんどくさかったんですが、少し考え直すと大体解決策が浮かぶので、時間はかかりましたが、それなりにスムーズに実装できました。
更に時間のかかるコースだとそもそも解決策を思い浮かべるまでもっと時間がかかるので、幸いでした。
加減算のバリエーションを忘れる
このコミットで修正したんですが、加減算では命令に整数を埋め込んだ命令のバリエーションがあったのを失念していました。
派生命令がある場合は、気をつけないといけないですね。
他に派生命令がある命令というとメソッド呼び出しの OP_SEND
系が特にめんどうなので、それらに変更を加えるときは注意が必要になるかと思います。
演算子を取り違えるミス
このコミットで修正はしたんですが、演算子と対応する名前が逆ということをやらかしてました。
テストでコケていたので、演算子がおかしいなーと思っていたら挙動としてなぜか逆になっていました。
テストがあるというのは大事ですね。
結局、取り込まれたのは半分
最初から、気の早い最適化だと言われていたので機能としては半分だけ取り込まれた形になりました。
正直、早すぎる最適化だとして、コード生成時の無駄なシンボル生成を考えるとそれほど悪くないは思ったいたのですが、なんか削られて釈然としませんでした。
予約済みキーワードを使わない方法だと、特殊化されているメソッド呼び出しの判定がめんどくさかったりするのですが、よくわかりません。
別段、最適化をやめるのに苦労があるわけでもないのでさらに不可解です。
2.0 のリリースがかなり近いのに命令の仕様変更を提案するのもどうかとは思いますが。(by 主犯)
Ruby アソシエーション開発助成
それから数日たって、Ruby アソシエーション開発助成の発表があって、納得はしました。
どうやら、プロジェクトの一つが該当するらしく、それに備えてみたいでした。
終わりに
こうゆうことがあると、OSS のリリースというのは予定通りいかないのだなーと他人事ながら思いました。
watanabe
技術開発部門所属 一番好きな言語はC++です。