Files
hakorune/docs/private/roadmap/phases/phase-20.21/README.md

46 lines
2.3 KiB
Markdown
Raw Normal View History

# Phase 20.21 — Manual Memory ManagementCABIMVP
目的
- CABI におけるメモリ管理の単一規約SSOTを定義し、安全な最小APIを提供する。
- 将来の hakmem独自アロケータ統合を見据えつつ、既定は libcmalloc/freeで運用する。
設計原則
- 既定OFF・FailFast・SSOTドキュと実装を一致
- BoxFirstOpaque Handle で境界を切る): C から内部表現Box/GCに触れさせない。
- 段階導入: MVP はコピー/解放の最小規約に限定(ビュー/借用は次フェーズ)。
APIMVP
- 低レベルlibc 既定)
- `void* hako_alloc(size_t size);`
- `void hako_free(void* ptr);`
- `// optional: void* hako_realloc(void* ptr, size_t new_size);`(後回し推奨)
- Opaque Handle将来の Box/GC を見据える)
- `typedef uint64_t HakoHandle;`
- `HakoHandle hako_retain(HakoHandle h);`ref++atomic
- `void hako_release(HakoHandle h);`ref--→0で解放
所有権ルールSSOT
- 返却された C バッファ(`void*`/文字列/配列)は呼び出し側の所有。呼び出し側が `hako_free` で解放。
- 入力ポインタの所有権は関数が奪取しないunless 明示)。
- Handle は「所有=参照カウント保有」と定義。`retain/release` でカウント管理。
実装方針
- 既定: libcmalloc/free
- 切替: `HAKO_C_ABI_ALLOC={libc|hakmem}`(既定 libc、hakmem は将来の差し替え点)。
- 並行性: retain/release は atomic。競合時は FailFast で診断。
受入れ基準
- スモーク: alloc→write→free の基本、二重解放の Fail、NULL 安全。
- 任意ASan/Valgrind オプトインでリークdoublefree を検出。
- ドキュ: ルール・API・ENV・エラーポリシーを SSOT に記載。
範囲外(本フェーズ)
- 借用ビューptr+lenの提供。
- from_cC 文字列から Nyash 文字列へ)の所有権問題。
- OSプラットフォームごとの可視性次以降
タイムライン23週間
- Week1: API スケルトンlibc 実装+最小スモーク。
- Week2: ドキュ仕上げASan/Valgrind スモーク任意hakmem 差し替え導線ENV