yhara.jp

Recent Posts

mruby/ruby: mruby VMをRubyで実装してみた

2024-12-01
Tech

このエントリはmrubyファミリ (組み込み向け軽量Ruby) Advent Calendar 2024の1日目の記事です。

近年、mruby bytecodeを利用していろんな環境でRubyを動かす試みがみられます。ふつうRuby処理系を自分で実装するとすれば

ソースコードのパース→命令列への変換→VMでの実行

という3段階になるわけですが、mruby bytecodeを使えば前段はmrbcコマンドがやってくれるので、後段であるVM+ランタイムの実装だけでRubyプログラムを動かすことができ、だいぶ楽になります。

とはいえ…

言語処理系実装の経験がなければ、後段だけでもけっこうな歯ごたえがあるでしょう。特にmruby本体はC言語で書かれているため、Rubyistにとってはとっつきづらいかもしれません。

ということで、Rubyで書かれたmruby VM、mruby/rubyをご用意しました。

https://github.com/yhara/mruby-ruby/

みどころ

  • mrb/parser.rb
    • .mrbファイルのバイナリを読み込む部分です。
  • VM#eval_iseq
    • 読み込んだ命令一つを実行する部分です。
  • runtime.rb
    • mrubyのオブジェクトや組み込みクラスの実装です。
    • オブジェクト指向でない言語で実装することも考え、あまりOOPを使わずに書いています。
    • いまのところGCは実装していません(RubyのGCに任せている)。

※まだmrubyのすべての機能を実装しているわけではありません。(特に例外処理、組み込みメソッド等)

おわりに

自分の勉強のために作ったプロジェクトですが、誰かの参考になれば幸いです。

More posts

Posts

(more...)

Articles

(more...)

Category

Ads

About

About the author