ぶていのログでぶログ

思い出したが吉日

reddish-shell v0.10.0 開発進捗 | mruby3.0対応, GithubActionsの設定, READMEのアップデート

v0.9.0のアップデートから1日くらいしか経っていないけどmruby3.0に対応したので新バージョンリリース。

commit一覧:

  • 7e9242c v0.10.0
  • e5ef68b Merge pull request #3 from buty4649/readme
  • e03874d Add notes on using iruby.
  • 0319149 Update README.md
  • 373b7ea Merge pull request #2 from buty4649/fix-semicolon-syntax
  • 1f5446b Fixed syntax error for commands ending with a semicolon
  • e031d74 Merge pull request #1 from buty4649/github-actions
  • 479dee5 Update mrb-process-pgrp
  • 79e085d Remove yacc compile
  • b04dfba Add pre-compiled bison file.
  • b1acb4d Print tools version
  • 7bab785 Fix dpendency
  • 7fecfc0 Enable github actions
  • 18f47a5 use mruby-3.0.0

mruby3.0対応

前回も書いたけどmruby3.0がリリースされたので早速対応した。 前回書いたとおりmgemの依存をmrbgems.rakeに移した以外に、mruby-process-pgrpの処理を見直した。 具体的には、mrb_get_argsで雑にpid_tの変数を指定していたのだけど、ただしくmrb_intに変更した。 内部的に、pid_tとmrb_intは同じ型だと思うんだけどなぜかうまく動作しなかったし、pid_t == mrb_intなのは今の私の環境だけだと思うので正しく型キャストするようにした感じ。

reddishの動作にはあまり大きく変更はないのだけど、reddishの内部で使っていたmrb-io-dup2、mrb-process-pgrp、mrb-io-fcntlをそれぞれのリポジトリを作って分離した。

これくらいの変更でmruby3.0対応できたのでよかった。 ちなみに、mruby3.0でビルドしたreddish、mruby2.1.2のときに比べ数秒遅くなった・・・・・・・まぁ、当時より処理内容が増えているので一概に比較はできないけど。

❯ time ./mruby/bin/reddish -c 'TEST=0; while [ $TEST -ne 1000 ]; do TEST=`expr $TEST + 1`;done'

________________________________________________________
Executed in    5.67 secs   fish           external
   usr time    5.19 secs  1403.00 micros    5.19 secs
   sys time    0.54 secs  172.00 micros    0.54 secs

★mruby2.1.2時の実行速度(https://tech.buty4649.net/entry/2021/02/14/192116 からコピー)
❯ /usr/bin/time ./mruby/bin/reddish -c 'TEST=0; while [ $TEST -ne 1000 ]; do TEST=`expr $TEST + 1`;done'
3.89user 0.47system 0:04.20elapsed 103%CPU (0avgtext+0avgdata 5760maxresident)k
0inputs+0outputs (0major+885919minor)pagefaults 0swaps

4.2秒 -> 5.67秒*1

Github Actionsを設定してCIを始めた

自分の端末だけで開発していると、私の環境でだけ動くみたいなことがたまにおこる。。。 というのも、mruby/build 配下が使い回されるので何かの表紙に古い状態のままになり、たまたまうまく行く状態が保たれるみたいなことがおこる*2。 それがあんまり健全じゃないなっと思ったので、Github Actionsを設定した。

しかし、Github Actionで利用できるコンテナイメージがUbuntu20.04で、私の環境であるUbuntu20.10と若干違うため微妙にビルドできないみたいなことが起きる*3。 reddishビルド用のコンテナイメージを作って、Github Actionsで使うのがよさそうかな。

ステートメントに条件文に;をつけるとsyntax errorになっていたのを直した

例えば以下がエラーになっていた。

while true;
  echo OK
end

これは本来許容しているのだけど、なぜかエラーになっていたので修正した。 この文法でbintestを行っていて、今までエラーなく通っていたんだけどなぁ…謎。

README.mdを更新した

今のバージョンでの機能一覧をREADMEに反映した。

github.com

使い方に近いことを書いているような、reddish-shellの仕様を書いているような微妙な感じになってしまった。 まぁ、もう少し大きくなってきたらドキュメントとして外だししよう・・・たぶん。 あと、今は日本語で作ってしまったけど、そのうち英語にしたい・・・かも。

次の実装について

次のバージョンで実装したい一覧。まぁ、途中で別のことに取り組むかもしれないけど

  • '&>> , >>&` を実装していなかったことに気がついたのでこれを実装する
  • irubyのfork化
  • バックグラウンドプロセスをちゃんとする(JobControlクラスの見直し)
  • case文の実装

*1:使うtimeコマンドを変えたけど誤差はそこまでなかったので見た目重視で、今回はfish-shell内蔵timeを使った。

*2:mruby3.0ではまだ遭遇しないけど少なくてもreddish v0.9.0のリポジトリを落としてきてビルドしようとするとこける…。手元では動いていたいんだ!!!信じてくれ!!!

*3:gccとかは大丈夫だったけどGNU bisonのバージョンが違うためにビルドできなかった。しょうがないので、yaccでトランスコードをしたコードをリポジトリに含めることにした