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,23 @@
# Phase 20.22 — チェックリストString/Array CABI / MVP
開始前P1: Deferred
- [ ] Phase 20.21 が完了SSOT・alloc/free・handle
実装
- [ ] hako_string_to_c_copy(HakoHandle)
- [ ] HakoArrayI64 / hako_array_i64_to_c_copy(HakoHandle)
- [ ] c_header_gen.py の拡張typedef/prototypes
テスト/スモーク
- [ ] C リンク実行で戻り値/内容が正しいoptin
- [ ] 文字列: 空文字・長文
- [ ] 配列: len=0複数要素
- [ ] 負例: NULL巨大サイズ→Fail安定タグ
ドキュメント
- [ ] abi/README.md に API 追加(所有権・失敗時挙動)
- [ ] types.md に HakoArray を追記
受入基準(着手時)
- [ ] quickoptin緑、回帰なし
- [ ] 既定OFFで既存挙動不変

View File

@ -0,0 +1,31 @@
# Plan — Phase 20.22String/Array CABI / MVP
マイルストーン
- M1: string → C コピー APIhako_string_to_c_copy
- M2: array<i64> → C コピー APIHakoArray / hako_array_to_c_copy
- M3: ヘッダー生成拡張typedef/プロトタイプ)
- M4: スモークC リンク実行・負例)
タスク詳細
1) String copyout
- 実装: 内部 StringBox から bytes を複製、末尾 NUL を付与
- 戻り: char*caller owns; `hako_free` 必須)
- 失敗: NULL 返し安定タグstderr
2) Array<i64> copyout
- 実装: 配列メタlenを読み、`HakoArrayI64{data,length}` を複製
- 戻り: HakoArrayI64*caller owns; `hako_mem_free(data)``hako_mem_free(self)` 必須)
- 失敗: NULL 返し+安定タグ
3) ヘッダ生成
- `typedef struct { int64_t* data; size_t length; } HakoArrayI64;`
- プロトタイプを c_header_gen.py に追加
4) スモーク
- C からリンク: 文字列/配列を受け取り、値確認→`hako_free`
- 負例: 空文字列len=0NULL 入力巨大サイズFailFast
リスク/対策
- 二重解放 → `hako_free` の多重呼び出し検知Fail
- 競合 → Phase 20.21 の retain/release ルールに従う
- ABI 拡張 → _copy と _borrow を命名で分離(本フェーズは _copy のみ)

View File

@ -0,0 +1,36 @@
# Phase 20.22 — String/Array CABIMVP / P1: Deferred unless FFI required
前提
- Phase 20.21 完了CABI メモリ管理の SSOT が確立)。
目的FFI用途
- C 側へ安全にコピーアウトする最小 API を提供(所有権=呼び出し側)。
- from_cビュー借用は扱わず、読み出し専用で進める。
ステータス
- セルフホスト優先のため P1後回し。FFI が必要になった時点で着手する。
APIMVP
- 文字列(読み出し専用)
- `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)`
設計原則
- BoxFirstOpaque Handle 経由のみ)。
- FailFast: NULL/長さ不整合/OOB は安定タグで失敗。
- 既定OFF・CLI優先。ENVは短命TTL
受入れ基準
- `.o + .h` を C からリンクし、`hako_string_to_c_copy``hako_array_to_c_copy` が期待どおり動作すること。
- quickoptinにスモーク追加、回帰なし。
範囲外(本フェーズ)
- from_cC string→Nyash StringBox
- ビューborrowptr+len の寿命管理)。
- 文字コード変換/ロケール依存の扱い。
タイムライン34週間
- Week12: Stringcopyout実装スモークヘッダ生成拡張。
- Week34: Arraycopyout実装スモーク負例テストNULL/len=0/OOB