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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Katsuhiko Kageyama
July 04, 2024
Programming
310
1
Share
リハビリmruby
最近のmrubyの実装について少し調べてみましたので、その内容を共有したいと思います。
Katsuhiko Kageyama
July 04, 2024
More Decks by Katsuhiko Kageyama
See All by Katsuhiko Kageyama
PCとPicoRuby-ESP32間でシリアルファイル転送
kishima
1
40
M5UnifiedとPicoRubyで楽しむM5シリーズ
kishima
0
420
Rubyでmicro-ROS!
kishima
0
110
mruby(PicoRuby)で ファミコン音楽を奏でる2
kishima
1
140
mruby(PicoRuby)で ファミコン音楽を奏でる
kishima
2
700
PicoRuby/R2P2で自分だけのコンピュータを作ろう
kishima
1
420
mrubyと micro-ROSが繋ぐロボットの世界
kishima
3
960
わたしのRubyKaigi Effect
kishima
2
210
思い出の技術書 F-BASICの世界
kishima
0
41
Other Decks in Programming
See All in Programming
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
450
「接続」—パフォーマンスチューニングの最後の一手 〜点と点を結ぶ、その一瞬のために〜
kentaroutakeda
4
2.2k
Reactive ❤️ Loom: A Forbidden Love Story
franz1981
2
200
GoのDB アクセスにおける 「型安全」と「柔軟性」の両立 - Bob という選択肢
tak848
0
290
OTP を自動で入力する裏技
megabitsenmzq
0
130
GC言語のWasm化とComponent Modelサポートの実践と課題 - Scalaの場合
tanishiking
0
130
生成 AI 時代のスナップショットテストってやつを見せてあげますよ(α版)
ojun9
0
320
我々はなぜ「層」を分けるのか〜「関心の分離」と「抽象化」で手に入れる変更に強いシンプルな設計〜 #phperkaigi / PHPerKaigi 2026
shogogg
2
720
Redox OS でのネームスペース管理と chroot の実現
isanethen
0
480
AWS×クラウドネイティブソフトウェア設計 / AWS x Cloud-Native Software Design
nrslib
16
3.5k
一度始めたらやめられない開発効率向上術 / Findy あなたのdotfilesを教えて!
k0kubun
3
2.5k
Ruby and LLM Ecosystem 2nd
koic
1
1.4k
Featured
See All Featured
A better future with KSS
kneath
240
18k
Documentation Writing (for coders)
carmenintech
77
5.3k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
KATA
mclloyd
PRO
35
15k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
160
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
Crafting Experiences
bethany
1
100
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
120
Java REST API Framework Comparison - PWX 2021
mraible
34
9.2k
GraphQLとの向き合い方2022年版
quramy
50
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)
まとめ • 思ったよりもいろいろ基本的な部分から変化がありそう ◦ メモリ使用量の削減はデカい • バイトコードハンドブック改訂したいな・・・