Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
リハビリmruby
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Katsuhiko Kageyama
July 04, 2024
Programming
330
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
同人誌とVMづくり
kishima
1
62
Tab5をRubyで動くパソコンにする
kishima
2
440
Family mrubyの進捗
kishima
1
150
PicoRuby as a Multi-VM Operating System
kishima
1
520
PCとPicoRuby-ESP32間でシリアルファイル転送
kishima
1
60
M5UnifiedとPicoRubyで楽しむM5シリーズ
kishima
0
620
Rubyでmicro-ROS!
kishima
0
220
mruby(PicoRuby)で ファミコン音楽を奏でる2
kishima
1
260
mruby(PicoRuby)で ファミコン音楽を奏でる
kishima
2
850
Other Decks in Programming
See All in Programming
ジョジョの世界をXRで再現する
mofurune
0
180
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
830
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
510
パスワード再設定メールのURLについて知っておこう
uyuki234
0
170
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
120
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
3
480
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
phperだってパンチカードでコーディングしたい
o0h
PRO
0
360
[2026-10-09]一枚の布で作らなくてもいい。 信頼性は「パッチワーク」で紡がれる~既存の運用と新しい可能性をつなぎ合わせてきたCREの話~
tosite
0
100
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
270
気持ちぃ〜角丸 Squircle
ryu1013
0
320
Simple Storage Service(S3) is not simple
iwatsukayura
0
290
Featured
See All Featured
sira's awesome portfolio website redesign presentation
elsirapls
0
460
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Facilitating Awesome Meetings
lara
57
7.2k
ラッコキーワード サービス紹介資料
rakko
1
5.4M
My Coaching Mixtape
mlcsv
0
360
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
630
Chasing Engaging Ingredients in Design
codingconduct
0
360
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Product Roadmaps are Hard
iamctodd
55
13k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
It's Worth the Effort
3n
188
29k
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)
まとめ • 思ったよりもいろいろ基本的な部分から変化がありそう ◦ メモリ使用量の削減はデカい • バイトコードハンドブック改訂したいな・・・