docs: restore docs/private/roadmap from 7b4908f9 (Phase 20.31)

This commit is contained in:
nyash-codex
2025-10-31 18:00:10 +09:00
parent 1d49e24bf0
commit 8fd3a2b509
433 changed files with 108935 additions and 0 deletions

View File

@ -0,0 +1,25 @@
# Phase 20.20 — チェックリストC ABI Export / LLVM
開始前
- [ ] 仕様合意: 注釈 @extern_c と最小型i64/i32
- [ ] 既定OFFポリシー確認CLI先行・ENV最小
実装
- [ ] @extern_c → MIR JSON flags 反映
- [x] llvmlite: emit_c_abi_function 実装ccc/visibility/unmangled
- [x] CHeaderGenerator 実装extern "C"/stdint.h/prototype harness `--emit-header`
テスト/スモーク
- [ ] hako_add: .o + .h 生成 → C からリンク → 出力 30
- [ ] 負数/ゼロ境界ケース
- [ ] 片方未対応型で FailFast 診断
ドキュメント
- [ ] abi/README.md設計/制約/CLI
- [ ] abi/types.md型マッピングSSOT
- [ ] ツール例gcc/clangリンク
受入基準
- [ ] 代表関数の AOT 実行が C から成功
- [ ] 警告/可視性問題がない対象プラットフォームのうち1つで確認
- [ ] 失敗時は安定メッセージで FailFast

View File

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

View File

@ -0,0 +1,52 @@
# Phase 20.20 — C ABI Export via LLVM設計・計画
目的
- Hakorune スクリプトから LLVMllvmliteを用いて C ABI 互換の関数をエクスポートできる最小ラインを構築する。
- Rust 層の一部AOT/エクスポート境界)を置き換え可能な薄い導線を用意し、段階的に Rust 依存を薄くする。
スコープ(段階導入)
- 短期Phase 20.20: プリミティブ型i64/i32限定の純関数エクスポート。
- `@extern_c("c_symbol")` 注釈を MIR JSON へ反映。
- llvmlite で C calling conventionccc・unmangled symbol・visibility を設定したラッパー関数を生成。
- C ヘッダー自動生成extern "C"、stdint.h 依存、最小プロトタイプ)。
- 中期(次フェーズ): Stringconst char* readonly、Arrayptr+len 構造体)の読み出しサポート。
- 長期: Box ABIArc/RefCell 相当)と GC 連携(高リスク。段階的に)
進捗20251030, M2 到達)
- Python/llvmlite ビルダーに CABI ラッパ生成を実装flags.extern_c / metadata.extern_c
- MIR(JSON) 例v1:
```json
{
"schema_version": "1.0",
"functions": [
{ "name": "add/2",
"params": [{"name":"a","type":"i64"},{"name":"b","type":"i64"}],
"blocks": [],
"flags": { "extern_c": "hako_add" }
}
]
}
```
- 生成IR: `define i64 @hako_add(i64,i64)` が挿入され、内部 `@"add/2"` を呼び出す
- 使い方: `python3 tools/llvmlite_harness.py --in mir.json --emit-ll out.ll`(または `--out out.o`
非対象(このフェーズ)
- メモリ管理(自動管理)
- 参照循環/所有権を跨いだ複雑な Box ABI
- 既存 CLI/VM ラインの既定挙動変更(すべて既定 OFF の新フラグでガード)
設計原則
- BoxFirst境界を箱化: C ABI 層は `src/llvm_py/abi/`純粋ツールに隔離。VM/Runner へ依存しない。
- FailFast: 型不一致や未対応は IR 生成前にエラーメッセージで停止。
- ENV 最小: 既定は CLI フラグ優先。ENV は開発支援の短命 TTL のみ。
受け入れ基準MVP
- `@extern_c("hako_add")` を付与した i64 加算関数が `.o` と `.h` に出力され、C からリンクして実行可能。
- Linux/Mac/Win いずれか 1 プラットフォームで visibility/dllexport 設定に問題がない(警告なし)。
- MIR 注釈 → IR ラッパ生成 → ヘッダー生成の一貫性SSOTを満たす。
---
関連ドキュメント(起票予定)
- docs/development/abi/README.md — C ABI 全体設計・制約
- docs/development/abi/types.md — MIR 型→C 型マッピングSSOT