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

46 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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