Files
hakorune/docs/private/roadmap/phases/phase-15.76

Phase 15.76 - extern_c & Frozen Toolchain

期間: 2025-10-14 - 2025-11-084週間 状態: 🚧 計画中ChatGPT実装開始準備


🎯 このフェーズで実現すること

extern_c構文 + 凍結EXEhako-frozen-v1.exeの背骨確立

  1. extern_c構文: HakoruneからC関数を直接呼び出しRust extern "C" 相当)
  2. LLVM Backendプラグイン化: C ABI経由で.o生成
  3. AOT導線確立: MIR JSON → .o → EXE
  4. 凍結EXE準備: Rust層を凍結しても日常開発が回る

💡 発見の経緯2025-10-14

Usertomoakiの直感:

「HakoruneからC ABIを呼びたい」 → 「あ、Rustもやってるextern "C"」 → 「じゃあHakoruneでもextern_c構文を!」

結果: 業界標準パターンRust stage0, Go 1.4 frozenへの独自収束 論文価値


📁 ドキュメント

🎯 必読

📚 設計資料


🚀 クイックスタート(実装後)

基本的なextern_c呼び出し

// プロセスID取得
static box SystemInfo {
    get_pid() -> IntegerBox {
        local pid = extern_c "getpid"()
        return pid
    }
}

LLVM Backendプラグイン呼び出し

// MIR JSON → .o 生成
static box Compiler {
    compile_to_object(mir: StringBox, out: StringBox) -> IntegerBox {
        local result = extern_c "llvm_compile_mir_to_object"(
            mir.to_cstring(),
            out.to_cstring()
        )
        return result
    }
}

AOT導線

# Step 1: MIR JSON生成
./hako --backend mir --emit-mir-json program.mir.json program.hako

# Step 2: .o生成
./hako compiler_wrapper.hako program.mir.json program.o

# Step 3: リンク
clang program.o -o program.exe libhakorune_kernel.a

🔒 セキュリティ

既定Deny + Allowlist

# hako.toml
[ffi.dynamic]
allow = [
    "getpid",     # 既定
    "strlen",     # 既定
    "system",     # 既定
    "getppid",    # 追加
]

開発時のみ全許可CI不可

HAKO_FFI_ALLOW_ALL=1 ./hako program.hako  # ⚠️ Dev only

詳細: GUARD_RAILS.md


📊 進捗Week 1-4

Week 12025-10-14 - 10-18

  • extern_c構文実装Parser→AST→MIR
  • VM動的FFI基盤0/1/2引数対応
  • 既定ホワイトリスト実装

Week 22025-10-19 - 10-25

  • ENV/TOML許可機構
  • libs/llvm_backend プラグイン化
  • lib探索パス実装

Week 32025-10-26 - 11-01

  • AOT導線整備MIR JSON→.o→EXE
  • 補助スクリプト作成
  • ドキュメント完成

Week 42025-11-02 - 11-08

  • スモークテスト追加
  • 統合テストquick-selfhost
  • レビュー・調整

詳細: MILESTONE.md


🎯 成功基準

必須DoD

  1. extern_c構文が動作getpid/strlen/system
  2. libs/llvm_backend プラグイン化完了
  3. AOT導線再現可能MIR JSON→.o→EXE
  4. allowlist/TOML運用ガイド完成

推奨

  1. スモークテスト全緑extern_c関連
  2. 既存テスト影響なし170 PASS維持

🚀 次のフェーズPhase 15.77/凍結へ)

開始条件

  • AOTルートが安定稼働
  • libs/llvm_backend ビルド緑Linux
  • セキュリティ運用ガイド完成

Phase 15.77 目標

  • 凍結EXE確定: hako-frozen-v1.exe タグ付け・配布
  • Rust層最小化: 100-200行VM実行エンジンのみ
  • 脱Rust加速: Hakoruneパーサーのみ開発

📚 関連リソース

前フェーズ

論文資料

業界標準パターン

  • Rust: stage0凍結ツールチェーン
  • Go: Go 1.4 frozenbootstrap用
  • OCaml: ocamlc frozen自己ホスト用

💬 質問・議論

ChatGPTと相談

このフェーズはChatGPTが主導で実装予定。設計判断はChatGPT↔tomoaki↔Claude三者で合意形成。

Claudeのレビュー担当

  • コード品質チェック
  • セキュリティレビュー
  • ドキュメント整備

作成日: 2025-10-14 実装開始: ChatGPT2025-10-14 Stage 4完了後 レビュー: Claude実装後