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
CRubyの命令ディスパッチのしくみ
Search
utsubo
May 28, 2026
120
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
80
Kaigi on Rails 2025を楽しむためにやったこと
utsubo256
1
21
Shikumi.rb のしくみ
utsubo256
1
36
first_time_lt_meeting_16.pdf
utsubo256
1
84
RubyKaigi 2025振り返り 最大限楽しむためにやったこと/Kaigi Effect
utsubo256
1
79
Featured
See All Featured
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
360
Facilitating Awesome Meetings
lara
57
7.2k
Claude Code のすすめ
schroneko
67
230k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.9k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
Typedesign – Prime Four
hannesfritz
42
3.2k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
730
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Automating Front-end Workflow
addyosmani
1369
210k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.3k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
220
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 に応じて命令ハンドラへ制御を移す処理 を命令ディスパッチと呼ぶ