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
CRubyの命令ディスパッチのしくみ
Search
utsubo
May 28, 2026
87
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CRubyの命令ディスパッチのしくみ
utsubo
May 28, 2026
More Decks by utsubo
See All by utsubo
slide.pdf
utsubo256
1
71
Kaigi on Rails 2025を楽しむためにやったこと
utsubo256
1
19
Shikumi.rb のしくみ
utsubo256
1
32
first_time_lt_meeting_16.pdf
utsubo256
1
78
RubyKaigi 2025振り返り 最大限楽しむためにやったこと/Kaigi Effect
utsubo256
1
78
Featured
See All Featured
It's Worth the Effort
3n
188
29k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Ruling the World: When Life Gets Gamed
codingconduct
0
290
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
160
For a Future-Friendly Web
brad_frost
183
10k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
450
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
420
Code Reviewing Like a Champion
maltzj
528
40k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.2k
Transcript
CRuby の命令ディスパッチのしくみ utsubo 2026/5/28 柏.rb #23
自己紹介 utsubo (@utsubo1024) FBC 生 Shikumi.rb を主催しています 最近ハマっていること: YARV の
しくみ
命令ディスパッチとは ここでの命令とはISeq に並ぶopcode のこと 参照: YARV Maniacs 【第 3 回】
命令ディスパッチの高速化 https://magazine.rubyist.net/articles/0008/0008-YarvManiacs.html 命令によってそれに応じた処理をさせること
今回は 1 + 2 * 3 を例にして、 命令ディスパッチのしくみを深掘りしていきます!
1 + 2 * 3 のコンパイル結果 ruby 4.0.3 で実行
どこで実行されるか
命令ディスパッチの実装 vm.c:97-105 (vm_exec_core() 内) v4.0.3 のソースコードを参照
マクロ展開 make V=1 vm.i を実行して、 vm.c を前処理( マクロ展開等) した vm.i
ファイルを作成する
展開されたINSN_DISPATCH() vm.i *reg_pc: 次に実行する命令ハンドラのアドレス
命令ハンドラ 各opcode に対応した、その命令を実装するC コードの実装部分。 insns.def に各opcode の定義が書かれていて、ビルド時に vm.inc ファイル に変換され、vm_exec_core
関数内でinclude される。 命令ディスパッチ opcode に応じた処理をさせること 命令ハンドラ その処理の実装部分
命令ハンドラの実装 例. putobject vm.inc:861-888 874 行目のADD_PC(INSN_AT TR(width)); pc を次の命令ハンドラのアドレス位置 まで進める
880 行目のINC_SP(INSN_AT TR(sp_inc)) スタックを1 つ増やす 881 行目のTOPN(0) = val; そのスタックにval を書き込む 887 行目のEND_INSN(putobject); *reg_pc の命令ハンドラへgoto でジャ ンプする
まとめ 1 + 2 * 3 はISeq にコンパイルされる ISeq にはopcode
とoperand が並んでいる CRuby のVM はopcode に対応する命令ハンドラへ制御 を移しながら処理を実行している VM がopcode に応じて命令ハンドラへ制御を移す処理 を命令ディスパッチと呼ぶ