Files
hakorune/CURRENT_TASK.md
Moe Charm c13d9c045e 📚 Phase 12: Nyashスクリプトプラグインシステム設計と埋め込みVM構想
## 主な成果
- Nyashスクリプトでプラグイン作成可能という革命的発見
- C ABI制約の分析と埋め込みVMによる解決策
- MIR/VM/JIT層での箱引数サポートの詳細分析

## ドキュメント作成
- Phase 12基本構想(README.md)
- Gemini/Codex先生の技術分析
- C ABIとの整合性問題と解決策
- 埋め込みVM実装ロードマップ
- 箱引数サポートの技術詳細

## 重要な洞察
- 制約は「リンク時にC ABI必要」のみ
- 埋め込みVMでMIRバイトコード実行により解決可能
- Nyashスクリプト→C ABIプラグイン変換が実現可能

Everything is Box → Everything is Plugin → Everything is Possible!
2025-08-30 22:52:16 +09:00

2.5 KiB
Raw Blame History

CURRENT TASK (Phase 10.5c)

目的: Handle-First + by-name を軸に、Python統合PyRuntimeBox/PyObjectBoxを汎用・安全に実装する。最適化は後段。

ステータス2025-08-30 更新)

  • フェーズ: 10.5c 汎用Handle/TLV実装の拡張Python統合開始
  • 方針: 「綺麗に作って動かす」= ハードコーディング排除・Handle/TLV統一・最適化は後回し

10.5b 完了項目(橋渡し済み)

  • by-name シムgetattr/callを実装JIT/AOTし、Lowerer から a0 を nyash.handle.of で確実にハンドル化して呼び出し
  • 引数 a1/a2 はハンドル優先/なければレガシー参照から TLV 構築String/Integer はプリミティブ化)
  • 汎用 birth シムを追加
    • nyash.box.birth_h(type_id:i64)->i64JIT/AOT
    • nyash.box.birth_i64(type_id:i64, argc:i64, a1:i64, a2:i64)->i64JIT/AOT
    • Lowerer: NewBox引数無しは birth_h に統一。引数ありは安全なケースInteger const引数が既にハンドルだけ birth_i64 に段階導入
  • AOT: examples/aot_py_math_sqrt_min.nyash で Strict でも .o 生成を確認target/aot_objects/main.o
  • ログ
    • AOT: NYASH_CLI_VERBOSE=1 で birth_h の可視化
    • JIT: events で by-name/birth の観測(必要十分の最小限)

10.5c 着手項目(進行中)

  • Lowerer: PluginInvoketype_id/method_id & by-nameの Handle-First 配線を統一a0を常にnyash.handle.of
  • JIT/AOT: birth_h/_i64と by-name シムでTLV生成を汎用化String/Integerはプリミティブ化、他はHandle
  • Strict時のJIT実行停止コンパイル専用でVM=仕様の原則を徹底

非対応(後回し・最適化)

  • StringBox 専用の known_string/再利用最適化
  • 汎用的な定数プールbirth の可変長 TLV 一括最適化

次の作業10.5c 続き)

  1. FFI仕様の短文化a0/a1/a2=Handle優先→TLV、レガシー抑止フラグ、戻りTLVのdecodeポリシー
  2. birth引数の一般化メモ可変長TLV、例外時ハンドリング
  3. Python統合の最小チェーンimport→getattr→callのAOT/VM双方での実装確認サンプル追加
  4. ドキュメント更新10.5c README/INDEX、FFIガイド

合意済みルール

  • まず汎用・安全に動かす(最適化は内部に隠し、後段)
  • StringBox 等の個別特化は入れない。Handle/TLV で統一し、Box 追加を阻害しない
  • Strict/FailFast を維持fallback で隠さない)