Files
hakorune/CURRENT_TASK.md

5.6 KiB
Raw Blame History

CURRENT TASK (Phase 10.7 workbench + 10.5c 継続)

直近スナップショット2025-08-30 更新)

Current State

  • Plugin-First/Handle-First/TLVはAOT/VMで安定10.5e完了状態を継続)
  • 10.6計画Thread-Safety/Schedulerと10.7計画トランスパイルAll-or-Nothingを確定
  • Nyash-onlyパイプラインtools/pycを開始Parser/CompilerはNyashで実装方針
  • include式の最小実装を追加式でBoxを返す1ファイル=1static box
    • インタプリタ: include式は実行時評価
    • VM/AOT: MIRビルダーが取り込み先を同一MIRに連結MIR命令は増やさない
    • nyash.tomlの[include.roots]でルート解決拡張子省略、index.nyash対応
  • tools/pycをモジュール分割
    • tools/pyc/pyc.nyashエントリ: includeでPyIR/PythonParserNy/PyCompilerを取り込み
    • tools/pyc/PyIR.nyash, PythonParserNy.nyash, PyCompiler.nyashNyash-only実装

How To RunNyash-only

  • VM: NYASH_PY_CODE=$'def main():\n return 42' ./target/release/nyash --backend vm tools/pyc/pyc.nyash
    • 出力: Parser JSON → IRreturn 42→ 生成Nyashソース現状は骨組み
  • include動作サンプル: ./target/release/nyash --backend vm examples/include_main.nyashMath.add(1,2)=3

進捗2025-08-30 夜)

  • include: 循環検出を追加(インタプリタ/VM収集器ともにロード中スタックで経路出力。examples/cycle_a/b で検証
  • tools/pyc: 最小IRreturn定数→Nyash生成を通し、出力をprintまで接続
  • 文字列基盤: VMにString統一ブリッジを着手内部StringBoxとプラグインStringBoxの比較互換、内部Stringメソッドのフォールバック
  • 追加プラグイン(小粒・基底)
    • RegexBoxcompile/isMatch/find/replaceAll/split: examples/regex_min.nyash
    • EncodingBoxutf8/base64/hex: examples/encoding_min.nyash
    • TOMLBoxparse/get/toJson: examples/toml_min.nyash
    • PathBoxjoin/dirname/basename/extname/isAbs/normalize: examples/path_min.nyash

Next Steps優先順・更新

  1. String統一ブリッジ実装済・一次完了
    • VM: 比較/加算/代表メソッドのフォールバックlength/isEmpty/charCodeAt/concat/+をstring-like正規化で実装
    • Interpreter: 比較/加算はstring-like正規化を適用メソッドは後続で最小追補があれば対応
    • 例: encoding_min/regex_min/toml_min/path_min で回帰確認
  2. tools/pyc: IR→Nyashの反映強化return/If/Assignを安定化、Strictスイッチ連動
  3. Strictスイッチ: tools/pycunsupported_nodes非空でErr、envでON/OFF
  4. CLI隠しフラグ --pyc/--pyc-nativeParser→Compiler→AOTの一本化導線
  5. 最小回帰VM/AOTの差分記録とdocs追補include/exportとpyc、Regex/Encoding/TOML/PathのAPI概要

Env Keyspyc

  • NYASH_PY_CODE: Pythonソース文字列Nyash-onlyパイプライン/Parser用
  • NYASH_PY_IR: IR(JSON)直接注入Rust雛形Compilerの確認用・オプション

目的: Handle-First + by-name を軸に、Python統合PyRuntimeBox/PyObjectBoxを汎用・安全に実装する。最適化は後段。さらに10.7のNyash-onlyトランスパイルC2pycを最小構成で立ち上げる。

ステータス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 で隠さない)