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
180
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
14
技術カンファレンスはただの学び場ではない「最高の遊び場だ」
repunit
0
18
Other Decks in Technology
See All in Technology
Software Supply Chain Attackからクラウド環境を守るためにできること
lhazy
2
240
取引先から届く 「セキュリティチェックシート」の読み解き方
kamadamakoto
0
140
グローバル基準のSREは、運用現場でどう機能したか:成熟度アセスメントの実践 / SRE NEXT 2026
sorawatanabe
0
170
Digitization部 紹介資料
sansan33
PRO
2
7.7k
え?フロントエンドエンジニアの ワイがインフラも!?
puku0x
1
490
【CEDEC2026】コードレビュー支援ツール開発から学ぶ:LLMを用いた業務システムの実践的な運用設計と誤出力対策
cygames
PRO
0
650
猫付きpingコマンドを自作
uyuki234
0
180
AIは実装を速くする。では、私たちは何を今作るべきか?-立場を越えてリリースに向き合ったチーム開発の実践 / 20260801 Hiromi Nakaya and Naoki Takahashi
shift_evolve
PRO
3
470
強化学習「理論」入門
enakai00
3
3.6k
20260807_第6回_関東kaggler会LT_claw系bot xangiと始める、"寂しくない" kaggle
sugupoko
0
250
Webアクセシビリティ入門 2026
recruitengineers
PRO
3
500
生成 AI の基礎 〜 サンプル実装で学ぶ基本原理
enakai00
7
4.4k
Featured
See All Featured
The Limits of Empathy - UXLibs8
cassininazir
1
600
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
230
Prompt Engineering for Job Search
mfonobong
0
400
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
170
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.3k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.7k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
390
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
480
Building Applications with DynamoDB
mza
96
7.2k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
66
57k
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