Files
hakorune/docs/private/roadmap/phases/phase-20.21

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