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
100
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
72
Kaigi on Rails 2025を楽しむためにやったこと
utsubo256
1
20
Shikumi.rb のしくみ
utsubo256
1
34
first_time_lt_meeting_16.pdf
utsubo256
1
78
RubyKaigi 2025振り返り 最大限楽しむためにやったこと/Kaigi Effect
utsubo256
1
78
Featured
See All Featured
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
460
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
490
A Modern Web Designer's Workflow
chriscoyier
698
190k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
630
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
490
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
760
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
460
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Six Lessons from altMBA
skipperchong
29
4.4k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Code Review Best Practice
trishagee
74
20k
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 に応じて命令ハンドラへ制御を移す処理 を命令ディスパッチと呼ぶ