feat: プラグインパスをOS非依存に更新(.so拡張子削除)

- nyash.tomlからすべての.so拡張子を削除
- plugin_loader_v2のresolve_library_pathが自動的に適切な拡張子を追加
  - Linux: .so
  - Windows: .dll
  - macOS: .dylib
- クロスプラットフォーム対応の準備完了
This commit is contained in:
Moe Charm
2025-08-29 23:11:21 +09:00
parent 1eee62a8ea
commit 8e58942726
27 changed files with 701 additions and 159 deletions

View File

@ -1,6 +1,6 @@
# 🎯 CURRENT TASK - 2025-08-29Phase 10.1 革新的転換
# 🎯 CURRENT TASK - 2025-08-29Phase 10.5 転回JIT分離=EXE専用
Phase 10.10 は完了DoD確認済**重大な発見**:プラグインシステムを活用したJITEXE実現の道を発見!
Phase 10.10 は完了DoD確認済アーキテクチャ転回:JITは「EXE/AOT生成専用コンパイラ」、実行はVM一本に統一。
## 🚀 革新的発見プラグインBox統一化
@ -41,7 +41,7 @@ Phase 10.10 は完了DoD確認済。**重大な発見**:プラグイン
---
## 2025-08-29 PM3 再起動スナップショットStrict前倒し版)
## 2025-08-29 PM3 再起動スナップショットStrict/分離確定版)
### 現在の着地Strict準備済み
- InvokePolicy/Observe を導入し、Lowerer の分岐をスリム化
@ -57,13 +57,13 @@ Phase 10.10 は完了DoD確認済。**重大な発見**:プラグイン
- 特殊コメント(最小)
- `// @env KEY=VALUE`, `// @jit-debug`, `// @plugin-builtins`, `// @jit-strict`
### Strict モードFail-Fast / ノーフォールバック)
- 目的: 「VM=仕様 / JIT=高速実装」。JITで動かないJITのバグを即可視化
- 有効化: `// @jit-strict`(または `NYASH_JIT_STRICT=1`
### Strict/分離Fail-Fast / ノーフォールバック)
- 目的: 「VM=仕様 / JIT=コンパイル」。JITで未対応/フォールバックがあれば即コンパイル失敗
- 有効化: 実行はVM固定、JITは `--compile-native`AOTでのみ使用
- 仕様(現状)
- Lowerer/Engine: unsupported>0 がある関数はコンパイル中止fail-fast
- 実行: `NYASH_JIT_ONLY=1` と併用でフォールバック禁止(エラー)
- シム: 受け手解決は HandleRegistry 優先(`NYASH_JIT_ARGS_HANDLE_ONLY=1` 自動ON
- Lowerer/Engine: unsupported>0 または compile-phase fallback>0 でコンパイル中止
- 実行: JITディスパッチ既定OFFVMのみ。StrictはJITを常時JIT-only/handle-only相当で動かす
- シム: 受け手解決は HandleRegistry 優先(`NYASH_JIT_ARGS_HANDLE_ONLY=1`
### 再起動チェックリスト
- BuildCranelift有効: `cargo build --release -j32 --features cranelift-jit`
@ -164,17 +164,19 @@ cat jit_events.jsonl
- InvokePolicyPass新規: `src/jit/policy/invoke.rs` — plugin/hostcall/ANY の経路選択を一元化Lowerer から分離)
- Observe新規: `src/jit/observe.rs` — compile/runtime/trace 出力の統一(ガード/出力先/JSONスキーマ
### 今後のToDo優先度順
1) InvokePolicyPass の導入
- 目的: Lowerer 内の分岐を薄くし、経路選択を一箇所に固定read-only/allowlist/ANY fallbackを明確化
- DoD: length()/push/get/set の経路が policy 設定で一意に決まるcompile/runtimeのイベント差異が「設定」由来で説明可能
2) Observe の導入
- 目的: runtime/trace の出力有無を一箇所で制御、`NYASH_JIT_EVENTS(_COMPILE/_RUNTIME)` の挙動を統一
- DoD: `NYASH_JIT_EVENTS=1` で compile/runtime が必ず出る。PATH 指定時はJSONLに確実追記
3) String/Array の誤ラベル最終解消
- 型不明時は `Any.length` としてcompile-phaseに出すまたは plugin_invoke の type_id を runtime で必ず記録
4) f64戻り/ハンドル返却tag=8の仕上げ
- `NYASH_JIT_PLUGIN_F64` なしの自動選択、handle返却シムの導入tag=8
### 今後のToDo優先度順:分離/AOT
1) 実行モード分離CLI/Runner
- 目的: `nyash file.nyash` は常にVM実行。`--compile-native -o app` でEXE生成。
- DoD: VM内のJITディスパッチは既定OFF。StrictはJIT=AOTで常時Fail-Fast。
2) AOTパイプライン確立obj→exe
- 目的: Lower→CLIF→OBJ→`ny_main`+`libnyrt.a`リンクの一発通し
- DoD: `tools/build_aot.sh` の内製依存をCLIサブコマンド化。Windows/macOSは後段。
3) AOT箱の追加
- AotConfigBox: 出力先/ターゲット/リンクフラグ/プラグイン探索を管理し、apply()でenv同期
- AotCompilerBox: `compile(file, out)` でOBJ/EXEを生成、events/結果文字列を返す
4) 観測の統一
- 目的: `NYASH_JIT_EVENTS=1` で compile/runtime が必ず出力。PATH指定はJSONL追記
- DoD: `jit::observe` 経由へ集約
### 受け入れ条件DoD
- compile-phase: `plugin:*` のイベントが関数ごとに安定
@ -192,10 +194,10 @@ cat jit_events.jsonl
- GC Switchable RuntimeGcConfigBox/ Unified DebugDebugConfigBox
- JitPolicyBoxallowlist/presets/ HostCallのRO運用events連携
- CIスモーク導入runtime/compile-events/ 代表サンプル整備
- 🔧 DoingPhase 10.1 新計画
- NewBox→birthのJIT loweringString/Integer、handleベース
- AOT最小EXE: libnyrt.aシム + ny_main ドライバ + build_aot.sh 整備
- リファクタリング作業は継続core_hostcall.rs完了
- 🔧 DoingPhase 10.5 分離/AOT
- VM実行の既定固定JITディスパッチは既定OFF
- AOT最小EXE: libnyrt.aシム + ny_main ドライバ + build_aot.sh → CLI化
- リファクタリング継続core_hostcall.rs→observe/policy統合
- ⏭️ NextPhase 10.1 実装)
- Week1: 主要ビルトインBoxの移行RO中心
- Week2: 静的同梱基盤の設計type_id→nyplug_*_invoke ディスパッチ)