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
300
リハビリmruby
最近のmrubyの実装について少し調べてみましたので、その内容を共有したいと思います。
Katsuhiko Kageyama
July 04, 2024
Tweet
Share
More Decks by Katsuhiko Kageyama
See All by Katsuhiko Kageyama
PCとPicoRuby-ESP32間でシリアルファイル転送
kishima
1
32
M5UnifiedとPicoRubyで楽しむM5シリーズ
kishima
0
350
Rubyでmicro-ROS!
kishima
0
89
mruby(PicoRuby)で ファミコン音楽を奏でる2
kishima
1
110
mruby(PicoRuby)で ファミコン音楽を奏でる
kishima
2
660
PicoRuby/R2P2で自分だけのコンピュータを作ろう
kishima
1
270
mrubyと micro-ROSが繋ぐロボットの世界
kishima
3
900
わたしのRubyKaigi Effect
kishima
2
190
思い出の技術書 F-BASICの世界
kishima
0
35
Other Decks in Programming
See All in Programming
dchart: charts from deck markup
ajstarks
3
970
re:Invent 2025 トレンドからみる製品開発への AI Agent 活用
yoskoh
0
700
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
400
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
1
820
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
220
CSC307 Lecture 03
javiergs
PRO
1
480
ThorVG Viewer In VS Code
nors
0
750
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
130
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
180
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
360
AIフル活用時代だからこそ学んでおきたい働き方の心得
shinoyu
0
120
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
yimajo
3
550
Featured
See All Featured
Practical Orchestrator
shlominoach
191
11k
Building an army of robots
kneath
306
46k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
61
49k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
100
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
160
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
1
1.3k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
0
1.1k
Testing 201, or: Great Expectations
jmmastey
46
8k
How to train your dragon (web standard)
notwaldorf
97
6.5k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
320
Designing for Timeless Needs
cassininazir
0
120
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)
まとめ • 思ったよりもいろいろ基本的な部分から変化がありそう ◦ メモリ使用量の削減はデカい • バイトコードハンドブック改訂したいな・・・