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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
repunit11
July 21, 2026
Technology
170
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
19
-共通テストから学ぶ- ネットワークにDeep Dive
repunit
0
13
技術カンファレンスはただの学び場ではない「最高の遊び場だ」
repunit
0
17
Other Decks in Technology
See All in Technology
Invisible to AI? Making TYPO3 Sites Quotable by AI Search Systems
wolfgangwagner
0
130
【CEDEC2026】『Relink』を拡張せよ - 『GRANBLUE FANTASY: Relink - Endless Ragnarok』の開発速度と品質を守るCI運用
cygames
PRO
0
130
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
19k
20260807_第6回_関東kaggler会LT_claw系bot xangiと始める、"寂しくない" kaggle
sugupoko
0
160
新しい SLO が良い感じにハマっている話
z63d
5
2.1k
【CEDEC2026】グラフィックスエンジニアのためのニューラルシェーディング入門
cygames
PRO
0
100
メルカリのグローバルアプリで挑んだ AlloyDB 運用と課題解決の実践記
hatappi
0
230
Forza Horizon 6 のテレメトリ機能で 自動運転に使えそうな学習データを集める話
henjin0
0
130
AIコーディングの次。コードレビューと理解負荷を解消して組織の開発生産性を高める
moongift
PRO
1
1.4k
【CEDEC2026】次世代デジタルカードゲームのサーバー設計と運用 〜『Shadowverse: Worlds Beyond』の舞台裏~
cygames
PRO
1
920
侵入は突然に 〜 IoTマルウェアと悪用される家庭の機器 ~ / When Intrusion Strikes: IoT Malware and the Abuse of Home Devices
nttcom
0
1.5k
Goでデータパイプラインを作ろう
sansantech
PRO
0
270
Featured
See All Featured
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
350
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
460
Practical Orchestrator
shlominoach
191
12k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
790
Odyssey Design
rkendrick25
PRO
2
750
We Are The Robots
honzajavorek
0
290
How to Talk to Developers About Accessibility
jct
2
480
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
420
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
250
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