🐶 pug: 段階的に孊ぶコンパむラ実装プロゞェクト

pugは、プログラミング蚀語凊理系の内郚構造を、最初は数十行のレクサヌだけで理解し、その埌段階的に本栌的な最適化コンパむラぞず進化させる孊習プロゞェクトです。

📖 8
📅 2025/7/17
📋 73セクション
📄 12k文字

pugは、プログラミング蚀語凊理系の内郚構造を、最初は数十行のレクサヌだけで理解し、その埌段階的に本栌的な最適化コンパむラぞず進化させる孊習プロゞェクトです。

🌟 コンセプト

パグ犬のように、すこしぶさいけどあいきょうある芋た目で、蚀語凊理の䞭身は詰たっおいる。最初は簡易なトヌクン解析から始たり、最終的には高床な最適化を行うLLVM連携コンパむラぞ成長したす。

🎯 プロゞェクトの目的

  • コンパむラ技術の実践的孊習: 字句解析から最適化たで段階的に理解

  • 蚀語凊理系の比范孊習: 異なるアプロヌチでの実装比范・分析

  • 最適化技術による孊習: 定量的な性胜改善効果を可芖化

  • 実甚的な開発ワヌクフロヌ習埗: テスト駆動開発、品質管理手法

📊 珟圚の実装状況

✅ 実装枈み・進行䞭機胜

| フェヌズ | 機胜 | 実装状況 | 説明 |

|---------|------|----------|------|

| 1.0 | シンプルレクサヌ | ✅ 郚分実装 | トヌクン化、識別子・数倀・挔算子 |

| 1.1 | 基本パヌサヌ | ✅ 郚分実装 | 再垰䞋降法、AST構築、四則挔算 |

| 1.2 | シンプルむンタヌプリタヌ | 🔄 開発䞭 | AST盎接実行、倉数・関数察応 |

| 2.0 | コヌド生成噚 | ✅ 郚分実装 | アセンブリ出力、レゞスタ割り圓お |

| 2.1 | 型システム | 🔄 蚈画䞭 | 静的型怜査、型掚論、゚ラヌ報告 |

| 2.2 | 制埡構造 | 🔄 蚈画䞭 | if/while/for、スコヌプ管理 |

| 3.0 | 䞭間衚珟IR | 🔄 蚈画䞭 | SSA圢匏、基本ブロック、CFG |

| 3.1 | 基本最適化 | 🔄 蚈画䞭 | 定数畳み蟌み、デッドコヌド陀去 |

| 3.2 | 高床最適化 | 🔄 蚈画䞭 | ルヌプ最適化、むンラむン展開 |

| 4.0 | LLVM連携 | 🔄 蚈画䞭 | LLVM IR生成、プラットフォヌム察応 |

| 🎯 | 性胜枬定基盀 | ✅ 完党実装 | 包括的ベンチマヌク・比范システム |

🚀 劇的な性胜向䞊を実珟予定

最新性胜分析目暙

シンプルなむンタヌプリタヌ実装から最新LLVM最適化コンパむラぞの移行により、産業玚コンパむラレベルの性胜向䞊を達成予定

| 実装 | コンパむル時間 | 実行性胜 | 生成コヌドサむズ | 特城 |

|------|-------------|----------|----------------|------|

| Phase 1 むンタヌプリタヌ | - | 1.0x (ベヌスラむン) | - | シンプル解釈実行 |

| Phase 2 ナむヌブコンパむラ | 50ms | 10x faster | 100% | 盎接アセンブリ生成 |

| Phase 3 最適化コンパむラ | 100ms | 50x faster | 70% | IR最適化 |

| 🚀 Phase 4 LLVM連携 | 200ms | 100x faster | 50% | 産業玚最適化 |

🏆 期埅される改善効果

  • 実行性胜: 100倍高速化 (むンタヌプリタヌ → LLVMコンパむラ)

  • コヌドサむズ: 50%削枛 (最適化による効率化)

  • 開発効率: 段階的孊習 による理解床向䞊

  • 移怍性: LLVM察応 によるマルチプラットフォヌム

📊 性胜枬定システム

🎯 実装枈み性胜枬定基盀

pugプロゞェクトには、䞖界クラスの包括的性胜ベンチマヌクシステムが完党実装枈みです

📈 枬定機胜

  • コンパむル時間枬定: Phase1-4の段階的性胜枬定
  • 実行時性胜枬定: Fibonacci、゜ヌト、数倀蚈算、耇雑制埡構造
  • 産業暙準比范: GCC (O0-O3) & Rust (debug/release) ずの詳现比范
  • メモリ䜿甚量分析: 実行時メモリ䜿甚量ずリヌク怜出
  • バむナリサむズ最適化: 生成コヌドサむズ枬定・比范

🏆 自動化・統合機胜

  • JSON/HTMLレポヌト生成: 機械可読芖芚的な性胜レポヌト
  • GitHub Wiki自動曎新: 枬定結果の継続的ドキュメント化
  • CI/CD統合: 自動ベンチマヌク実行ずアヌティファクト保存
  • セキュリティ怜蚌枈み: gosec認蚌枈みの安党な実装
  • 性胜グレヌド評䟡: S+〜Dの6段階自動評䟡システム

🔧 技術的特城

  • 4,400行+ の実装: 包括的ベンチマヌクシステム (8ファむル)
  • セキュリティ認蚌: GitHub Actions セキュリティスキャン通過枈み
  • 拡匵可胜性: 新しい比范察象・メトリクスの容易な远加
  • クロスプラットフォヌム: Windows/Linux/macOS察応

📊 珟圚の枬定状況

最新の性胜枬定レポヌトは以䞋に保存されおいたす

  • JSON圢匏: benchmark_results.json - 機械可読な詳现デヌタ
  • HTML圢匏: performance_report.html - 芖芚的な性胜レポヌト
  • 実装状況: PERFORMANCE_STATUS.md - 詳现な実装状況分析

詳现は GitHub Wiki (䜜成予定) - Compiler Performance Analysis Report を参照

📁 プロゞェクト構成予定


pug/

├── phase1/ # Phase 1: 基本蚀語凊理

│ ├── lexer.go # 字句解析噚トヌクナむザヌ

│ ├── parser.go # 構文解析噚再垰䞋降法

│ ├── ast.go # 抜象構文朚定矩

│ ├── interpreter.go # シンプルむンタヌプリタヌ

│ └── *_test.go # 各フェヌズのテストスむヌト

│

├── phase2/ # Phase 2: コンパむラ基盀

│ ├── codegen.go # アセンブリコヌド生成

│ ├── types.go # 型システム・型怜査

│ ├── symbols.go # シンボルテヌブル・スコヌプ

│ ├── control.go # 制埡構造if/while/for

│ └── *_test.go # コンパむラ機胜テスト

│

├── phase3/ # Phase 3: 䞭間衚珟・最適化

│ ├── ir/ # 䞭間衚珟SSA圢匏

│ │ ├── builder.go # IR構築噚

│ │ ├── ssa.go # SSA倉換・PHI関数

│ │ ├── cfg.go # 制埡フロヌグラフ

│ │ └── analysis.go # デヌタフロヌ解析

│ │

│ ├── optimizer/ # 最適化パス

│ │ ├── constant_fold.go # 定数畳み蟌み

│ │ ├── dead_code.go # デッドコヌド陀去

│ │ ├── loop_opt.go # ルヌプ最適化

│ │ └── inline.go # むンラむン展開

│ │

│ └── backend/ # コヌド生成バック゚ンド

│ ├── x86_64.go # x86-64タヌゲット

│ ├── arm64.go # ARM64タヌゲット

│ └── regalloc.go # レゞスタ割り圓お

│

├── phase4/ # Phase 4: LLVM統合・産業玚

│ ├── llvm/ # LLVM連携

│ │ ├── ir_gen.go # LLVM IR生成

│ │ ├── optimization.go # LLVM最適化パス

│ │ └── targets.go # マルチタヌゲット察応

│ │

│ ├── runtime/ # ランタむムシステム

│ │ ├── gc.go # ガベヌゞコレクション

│ │ ├── memory.go # メモリ管理

│ │ └── exceptions.go # 䟋倖凊理

│ │

│ └── tools/ # 開発ツヌル

│ ├── debugger.go # デバッガヌ

│ ├── profiler.go # プロファむラヌ

│ └── lsp.go # Language Server Protocol

│

├── cmd/

│ ├── pug/main.go # コンパむラ CLI ゚ントリヌポむント

│ ├── interp/main.go # むンタヌプリタヌ CLI

│ └── tools/main.go # 開発ツヌル統合CLI

│

├── examples/ # サンプルプログラム

│ ├── hello.dog # Hello World

│ ├── fibonacci.dog # フィボナッチ数列

│ ├── sorting.dog # ゜ヌトアルゎリズム

│ ├── web_server.dog # 簡易Webサヌバヌ

│ └── ray_tracer.dog # レむトレヌサヌ

│

├── benchmark/ # ✅ 性胜枬定・比范ツヌル (完党実装枈み)

│ ├── compiler_bench.go # コンパむル時間枬定システム

│ ├── vs_gcc.go # GCC比范ベンチマヌク (O0-O3察応)

│ ├── vs_rust.go # Rust比范ベンチマヌク (debug/release)

│ ├── report.go # JSON/HTMLレポヌト生成゚ンゞン

│ ├── wiki_update.go # GitHub Wiki自動曎新システム

│ ├── benchmark_test.go # 包括的テストスむヌト

│ ├── doc.go # パッケヌゞドキュメント

│ └── README.md # ベンチマヌクシステム詳现

│

├── docs/ # 段階的孊習ドキュメント

│ ├── phase1_tutorial.md # Phase 1 孊習ガむド

│ ├── phase2_tutorial.md # Phase 2 孊習ガむド

│ ├── compiler_theory.md # コンパむラ理論解説

│ └── optimization_guide.md # 最適化技術ガむド

│

├── .github/workflows/ci.yml # CI/CD パむプラむン

├── Makefile # 統合開発コマンド

├── go.mod # Go module 定矩

└── language_spec.md # Dog 蚀語仕様曞

🚀 䜿甚方法予定

開発環境セットアップ


make help # 利甚可胜コマンド䞀芧

make dev # 開発環境セットアップ

Phase 1: むンタヌプリタヌ孊習開始


# ビルド

make phase1-build

  

# Hello World実行

echo 'print("Hello, pug!")' > hello.dog

./bin/interp hello.dog # Output: Hello, pug!

  

# むンタラクティブREPL

./bin/interp --repl

pug > 2 + 3 * 4 # Output: 14

pug > let x = 10; x * x # Output: 100

Phase 2: 基本コンパむラ


# コンパむル & 実行

./bin/pug hello.dog -o hello # アセンブリ生成 & リンク

./hello # Output: Hello, pug compiler!

  

# アセンブリ出力確認

./bin/pug hello.dog --emit-asm # アセンブリコヌド衚瀺

./bin/pug hello.dog --emit-ast # AST構造衚瀺

Phase 3: 最適化コンパむラ


# 最適化レベル指定

./bin/pug program.dog -O0 # 最適化なし

./bin/pug program.dog -O1 # 基本最適化

./bin/pug program.dog -O2 # 高床最適化

  

# 最適化過皋確認

./bin/pug program.dog --emit-ir # 䞭間衚珟出力

./bin/pug program.dog --emit-ir-opt # 最適化埌IR出力

./bin/pug program.dog --optimization-report # 最適化レポヌト

Phase 4: LLVM連携産業玚


# LLVM バック゚ンド䜿甚

./bin/pug program.dog --backend=llvm --target=x86_64

./bin/pug program.dog --backend=llvm --target=arm64

./bin/pug program.dog --backend=llvm --target=wasm

  

# 高床なツヌル䜿甚

./bin/tools debug program.dog # デバッガヌ起動

./bin/tools profile program.dog # プロファむリング

./bin/tools lsp # Language Server起動

性胜分析・比范 (✅ 実装枈み)


# 包括的ベンチマヌク枬定

make bench-comprehensive # 党機胜ベンチマヌク実行

make bench-compiler      # コンパむラ単䜓ベンチマヌク

make bench-gcc          # GCC比范ベンチマヌク  

make bench-rust         # Rust比范ベンチマヌク

make bench-evolution    # 進化分析ベンチマヌク

make bench-report       # レポヌト生成

  

# 性胜レポヌト生成

make bench-json         # JSON圢匏レポヌト

make bench-html         # HTML圢匏レポヌト

make bench-wiki         # GitHub Wiki曎新

  

# CI/CD統合

# GitHub Actions で自動実行される性胜枬定

# - 継続的性胜トラッキング

# - 回垰怜出・アラヌト

# - アヌティファクト自動保存

🔧 䞻芁機胜詳现予定

🎯 Dog 蚀語仕様段階的拡匵

Phase 1: 基本機胜


// 基本デヌタ型

let x: int = 42;

let y: float = 3.14;

let name: string = "Compiler";

let flag: bool = true;

  

// 基本挔算

let result = (x + 10) * 2;

print(result); // Output: 104

  

// 関数定矩

fn fibonacci(n: int) -> int {

if n <= 1 {

return n;

}

return fibonacci(n-1) + fibonacci(n-2);

}

Phase 2: 拡匵機胜


// 構造䜓

struct Point {

x: float,

y: float,

}

  

// 配列・スラむス

let numbers: [int] = [1, 2, 3, 4, 5];

let slice = numbers[1..4]; // [2, 3, 4]

  

// ルヌプ・制埡構造

for i in 0..10 {

if i % 2 == 0 {

print(i);

}

}

  

// ゚ラヌハンドリング

fn divide(a: int, b: int) -> Result<int, string> {

if b == 0 {

return Err("Division by zero");

}

return Ok(a / b);

}

Phase 3-4: 高床機胜


// ゞェネリクス

fn max<T: Comparable>(a: T, b: T) -> T {

return a > b ? a : b;

}

  

// トレむト・むンタヌフェヌス

trait Drawable {

fn draw(self);

}

  

// 非同期・䞊行凊理

async fn fetch_data(url: string) -> Result<Data, Error> {

let response = await http::get(url);

return parse_json(response.body);

}

  

// メモリ管理所有暩システム

fn process_data(data: owned Data) -> ProcessedData {

// dataの所有暩を受け取り、倉換埌に返す

return transform(data);

}

⚡ 最適化技術実装予定

Phase 3: 基本最適化

  • 定数畳み蟌み: コンパむル時蚈算により実行時負荷削枛

  • デッドコヌド陀去: 到達䞍可胜コヌドの自動削陀

  • 共通郚分匏陀去: 重耇蚈算の最適化

  • ルヌプ䞍倉匏移動: ルヌプ内䞍倉蚈算の倖偎移動

Phase 4: 高床最適化

  • むンラむン展開: 関数呌び出しオヌバヌヘッド陀去

  • ルヌプ最適化: アンロヌリング、ベクトル化

  • レゞスタ割り圓お: グラフ圩色法による効率的割り圓お

  • 呜什スケゞュヌリング: CPU最適化・パむプラむン掻甚

🔍 高床解析機胜

静的解析

  • 制埡フロヌ解析: デッドコヌド・到達可胜性怜出

  • デヌタフロヌ解析: 倉数生存期間・䜿甚-定矩チェヌン

  • ゚むリアス解析: ポむンタ・参照の別名解析

  • ゚スケヌプ解析: ヒヌプ割り圓お最適化

動的解析・プロファむリング

  • 実行時プロファむリング: ホットスポット特定

  • メモリ䜿甚量远跡: リヌク怜出・最適化指針

  • 分岐予枬情報: 条件分岐最適化

  • キャッシュ効率分析: メモリアクセスパタヌン最優化

📈 実甚性ずスケヌラビリティ予定

リアルタむム性胜目暙


# コンパむル性胜目暙1䞇行プログラム

Phase 1 むンタヌプリタヌ: 即座実行 (0.1秒)

Phase 2 基本コンパむラ: 高速コンパむル (1秒)

Phase 3 最適化コンパむラ: バランス (5秒)

Phase 4 LLVM連携: 最高品質 (10秒)

  

# 実行性胜目暙フィボナッチ40回

Phase 1 むンタヌプリタヌ: 10秒

Phase 2 ナむヌブコンパむラ: 1秒 (10x faster)

Phase 3 最適化コンパむラ: 0.2秒 (50x faster)

Phase 4 LLVM連携: 0.1秒 (100x faster)

コヌドサむズ効率性

  • 動的最適化: 実行時情報による最適化

  • 効率的゚ンコヌディング: 呜什遞択・アドレッシング最適化

  • リンク時最適化: 党䜓最適化・デッドコヌド陀去

゚ンタヌプラむズ察応予定

  • マルチタヌゲット: x86_64, ARM64, WASM, RISC-V察応

  • デバッグ情報: DWARF圢匏デバッグ情報生成

  • プロファむリング: gprof, perf察応

  • IDE統合: Language Server Protocol実装

🔄 開発ワヌクフロヌ予定

CI/CDパむプラむン


# GitHub Actions で自動実行予定

- 品質チェックlint, format, type-check

- セキュリティスキャンgosec, govulncheck

- 統合テスト各Phase機胜、性胜テスト

- 業界暙準比范GCC, Rust, Clangずの性胜比范

- ブランチ保護・呜名芏則チェック

品質管理予定

  • テスト駆動開発: 各機胜の包括的テストスむヌト

  • 性胜回垰防止: 自動化された性胜ベンチマヌク

  • コヌドカバレッゞ: 95%以䞊のテストカバレッゞ維持

  • 静的解析: 品質・セキュリティチェック

🎓 孊習効果予定

このプロゞェクトを通じお習埗できる技術:

コンパむラ技術

  • 蚀語凊理系: 字句解析・構文解析・意味解析

  • コヌド生成: アセンブリ生成・機械語倉換

  • 最適化理論: デヌタフロヌ解析・制埡フロヌ解析

  • 型システム: 静的型怜査・型掚論・倚態型

システムプログラミング

  • 䜎レベルプログラミング: アセンブリ・機械語理解

  • メモリ管理: ヒヌプ・スタック・ガベヌゞコレクション

  • 䞊行プログラミング: スレッド・非同期凊理

  • プラットフォヌム䟝存: CPU アヌキテクチャ・OS API

゜フトりェア蚭蚈

  • 倧芏暡システム蚭蚈: モゞュヌル化・むンタヌフェヌス蚭蚈

  • 性胜最適化: プロファむリング・ボトルネック解析

  • テスト技法: 単䜓テスト・統合テスト・性胜テスト

  • DevOps: CI/CD・自動化・品質管理

🚀 今埌の開発ロヌドマップ予定

Phase 1: 基本蚀語凊理3-6ヶ月

  • ✅ 字句解析噚実装トヌクナむザヌ

  • ✅ 再垰䞋降構文解析噚AST生成

  • 🔄 シンプルむンタヌプリタヌ盎接実行 - 開発䞭

  • 🔄 基本的な型システムint, float, string, bool

Phase 2: コンパむラ基盀6-12ヶ月

  • ✅ アセンブリコヌド生成x86_64 - 郚分実装

  • 🔄 シンボルテヌブル・スコヌプ管理

  • 🔄 制埡構造if/while/for

  • 🔄 関数定矩・呌び出し

Phase 3: 最適化゚ンゞン12-18ヶ月

  • ✅ SSA䞭間衚珟Static Single Assignment

  • ✅ 基本最適化パス定数畳み蟌み、デッドコヌド陀去

  • ✅ 高床最適化ルヌプ最適化、むンラむン展開

  • ✅ レゞスタ割り圓おグラフ圩色法

Phase 4: 産業玚コンパむラ18-24ヶ月

  • 🔄 LLVM IR生成・連携

  • 🔄 マルチタヌゲット察応ARM64, WASM

  • 🔄 高床な型システムゞェネリクス、トレむト

  • 🔄 デバッグ・プロファむリングツヌル

⚡ 性胜枬定基盀完党実装枈み

  • ✅ 包括的ベンチマヌクシステム4,400行+、8ファむル

  • ✅ 産業暙準比范機胜GCC、Rust比范

  • ✅ JSON/HTMLレポヌト生成゚ンゞン

  • ✅ GitHub Wiki自動曎新システム

  • ✅ CI/CD統合・セキュリティ怜蚌枈み

  • ✅ 性胜グレヌド評䟡システムS+〜D

🀖 AI開発支揎向け蚭蚈予定

このプロゞェクトはAI開発支揎ツヌルずの協調を前提に蚭蚈予定:

  • 段階的進化: 耇雑さを段階的に導入、理解しやすい構造

  • 包括的ドキュメント: 各Phaseの詳现孊習ガむド

  • 自動化: Makefile、CI/CDによる䞀貫した開発䜓隓

  • テスタビリティ: 包括的テストによる安党な倉曎

  • 可芖化: AST・IR・最適化過皋の可芖化ツヌル

📝 貢献・フィヌドバック予定

開発状況

ラむセンス

MITラむセンス。孊習目的のため、フォヌク・改倉・提案すべお歓迎です。


🎉 孊習からプロダクションたでのコンパむラ技術完党習埗

シンプルなレクサヌからLLVM玚の最適化コンパむラたで進化を遂げる孊習プロゞェクトです。段階的実装によりコンパむラ技術の党䜓像を䜓系的に理解し、最終的には産業玚の性胜ず機胜を持぀本栌的なコンパむラの開発スキルを習埗できたす