Slide 1

Slide 1 text

リハビリ mruby @kishima 2024/07/04 Omotesando.rb

Slide 2

Slide 2 text

自己紹介 @kishimaといいます IoT系の会社で組み込み関係のお仕事をしています 普段はROS/C++/Rust/Pythonにふれる機会が多いです TokyuRuby会議のスタッフとかしてます

Slide 3

Slide 3 text

以前作っていたもの mrubyの言語実装に関する同人誌や mrubyのための自作ハードウェアなど https://silentworlds.booth.pm/

Slide 4

Slide 4 text

最新のmrubyに追いつきたい ここ数年のアップデートをブログにまとめたり https://silentworlds.info/2023/12/23/post-1066/ このあたりで知識が止まっている

Slide 5

Slide 5 text

ここ数年の主なアップデート ● 省メモリ化(100kB程度のメモリでも動くように) ● バイトコードの見直し ● ビルド方法の変更(rake) ● 記法や言語仕様の更新(よりcRubyに近く) など

Slide 6

Slide 6 text

サンプルコードで v2.0.0とv3.3.0を比較 test.rb

Slide 7

Slide 7 text

こんな作業をしたいときのための Docker https://hub.docker.com/r/kishima/mruby debianベースで全タグのmrubyのソースとビルド済みバイナリが入ったイメージを公開してます amd64/arm64 対応

Slide 8

Slide 8 text

前知識:mrubyの構造 mrbcがrbをバイトコードに変換して、それをVMが実行する形になっている 最新はちょっと違うかも

Slide 9

Slide 9 text

メモリは減ったのか? mruby 2.0.0 mruby 3.3.0 トータルの使用量に加えて、 Allocateの数も減っているので、高速化もできていそう

Slide 10

Slide 10 text

前知識:バイトコード mrbファイルの構造 バイトコードは所定のフォーマットで出力され、バイナリ データとして管理される IREP(internal representation?)単位で入れ子の形で格 納される 関数やクラス単位でまとまっていると思えばOK

Slide 11

Slide 11 text

前知識:Header mrubyバイトコードハンドブックより引用

Slide 12

Slide 12 text

バイトコードの変化 2.0.0 3.3.0

Slide 13

Slide 13 text

2.0.0 3.3.0

Slide 14

Slide 14 text

バイトコードの変化 ● HelloWorldで見て取れる範囲 ○ バイトコードバージョンの更新 0005 > 0300 ○ OP_CODEが簡略化された模様

Slide 15

Slide 15 text

バイトコード読んでみる( v2.0.0) OP_LOADSELF : R1レジスタに selfオブジェクト(=main)を入れる OP_STRING : R2レジスタにリテラル[0]のデータ(=”hello world”)をコピー OP_SEND : R1をレシーバとした :puts をシンボルとして持つメソッドを実行する。引数は R[1+1] OP_RETURN : R1を戻り値としてReturnする OP_STOP : VMの停止

Slide 16

Slide 16 text

バイトコード読んでみる( v3.3.0) OP_STRING : R2レジスタにリテラル[0]のデータ(=”hello world”)をコピー OP_SSEND : ※オペランド名が変わってる。実装まだ読んでないので変化の理由は不明 OP_RETURN : R1を戻り値としてReturnする OP_STOP : VMの停止 LOADSELFってなくなったわけではない?  >定義(https://github.com/mruby/mruby/blob/master/include/mruby/ops.h)を参照すると残ってる R1にはselfがセットされので、省略された?

Slide 17

Slide 17 text

最新の定義のヘッダーファイルを見ると理由が推測できた SSEND は Self SENDの略で、Selfをレシーバとしてメソッドコールすることを表しているっぽい なので、R1にselfをセットしてSENDを呼ぶ必要がなかった バイトコード読んでみる( v3.3.0)

Slide 18

Slide 18 text

まとめ ● 思ったよりもいろいろ基本的な部分から変化がありそう ○ メモリ使用量の削減はデカい ● バイトコードハンドブック改訂したいな・・・