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
Ruby in Ruby - Building an AOT Compiler with Ruby
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
MATSUMOTO Katsuyoshi
September 25, 2024
Programming
0
330
Ruby in Ruby - Building an AOT Compiler with Ruby
MATSUMOTO Katsuyoshi
September 25, 2024
Tweet
Share
More Decks by MATSUMOTO Katsuyoshi
See All by MATSUMOTO Katsuyoshi
POI: Proof of Identity
katsyoshi
0
150
(私的)RubyKaigi の歩き方
katsyoshi
0
1.6k
Building Ruby Native Extension using Ruby
katsyoshi
0
2.1k
ちいさなクラウド業者やってみた
katsyoshi
0
210
fluentdとxlsx
katsyoshi
0
170
mikutterとJubatusとfluentd
katsyoshi
0
11k
ZFSでNASやってはまったこと
katsyoshi
0
2k
Asakusa.rbに一年間通ったらこうなった
katsyoshi
1
2.7k
mikutterとJubatusで遊んでみた
katsyoshi
0
650
Other Decks in Programming
See All in Programming
ぼくの開発環境2026
yuzneri
1
270
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
22
7.8k
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.7k
iOSアプリでフロントエンドと仲良くする
ryunakayama
0
110
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
1k
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
yimajo
3
640
個人開発は儲からない - それでも開発開始1ヶ月で300万円売り上げた方法
taishiyade
0
110
Event Storming
hschwentner
3
1.3k
FOSDEM 2026: STUNMESH-go: Building P2P WireGuard Mesh Without Self-Hosted Infrastructure
tjjh89017
0
190
Metaprogramming isn't real, it can't hurt you
okuramasafumi
0
120
Raku Raku Notion 20260128
hareyakayuruyaka
0
410
AIプロダクト時代のQAエンジニアに求められること
imtnd
1
430
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
74
11k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
170
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
600
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
117
110k
[SF Ruby Conf 2025] Rails X
palkan
1
780
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.1k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
180
We Have a Design System, Now What?
morganepeng
54
8k
It's Worth the Effort
3n
188
29k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
120
Agile that works and the tools we love
rasmusluckow
331
21k
Transcript
Ruby in Ruby Building an AOT Compiler with Ruby katsyoshi
Repro Inc.
self
self 開発者募集中!!! Rails や Kafka をやりたい/できるひと 上記以外にも Go での配信基盤開発や Java/Objective-C
などでAndroid/iOS SDK開発も
self Twitter, GitHub, bluesky…: katsyoshi Hobbies: keyboard, fishing, watching football…
Work: Rails Application Programmer
My Gems fluent-plugins fluent-plugin-serialport… itamae-plugins itamae-plugin-resource-pip… irb-theme-dracula vaporware-compiler considering rename…
Dragon Book Club: Member フロントエンドエンジニアの集まり コンパイラーとしての話です そろそろ読みたいと思い20年が経ち… @spikeolaf「#lr-parser にいる人は全員参 加するのはあたりまえだよなあ???
しゃーない行くかー よみたかったしな!
Introduction AOT コンパイラーつくるぞ Matz も言ってたしそろそろ欲しいよね とりあえずうごくもの作ろう
Self Motivation コンパイラーつくったことないし一度作って みるのもいいよね 直接バイナリー作たい!! アセンブラー書いて機械語書いてみたい! 幸い資料も実装もたくさんあるしな!
Simmilar Implementations LLVM Backends: RubyMotion うーん… Rust Backends: monoruby もうやってるひといるしな
Go Backends: goruby もうやってるひといるしな Ruby でやるぞ!!!
C Language Compile Flow C言語でコンパイルすると上図のようになる これらの流れを Ruby でもできるようにするぞ! 全部一旦実装する!
Create Components Compiler Assembler Linker
Compiler 整数演算と簡単な制御構文が使えるようにす る 四則演算 変数 条件分岐 if, while
Compiler Ruby が AST(Abstruct Syntax Tree) を持っ ている Ruby からアクセス可能
Compiler RubyVM::AbstructSyntaxTree.parse 木構造なので辿るだけで大丈夫 x86_64 Assembly 言語へ変換
Assembler 中間言語表現からオブジェクトファイルを生 成 今回は x86_64 Assembly を選択 決まった中間言語表現から Binary Format
へ変換するだけ ということで Format を決めましょう
Binary Format Linux ELF
ELF Executable and Linking Format Linux などの Unix 系 OS
で動作するバイナ リフォーマット
Structure of ELF ELF Header Sections Section Headers
Structure of ELF
ELF Header ELF オブジェクトファイルのヘッダー ファイルサイズなどが書かれている 0x40 bytes
ELF Header
Sections Text Section: 本体 Data Section, BSS Section, Note Section
今回はサポートしないHeaderと必要最低限の実装 Symtab Section Strtab Section Shstrtab Section
Sections: Text Section プログラムの本体
Section Headers 各 Section の開始点など情報を持つ部分
Structure of ELF 完全理解した あとは実装するだけ!
Assembler Assembly 言語から機械語へ変換する 今回はx86_64のELFへ変換
Learn x86_64 Machine Language 次に機械語を覗いてみよう 基本的に Assembly に書いてある命令をその まま変換すればいい
Learn x86_64 Machine Language
Learn x86_64 Machine Language やりたいこと: 64bit で加算したい 加算命令: ADD REX.W
01 と書いてあるやつを選べばよさそう
Linker オブジェクトファイルと実行に必要なライブ ラリを繋げてくれて実行ファイルを作ってく れるやつ 今回はここはできあいの mold, gold, lld で
Current ((1 + 2) * 3) / (5-4) 上記のコードをx86_64 Assembly
言語にコ ンパイル コンパイルされた Assembly 言語から ELF のオブジェクトファイルへアセンブル ELF のオブジェクトファイルと必要なライブ ラリをリンクし実行ファイルを生成
Current まだまだ実装たりない 簡単なコードを AST からネイティブに変換 しただけ Linker もない
Futures Linker を作る 構文サポート 制御構文、クラス、メソッド…
Conclusion Compiler、Assembler を作ってみた 現状としてはまだまだ ベンチマークとれるレベルまで持っていく