42 lines
1.8 KiB
Markdown
42 lines
1.8 KiB
Markdown
# Plan — Phase 20.21(Manual Memory Management / C‑ABI)
|
||
|
||
マイルストーン
|
||
- M1: libc ベースの hako_alloc/free(realloc は任意)
|
||
- M2: Opaque Handle(HakoHandle)retain/release(atomic)
|
||
- M3: SSOT ドキュメント(所有権/並行性/失敗時挙動)
|
||
- M4: スモーク(alloc/free, retain/release, 二重解放Fail, NULL 安全)
|
||
- M5: hakmem 差し替え導線(ENV ガードのみ、実装は次フェーズ可)
|
||
|
||
タスク詳細
|
||
1) API スケルトン(ヘッダ & 実装・最小)
|
||
- include/hako_mem.h(生成 or 手書き)
|
||
- void* hako_alloc(size_t);
|
||
- void hako_free(void*);
|
||
- typedef uint64_t HakoHandle; HakoHandle hako_retain(HakoHandle); void hako_release(HakoHandle);
|
||
- src/abi/c/mem_libc.c(libc 実装)
|
||
- ENV: HAKO_C_ABI_ALLOC={libc|hakmem}(既定 libc, 未対応値は Fail)
|
||
|
||
2) retain/release(atomic)
|
||
- 参照カウントテーブル(ハンドル→rc)を内部に保持(最小実装)
|
||
- 0 → free で解放(ハンドルの登録解除)
|
||
- 再入/並行性はatomic+スピンロックで最小実装(将来改善)
|
||
|
||
3) SSOT ドキュ
|
||
- docs/development/abi/README.md に Memory Ownership Rules を追記
|
||
- Fail‑Fast 文言(double free/unknown handle/allocator mismatch)を固定
|
||
|
||
4) スモーク
|
||
- alloc/write/free 正常ケース
|
||
- double free → 失敗タグ(rc!=0)
|
||
- retain/release の基本(rc 増減、0到達で解放)
|
||
- (任意)ASan/Valgrind 実行のガイド
|
||
|
||
5) hakmem 導線
|
||
- ENV のみ(実装は次)。切替点・責務・将来の整合を README に明記
|
||
|
||
リスクと対策
|
||
- 二重解放/unknown handle → Fail‑Fast(安定タグ)
|
||
- 競合 → atomic+最小ロック、将来は hazard pointers 等で最適化
|
||
- ABI 変更 → _copy と _borrow を命名で分離(本フェーズは _copy のみ)
|
||
|