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
GoでCコンパイラを作った話
Search
repunit11
July 21, 2026
Technology
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GoでCコンパイラを作った話
repunit11
July 21, 2026
More Decks by repunit11
See All by repunit11
Goから始める低レイヤ
repunit
0
22
-共通テストから学ぶ- ネットワークにDeep Dive
repunit
0
14
技術カンファレンスはただの学び場ではない「最高の遊び場だ」
repunit
0
20
Other Decks in Technology
See All in Technology
なぜ Temporal の大小比較には compare しかないのか / Why Does Temporal Only Have compare() for Comparisons
kazukihayase
1
200
案件に一番詳しいAIを Amazon Bedrock AgentCore で作る ― 知見が知見を生むチームへ / Compounding Knowledge with AgentCore
yusukeshimizu
1
170
Head First モブプログラミング / Head First Mobprogramming
takaking22
10
12k
AIに持続⼒を与える 判断の⻑期記憶設計
eiei114
1
680
平文パスワードはログに“残り” ── 肝心の侵入は“痕跡すら残らない”
kuroneko13
0
120
NANDでも描画したい!
nichica906
3
620
DatadogのBits Chatが開発組織にもたらしたもの / What Bits Chat Has Brought Us
sms_tech
1
300
【GCC2026】TrueHDRIを用いたルックデブ環境とライティングテクニック
bandainamcostudios
PRO
0
350
Kiro Crew で始める マルチエージェント開発
miu_crescent
PRO
0
170
8bit CPU 2026
koba789
7
2.7k
トークンマネジメントでAIにとって働きやすい環境を実現する
hikaruegashira
0
150
Model Studio CLI × Token Plan
maigo999
0
210
Featured
See All Featured
From π to Pie charts
rasagy
0
320
Un-Boring Meetings
codingconduct
0
390
Measuring & Analyzing Core Web Vitals
bluesmoon
9
970
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
480
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
250
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
470
WENDY [Excerpt]
tessaabrams
11
39k
Test your architecture with Archunit
thirion
2
2.4k
Why Our Code Smells
bkeepers
PRO
340
58k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
220
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
Transcript
GoでCコンパイラを 作った話 Fukuoka.go #23
自己紹介 レプ # seccamp 26 # Go言語 @repunit11 # 分散アルゴリズム
# システムプログラミング # マジック # アニメ # ステッカー帳 2
目次 01 自作Cコンパイラの紹介 02 printの実装 3
自作Cコンパイラ の紹介 4
コンパイラとは ソースコードを別の言語や形式に変換するプログラム Cプログラム アセンブリ コード コ ン パ イ ル
自作Cコンパイラの紹介 オブジェクト ファイル ア セ ン ブ ル 実行 ファイル リ ン ク 5
コンパイラとは ソースコードを別の言語や形式に変換するプログラム 今回:C言語からLinuxx86-64アセンブリへの変換 Cプログラム アセンブリ コード コ ン パ イ
ル 自作Cコンパイラの紹介 オブジェクト ファイル ア セ ン ブ ル 実行 ファイル リ ン ク 6
コンパイルの流れ シンプルなコンパイラのステップ 字句解析 構文解析 トークン AST 抽象構文木 自作Cコンパイラの紹介 意味解析 最適化
コード生成 型システム 中間表現 IR アセンブリ 7
実際にコンパイルできるもの 自作Cコンパイラの紹介 8
Cコンパイラを作ろうと思った理由 去年の12月ごろ:低レイヤ開発に興味が出てきた CコンパイラをC言語で書く教科書はあるのでそれをやってみる Goが好きなのでGoで実装してみる この登壇を機にprintを実装した 自作Cコンパイラの紹介 参考にした教科書:低レイヤを知りたい人のためのCコンパイラ作成入門 9
printの実装 10
実装したprintの内容 printの実装 11
printの仕組み print:メモリ上の文字列を標準出力へ書き出す処理 ~処理の流れ~ 文字列を用意する アドレスと長さを指定する writeシステムコールを呼ぶ ファイルディスクリプタ、配置されているメモリアドレス、文字数 (0:標準入力、1:標準出力、2:エラー出力) printの実装 12
システムコールとは printの実装 13
アセンブリでHello Worldする方法 x86-64 上のLinux printの実装 引用:『Goならわかるシステムプログラミング 第2版』 14
Goパッケージのシステムコールの実装 システムコールをアセンブリから呼び出したいとき 使いたいシステムコールの番号、引数をネットやmanを使って調べる syscallパッケージを読もう printの実装 15
Goパッケージのシステムコールの実装 syscallパッケージ:GoからOSのシステムコールを呼びだすためのパッケージ Goはlibcを経由せずにシステムコールを呼べる システムコールがOSまで届く流れをGoのソースコードだけで追いやすい 今回参考にした実装:syscall/zsyscall_linux_amd64.go ※ syscallパッケージは現在は更新されていないので、新しく使いたい場合は golang.org/x/sys/unix を使うべき printの実装
詳しくは:https://go.googlesource.com/proposal/+/refs/heads/master/design/freeze-syscall.md 16
まとめ 17
まとめ CコンパイラをGoで実装してみた アセンブリでシステムコールを呼びだす方法 システムコールの使い方はsyscallパッケージに書いてあるので助かる まとめ 18