37 lines
1.6 KiB
Markdown
37 lines
1.6 KiB
Markdown
# Phase 20.22 — String/Array C‑ABI(MVP / P1: Deferred unless FFI required)
|
||
|
||
前提
|
||
- Phase 20.21 完了(C‑ABI メモリ管理の SSOT が確立)。
|
||
|
||
目的(FFI用途)
|
||
- C 側へ安全にコピーアウトする最小 API を提供(所有権=呼び出し側)。
|
||
- from_c/ビュー(借用)は扱わず、読み出し専用で進める。
|
||
|
||
ステータス
|
||
- セルフホスト優先のため P1(後回し)。FFI が必要になった時点で着手する。
|
||
|
||
API(MVP)
|
||
- 文字列(読み出し専用)
|
||
- `char* hako_string_to_c_copy(HakoHandle str);`(caller owns; `hako_mem_free` 必須)
|
||
- 配列(i64 限定の最小)
|
||
- `typedef struct { int64_t* data; size_t length; } HakoArrayI64;`
|
||
- `HakoArrayI64* hako_array_i64_to_c_copy(HakoHandle arr);`(caller owns; `hako_mem_free(data)`, `hako_mem_free(self)`)
|
||
|
||
設計原則
|
||
- Box‑First(Opaque Handle 経由のみ)。
|
||
- Fail‑Fast: NULL/長さ不整合/OOB は安定タグで失敗。
|
||
- 既定OFF・CLI優先。ENVは短命(TTL)。
|
||
|
||
受入れ基準
|
||
- `.o + .h` を C からリンクし、`hako_string_to_c_copy`/`hako_array_to_c_copy` が期待どおり動作すること。
|
||
- quick(opt‑in)にスモーク追加、回帰なし。
|
||
|
||
範囲外(本フェーズ)
|
||
- from_c(C string→Nyash StringBox)。
|
||
- ビュー(borrow/ptr+len の寿命管理)。
|
||
- 文字コード変換/ロケール依存の扱い。
|
||
|
||
タイムライン(3–4週間)
|
||
- Week1–2: String(copy‑out)実装+スモーク+ヘッダ生成拡張。
|
||
- Week3–4: Array(copy‑out)実装+スモーク+負例テスト(NULL/len=0/OOB)。
|