1.8 KiB
1.8 KiB
Phase 20.20 — 実装計画(C ABI Export / LLVM)
マイルストーン
- M1: 注釈→MIR JSON 反映(@extern_c)
- M2: LLVM(IR) C ABI ラッパ生成(プリミティブ i64/i32)
- M3: C ヘッダー生成(extern "C"、stdint.h)
- M4: 最小スモーク(.o + .h → C からリンク実行)
- M5: ドキュメント(設計/制約/使用例)
タスク(詳細)
- 注釈設計と反映(M1)
- @extern_c("c_symbol") の構文/意味論を docs に定義
- パーサ→ビルダーで関数メタへ注釈を格納
- MIR JSON に
function.flags.extern_c = "c_symbol"を出力
- C ABI ラッパ生成(M2)
- llvmlite builder に
emit_c_abi_function(func_name, c_name)を追加 - calling convention=ccc、unmangled 名、visibility(ELF/Mach‑O/Win)
- プリミティブ i64/i32 のみ対応(fail-fast: その他は未対応メッセージ)
- ヘッダー生成(M3)
- CHeaderGenerator を実装(MIR JSON→.h 生成)
- extern "C"、include guard、stdint.h、プロトタイプ
- 型マッピング表(SSOT)に基づき生成(当面: i64→int64_t、i32→int32_t)
- スモーク(M4)
- Hakorune → MIR(JSON) → .o(C ABI)→ C からリンク→実行
- 代表:
test_add(10,20)=30、負/ゼロ境界
- ドキュメント(M5)
- docs/development/abi/README.md(設計/制約/CLI)
- docs/development/abi/types.md(型マッピングSSOT)
- tools(最小ビルド/リンク例)
ガード/ポリシー
- 既定 OFF(CLIフラグ:
--emit-c-abi,--emit-header) - ENV は原則導入しない。必要時のみ TTL(ドキュ必須)
- 失敗は Fail‑Fast(ラッパ生成前に診断)
見積
- 実装 + スモーク + ドキュ: 2–3週間(最小構成)