Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
リハビリmruby
Search
Katsuhiko Kageyama
July 04, 2024
Programming
320
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
リハビリmruby
最近のmrubyの実装について少し調べてみましたので、その内容を共有したいと思います。
Katsuhiko Kageyama
July 04, 2024
More Decks by Katsuhiko Kageyama
See All by Katsuhiko Kageyama
PicoRuby as a Multi-VM Operating System
kishima
1
430
PCとPicoRuby-ESP32間でシリアルファイル転送
kishima
1
51
M5UnifiedとPicoRubyで楽しむM5シリーズ
kishima
0
530
Rubyでmicro-ROS!
kishima
0
160
mruby(PicoRuby)で ファミコン音楽を奏でる2
kishima
1
200
mruby(PicoRuby)で ファミコン音楽を奏でる
kishima
2
780
PicoRuby/R2P2で自分だけのコンピュータを作ろう
kishima
1
600
mrubyと micro-ROSが繋ぐロボットの世界
kishima
3
1.1k
わたしのRubyKaigi Effect
kishima
2
260
Other Decks in Programming
See All in Programming
Go 1.27 における memory allocation の高速化
andpad
0
110
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
590
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
18k
「人を評価する AI」の設計と実装
ryoyanara
0
180
テーブルをDELETEした
yuzneri
0
140
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
4k
php-fpmのプロセスが枯渇した日-調査・対処・そして本当にやるべきだったこと-
shibuchaaaan
0
240
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
1.7k
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
210
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
240
今さら聞けない .NET CLI
htkym
0
180
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
540
Featured
See All Featured
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
520
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
340
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.3k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.2k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
200
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
400
A Soul's Torment
seathinner
6
3.4k
How to Ace a Technical Interview
jacobian
281
24k
Amusing Abliteration
ianozsvald
1
240
Transcript
リハビリ mruby @kishima 2024/07/04 Omotesando.rb
自己紹介 @kishimaといいます IoT系の会社で組み込み関係のお仕事をしています 普段はROS/C++/Rust/Pythonにふれる機会が多いです TokyuRuby会議のスタッフとかしてます
以前作っていたもの mrubyの言語実装に関する同人誌や mrubyのための自作ハードウェアなど https://silentworlds.booth.pm/
最新のmrubyに追いつきたい ここ数年のアップデートをブログにまとめたり https://silentworlds.info/2023/12/23/post-1066/ このあたりで知識が止まっている
ここ数年の主なアップデート • 省メモリ化(100kB程度のメモリでも動くように) • バイトコードの見直し • ビルド方法の変更(rake) • 記法や言語仕様の更新(よりcRubyに近く) など
サンプルコードで v2.0.0とv3.3.0を比較 test.rb
こんな作業をしたいときのための Docker https://hub.docker.com/r/kishima/mruby debianベースで全タグのmrubyのソースとビルド済みバイナリが入ったイメージを公開してます amd64/arm64 対応
前知識:mrubyの構造 mrbcがrbをバイトコードに変換して、それをVMが実行する形になっている 最新はちょっと違うかも
メモリは減ったのか? mruby 2.0.0 mruby 3.3.0 トータルの使用量に加えて、 Allocateの数も減っているので、高速化もできていそう
前知識:バイトコード mrbファイルの構造 バイトコードは所定のフォーマットで出力され、バイナリ データとして管理される IREP(internal representation?)単位で入れ子の形で格 納される 関数やクラス単位でまとまっていると思えばOK
前知識:Header mrubyバイトコードハンドブックより引用
バイトコードの変化 2.0.0 3.3.0
2.0.0 3.3.0
バイトコードの変化 • HelloWorldで見て取れる範囲 ◦ バイトコードバージョンの更新 0005 > 0300 ◦ OP_CODEが簡略化された模様
バイトコード読んでみる( 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の停止
バイトコード読んでみる( 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がセットされので、省略された?
最新の定義のヘッダーファイルを見ると理由が推測できた SSEND は Self SENDの略で、Selfをレシーバとしてメソッドコールすることを表しているっぽい なので、R1にselfをセットしてSENDを呼ぶ必要がなかった バイトコード読んでみる( v3.3.0)
まとめ • 思ったよりもいろいろ基本的な部分から変化がありそう ◦ メモリ使用量の削減はデカい • バイトコードハンドブック改訂したいな・・・