Files
hakorune/docs/development/runtime/ENV_VARS.md
nyash-codex 864a94d013 feat(phase-21.8+25): Complete imports resolution + Ring0/Ring1 numeric ABI design
Phase 21.8 完了 (imports resolution):
-  using nyash.core.numeric.matrix_i64 as MatI64 完全対応
-  hakorune_emit_mir.sh で imports 抽出・MirBuilder に配線
-  MatI64/IntArrayCore の静的参照解決が安定動作
-  matmul_core ベンチ MIR 生成成功 (VM/LLVM 両対応)

Phase 25 設計完了 (Ring0/Ring1 + numeric ABI):
- 🎯 Ring0/Ring1 責務分離を明文化 (Rust Freeze Policy 具体化)
- 🎯 Call/ExternCall 明確な分離設計
  - Call: Ring1 Hako 関数 (numeric core 等)
  - ExternCall: Ring0 intrinsic (rt_mem_* 等の FFI のみ)
- 🎯 BoxCall → Call 変換方針確定 (AotPrep で実施)
- 🎯 MatI64.mul_naive を NyNumericMatI64.mul_naive に分離
  (System Hakorune subset で完全実装済み)

実装:
-  AotPrepNumericCoreBox 診断パス実装 (NYASH_AOT_NUMERIC_CORE=1)
-  numeric ABI ドキュメント整備 (NUMERIC_ABI.md)
-  System Hakorune subset 定義 (system-hakorune-subset.md)
-  IntArrayCore/MatI64 仕様固定 (lang/src/runtime/numeric/README.md)
-  ENV_VARS.md に NYASH_AOT_NUMERIC_CORE トグル追記

今後のタスク:
- BoxCall(MatI64) → Call(NyNumericMatI64) 変換実装 (opt-in)
- IntArrayCore の numeric core 整備
- matmul_core スモークテスト (NYASH_AOT_NUMERIC_CORE=0/1 両対応)

🎉 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-14 20:19:00 +09:00

144 lines
8.0 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.

# Nyash Environment Variables (管理棟ガイド)
本ドキュメントは Nyash の環境変数を用途別に整理し、最小限の運用セットを提示します。`nyash.toml``[env]` で上書き可能(起動時に適用)。
- 例: `nyash.toml`
```
[env]
NYASH_JIT_THRESHOLD = "1"
NYASH_CLI_VERBOSE = "1"
NYASH_DISABLE_PLUGINS = "1"
```
起動時に `nyash``[env]` の値を `std::env` に適用しますsrc/config/env.rs
## コア運用セット(最小)
- NYASH_CLI_VERBOSE: CLI の詳細ログ("1" で有効)
- NYASH_DISABLE_PLUGINS: 外部プラグインを無効化CI/再現性向上)
- NYASH_BOX_FACTORY_POLICY: Box生成の優先順位制御Phase 21.4推奨ENV
- `builtin_first`: Builtin優先Analyzer推奨、デフォルト
- `strict_plugin_first`: Plugin最優先開発・本番環境
- `compat_plugin_first`: Plugin > Builtin > User互換モード
## JIT共通
- NYASH_JIT_THRESHOLD: JIT 降下開始の閾値(整数)
- NYASH_JIT_EXEC: JIT 実行("1" で有効)
- NYASH_JIT_HOSTCALL: ホストコール経路の有効化
- NYASH_JIT_PHI_MIN: PHI(min) 合流の最適化ヒント
- NYASH_JIT_NATIVE_F64: f64 のネイティブ ABI 利用(実験的)
- NYASH_JIT_NATIVE_BOOL: bool のネイティブ ABI 利用(実験的)
- NYASH_JIT_ABI_B1: B1 返り値 ABI を要求(実験的)
- NYASH_JIT_RET_B1: bool 返り値ヒント(実験的)
## JIT トレース/ダンプ
- NYASH_JIT_DUMP: JIT IR/CFG ダンプ("1" で有効)
- NYASH_JIT_DOT: DOT 出力先ファイル指定でダンプ暗黙有効
- NYASH_JIT_TRACE_BLOCKS: ブロック入場ログ
- NYASH_JIT_TRACE_BR: 条件分岐ログ
- NYASH_JIT_TRACE_SEL: select のログ
- NYASH_JIT_TRACE_RET: return 経路のログ
- NYASH_JIT_EVENTS_COMPILE: コンパイルイベント JSONL を出力
- NYASH_JIT_EVENTS_PATH: イベント出力パス(既定: events.jsonl
## Async/Runtime
- NYASH_AWAIT_MAX_MS: await の最大待機ミリ秒(既定 5000
- (今後)タスク/スケジューラ関連の変数は `runtime.*` 名で集約予定
## CLI Script Args改行・特殊文字の安全輸送
- NYASH_SCRIPT_ARGS_JSON: `--` 以降のスクリプト引数JSON配列。標準経路。
- NYASH_SCRIPT_ARGS_HEX_JSON: 上記のHEX版各要素をUTF8→16進文字列化。VMは HEX→JSON→ARGV の順で復元を試みる。
- NYASH_ARGV: 互換目的のJSON配列最終フォールバック
メモ: 改行・特殊文字を含む長文を `--source-file <path> <text>` で渡す場合も HEX 経路で安全に輸送される。
## Debug/Tracing開発用の軽量トグル
- HAKO_TRACE_EXECUTION: 実行経路の可視化("1" で有効)
- 例: `[trace] executor: hv1_inline (rust)` / `[trace] executor: hakovm (hako)` / `[trace] executor: core (rust)`
- 出力先: 原則 stderrHakovm は stdout。テストランナーは numeric rc 抽出時に非数値行を無視します。
- HAKO_VERIFY_SHOW_LOGS: verify_v1_inline_file() のログ透過("1" で有効)
- hv1 inline 実行の全出力を stderr に表示し、数値 rc は別途抽出します。
- HAKO_DEBUG: 開発向け一括トグル("1" で `HAKO_TRACE_EXECUTION=1``HAKO_VERIFY_SHOW_LOGS=1` を自動有効化)
- 実装箇所: tools/smokes/v2/lib/test_runner.sh のデバッグ便宜機能
## FileBox Providerコア/プラグイン切替)
- NYASH_FILEBOX_MODE: `auto|core-ro|plugin-only`
- auto既定: プラグインがあれば PluginFileIo、無ければ CoreRoFileIo
- core-ro: 常にコアの readonly 実装を使用Analyzer/CI 向け)
- plugin-only: プラグイン必須(無ければ FailFast
- NYASH_DISABLE_PLUGINS / HAKO_DISABLE_PLUGINS: `1` でプラグイン無効(結果として corero 相当)
## LLVM/AOT
- NYASH_LLVM_FEATURE: LLVM機能選択"llvm"(default) または "llvm-inkwell-legacy"
- LLVM_SYS_180_PREFIX: LLVM 18 のパス指定llvm-inkwell-legacy使用時のみ必要
- NYASH_LLVM_VINVOKE_RET_SMOKE, NYASH_LLVM_ARRAY_RET_SMOKE: CI 用スモークトグル
- NYASH_LLVM_OBJ_OUT: LLVM経路で生成する `.o` の出力パスRunner/スクリプトが尊重)
- NYASH_AOT_OBJECT_OUT: AOT パイプラインで使用する `.o` 出力ディレクトリ/パス
- NYASH_LLVM_USE_HARNESS: "1" で llvmlite ハーネス経路を有効化MIR(JSON)→Python→.ll→llc→.o
## AotPrep / Numeric CorePhase 25 実験用)
- NYASH_AOT_COLLECTIONS_HOT: Array/Map boxcall を externcall に書き換えるホットパスCollectionsHot パスを有効化)
- NYASH_AOT_NUMERIC_CORE: 数値系 BoxCallMatI64 / IntArrayCore 等)の診断パスを有効化(`AotPrepNumericCoreBox`)。現状はログ出力のみで MIR は変更しない(将来の BoxCall→Call 降ろし用の足場)。
- NYASH_AOT_NUMERIC_CORE_TRACE: 上記 numeric core パスの詳細トレース("1" で `mul_naive/at/set` など候補 BoxCall を stderr にログ出力)
### LLVM Feature 詳細
- **llvm** (デフォルト): llvmlite Python ハーネス使用、LLVM_SYS_180_PREFIX不要
- **llvm-inkwell-legacy**: Rust inkwell bindings使用、LLVM_SYS_180_PREFIX必要
## 管理方針(提案)
- コード側: `src/config/env.rs` を単一の集約窓口にJIT は `jit::config` に委譲)。
- ドキュメント側: 本ファイルを単一索引にし、用途別に追加。
- 設定ファイル: `nyash.toml``[env]` で標準化(ブランチ/CI での一括制御)。
- 将来: `nyash env print/set` の CLI サブコマンドを追加し、実行前に `.env`/toml 反映と検証を行う。
## MIR Cleanup (Phase 11.8) 用トグル(段階導入)
- NYASH_MIR_ARRAY_BOXCALL: ArrayGet/Set → BoxCall 変換を有効化
- NYASH_MIR_REF_BOXCALL: RefGet/Set → BoxCall 変換を有効化
- NYASH_MIR_CORE13: Core13 セットの一括有効(将来拡張)
- NYASH_MIR_CORE13_PURE: Core13 純化モード("1" で有効。最終MIRは13命令のみ許可され、Load/Store などは `env.local.get/set``new``env.box.new` 経由へ強制正規化。禁制命令が残存するとコンパイルエラーで早期失敗。
## 非推奨ENV変数Phase 21.4で段階的削除)
以下の環境変数は **非推奨** です。新しい統一ENV変数を使用してください
### ❌ NYASH_USE_PLUGIN_BUILTINS削除予定
- **理由**: 自動設定による混乱、新しいポリシーシステムで代替
- **代替**: `NYASH_BOX_FACTORY_POLICY=strict_plugin_first` または `compat_plugin_first`
- **状態**: Phase 21.4で自動設定を削除、警告メッセージを表示
- **完全削除**: Phase 22で参照も含めて完全削除予定
### ❌ NYASH_PLUGIN_OVERRIDE_TYPES削除予定
- **理由**: 自動設定による不整合、FactoryPolicy で統一管理
- **代替**: `NYASH_BOX_FACTORY_POLICY` で全体的な優先順位を制御
- **状態**: Phase 21.4で自動設定を削除、警告メッセージを表示
- **完全削除**: Phase 22で参照も含めて完全削除予定
### 移行ガイド
#### Before (非推奨)
```bash
# ❌ 古い方法(自動設定に依存)
NYASH_USE_PLUGIN_BUILTINS=1 ./target/release/nyash program.hako
NYASH_PLUGIN_OVERRIDE_TYPES="ArrayBox,MapBox" ./target/release/nyash program.hako
```
#### After (推奨)
```bash
# ✅ 新しい方法(統一ポリシー)
# Analyzer環境Builtin優先
NYASH_BOX_FACTORY_POLICY=builtin_first ./target/release/nyash program.hako
# 開発・本番環境Plugin優先
NYASH_BOX_FACTORY_POLICY=strict_plugin_first ./target/release/nyash program.hako
# プラグイン完全無効CI/検証)
NYASH_DISABLE_PLUGINS=1 ./target/release/nyash program.hako
```
#### FileBox専用制御
```bash
# ✅ FileBox providerの明示的制御
NYASH_FILEBOX_MODE=auto ./target/release/nyash program.hako # 自動選択(デフォルト)
NYASH_FILEBOX_MODE=core-ro ./target/release/nyash program.hako # Builtin core-ro固定
NYASH_FILEBOX_MODE=plugin-only ./target/release/nyash program.hako # Plugin必須Fail-Fast
```