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
1
290
リハビリmruby
最近のmrubyの実装について少し調べてみましたので、その内容を共有したいと思います。
Katsuhiko Kageyama
July 04, 2024
Tweet
Share
More Decks by Katsuhiko Kageyama
See All by Katsuhiko Kageyama
Rubyでmicro-ROS!
kishima
0
9
mruby(PicoRuby)で ファミコン音楽を奏でる2
kishima
1
24
mruby(PicoRuby)で ファミコン音楽を奏でる
kishima
2
560
PicoRuby/R2P2で自分だけのコンピュータを作ろう
kishima
1
41
mrubyと micro-ROSが繋ぐロボットの世界
kishima
3
690
わたしのRubyKaigi Effect
kishima
2
96
思い出の技術書 F-BASICの世界
kishima
0
30
Rubyistに贈る ラーメン作りの技法
kishima
2
230
Now is the time to create your own (m)Ruby computer
kishima
0
50
Other Decks in Programming
See All in Programming
CSC305 Lecture 04
javiergs
PRO
0
250
Railsだからできる 例外業務に禍根を残さない 設定設計パターン
ei_ei_eiichi
0
300
Pythonスレッドとは結局何なのか? CPython実装から見るNoGIL時代の変化
curekoshimizu
4
1.3k
Advance Your Career with Open Source
ivargrimstad
0
340
overlayPreferenceValue で実現する ピュア SwiftUI な AdMob ネイティブ広告
uhucream
0
110
10年もののAPIサーバーにおけるCI/CDの改善の奮闘
mbook
0
780
階層構造を表現するデータ構造とリファクタリング 〜1年で10倍成長したプロダクトの変化と課題〜
yuhisatoxxx
3
920
CSC305 Lecture 02
javiergs
PRO
1
260
Go言語の特性を活かした公式MCP SDKの設計
hond0413
1
180
Web Components で実現する Hotwire とフロントエンドフレームワークの橋渡し / Bridging with Web Components
da1chi
3
1.8k
タスクの特性や不確実性に応じた最適な作業スタイルの選択(ペアプロ・モブプロ・ソロプロ)と実践 / Optimal Work Style Selection: Pair, Mob, or Solo Programming.
honyanya
3
140
あなたの知らない「動画広告」の世界 - iOSDC Japan 2025
ukitaka
0
390
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Facilitating Awesome Meetings
lara
56
6.6k
For a Future-Friendly Web
brad_frost
180
9.9k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
Side Projects
sachag
455
43k
Practical Orchestrator
shlominoach
190
11k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
The Straight Up "How To Draw Better" Workshop
denniskardys
237
140k
The Cost Of JavaScript in 2023
addyosmani
53
9k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
GraphQLとの向き合い方2022年版
quramy
49
14k
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)
まとめ • 思ったよりもいろいろ基本的な部分から変化がありそう ◦ メモリ使用量の削減はデカい • バイトコードハンドブック改訂したいな・・・