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
Ruby in Ruby - Building an AOT Compiler with Ruby
Search
MATSUMOTO Katsuyoshi
September 25, 2024
Programming
430
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Ruby in Ruby - Building an AOT Compiler with Ruby
MATSUMOTO Katsuyoshi
September 25, 2024
More Decks by MATSUMOTO Katsuyoshi
See All by MATSUMOTO Katsuyoshi
A Journey of Box bugs
katsyoshi
0
98
POI: Proof of Identity
katsyoshi
0
210
(私的)RubyKaigi の歩き方
katsyoshi
0
1.8k
Building Ruby Native Extension using Ruby
katsyoshi
0
2.3k
ちいさなクラウド業者やってみた
katsyoshi
0
230
fluentdとxlsx
katsyoshi
0
200
mikutterとJubatusとfluentd
katsyoshi
0
11k
ZFSでNASやってはまったこと
katsyoshi
0
2.1k
Asakusa.rbに一年間通ったらこうなった
katsyoshi
1
2.8k
Other Decks in Programming
See All in Programming
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
5
4.9k
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
210
SODA - FACT BOOK(JP)
sodainc
1
40k
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
660
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
1.9k
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
210
baseline으로 마이그레이션, 리팩토링 안전하게 맡기기
fornewid
1
610
Zero-Tap Sign-In対応、結局何をすればいいの?
mitohato14
0
1.1k
Railsバージョンを4倍にした話
optim
0
840
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
310
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
240
Groovy as a human and AI friendly programming language
paulk
0
140
Featured
See All Featured
The browser strikes back
jonoalderson
0
1.9k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
540
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
エンジニアに許された特別な時間の終わり
watany
109
250k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
340
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.9k
New Earth Scene 8
popppiees
4
2.7k
Product Roadmaps are Hard
iamctodd
55
13k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.7k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
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 を作ってみた 現状としてはまだまだ ベンチマークとれるレベルまで持っていく