mrubyは2012年4月に公開され気がつくと今年で12年経っています。
こんにちわ、軽量Rubyフォーラムの石井です。最近はTidal,QobuzといったストリーミングをRoon,Direttaといったツールで聞くネットワークオーディオに深くハマっています。
で、早速、mrubyは経済産業省の地域イノベーション創出研究開発事業(なかなか覚えられない by Matz)に採択され2010年に開発が始まりました。この辺の内輪話は去年のアドベントで書かせていただきました。
現在(2024.12)Githubでのforkは791,starは5.3k、プルリクエストは6,400を超えています。まつもとさんを中心にdearblueさんはじめたくさんの有志の方々のお力添えで運営されています。最近は嬉しいことに新しい方々の協力も増えてきています。
このmruby12年の歴史を簡単ですが振り返って見ようと思います。
2012.4 mruby ベータ版公開開始
この公開は特に告知などなくひっそりとGuthub上にアップされたのですが、Matzの新しい言語としてすぐに見つかり4月末から5月末にかけてすごい数のIssueやプルリクエストが押し寄せました。昼夜問わず追加されるIsuueやプルリクエストに圧倒されたのを覚えています。
この時点では経産省との時間的なお約束で公開したためベータ版としての公開でした。
2013.4 軽量Rubyフォーラム発足
mrubyをオープンソースとして公開するに当たり経産省の理解がなかなか得られなかった行きさつは昨年のアドベントに書かれています。この年、オープンソースとして公開を許可してもらう代わりにmrubyを企業に使ってもらうためのお手伝いとしてNPO軽量Rubyフォーラムが発足しました。理事長はもちろんMatzです。
2014.2 mruby 1.0.0 mrbgem追加
ここで1.0として公開されました。CRubyのgemにあたるmrngemの機能が追加されました。
またバージョン番号のルールが決まり3桁とすることになりました。
2014.11 mruby 1.1.0 デバッガー追加
mrubyを説明した際に「えっ!?mrubyってデバッガないの?」とよく言われていました。
作ったことは作ったのですが告知が不十分でほとんどの人が知らないという・・・・。
(開発には当時三菱電機マイコン機器ソフトウェアに在籍されていたYuuuさんにもご協力いただきました)
簡単ですがマニュアルもあるんです。ということでちょっと役に立つmrubyの話もご覧ください。
2016 mruby/c公開
この年にmrubyよりさらに少ないメモリで動作するmruby/cが公開されました。これによってMatzのRuby Everywhereが進んできました。
2017.6 mruby1.3.0 公開
safe navigation operator (&.) ポッチ演算子追加
この年公開されたPS4のゲーム NieR:AutomataにRuby/mrubyが使われています。この写真はそのゲームの最後に出てくる謝辞の一部です。ゲームをクリアしたRubyistからいただきました。
2018.4 mruby1.4.1 公開
mruby-io,mruby-socket追加
この少し前に発表されたmruby1.4.0に重大なバグが見つかり修正版として1.4.1が公開されました。この辺からRubyとの互換性を意識し始めています。1.4.1はRuby2.xとの互換性を強化しています。
2018.12 mruby2.0.0 公開
さらに同じ年に2.0.0公開されました。Rubyと同じ12月に発表、メモリ使用量が削減されてそれに伴いバイトコードに手が入り変更されることになりました。2.0.0で可変長のバイトコードが採用され1.4.1のバイトコードとの互換性はなくなりました。
この年のシリコンバレーミッション(福岡県主催のMatzといくシリコンバレーRuby企業訪問の旅)内での移動のバスの中で九工大の田中先生やMatzと議論したのを覚えています。
CRubyとの互換性も考慮されていてキーワード引数が導入されました。
2019.4 mruby2.0.1 公開
省メモリ化が一段と進んでいます。またバイナリのフォーマットが変更になりました ("0005" -> "0006")
またこの頃のバージョンより福岡県のQPS研究所が小型人工衛星にmrubyの利用としていると公表して頂いています。この人工衛星にはRaspberryPiは使われているとのこと。
2020.8 mruby2.1.2 公開
mruby2.1.0(2019.11) mruby2.1.1(2020.6)とバグフィックスを含んだ公開が進み2020.8にmruby2.1.2が公開されました。このバージョンよりビルドにBisonが不要になりました。またRuby2.7との互換性も進みnumbered parameters,argument forwardなどが使えるようになりました。
2021.5 mruby3.0.0公開 メモリ消費量大幅改善
mruby 3..0では、mrubyのコンパイル時にシンボルを静的メモリ領域に割り当てることで、mruby VMの使用メモリが大幅に削減され、大幅な省メモリ化に成功しています。
これまで、数100KBのRAM領域が必要でしたが、100KB程度のRAMでアプリケーションを起動できるようになりました。
さらにこれまでのビルド構成ファイル build_config.rb が build_configディレクトリ内のファイルに再構成されました。
例えば、以下のような典型的なビルド構成が利用できます。
- default: the default configuration
- host-gprof: プロファイラ gprof によるパフォーマンスチューニングのためのコンパイル
- host-m32: gcc 32bitモードでコンパイル
- boxing: 3つのboxingオプションでコンパイル
- clang-asan: clangのアドレスサニタイザでコンパイル
rake コマンドでmrubyをビルドする時に、rake MRUBY_CONFIG=boxing のように、環境変数 MRUBY_CONFIG にビルド構成ファイルを指定することでmrubyのビルド構成を指定することができます。
細かい内容については軽量Rubyフォーラムのリリースノートを御覧ください。
2021 PicoRuby命名される
mruby/cのサブセットとしてhasumikin氏により作成。このPicoRubyを使ったキーボードファームウェアとしてPRK Firmwareがあります。hasumikin氏によるとPicoRubyの正式公開日ははっきりしないということでこの年に命名されたとしています。
2022.5 mruby3.1.0 公開
CRuby3.0との互換を深めkeyword argumentsが利用可能です。またbuild_configにいくつかの新しいConfigが追加されています。
さらにバイナリ形式の改良により、mrubyのバイナリは下位互換性がなくなりました。mruby 3.1でmrubyバイナリを実行するには、mruby 3.1のmrbcで再コンパイルの必要がありますのでごちゅういくださいね。
2023.2 mruby3.2.0 公開
mruby-ioのパフォーマンスが大幅に改善されました(Matz調べ)。また脆弱性(CVEs)の対応も多く取られています。
2024.2 mruby3.3.0 公開
mrubyの最新バージョンです。Dockerを使ったビルドや任天堂などのゲーム機への対応、mrbgemsの変更など様々な改善がなされており、mruby 3.2.0以降、232ファイルに対して763件のコミットを行い、8,871件の追加と5,978件の削除を行いました。
とまぁこの12年の変化を簡単にご紹介しました。先に書きましたがすべてMatzと有志の方々のご協力によるものです。本当にありがとうございます。
また軽量Rubyフォーラムでも各バージョンにおけるmrbgemsの検証を行い公開しています。これは軽量RubyフォーラムのMimaki氏によるものです。
さて新しいmrubyはどうなっていくのでしょうか。Prismなどの新しいパーザへの変更はあるのか。なかなか楽しみですね。
明日は@kaizen_nagoyaさんのdockerでmruby ふたたびです。