Files
hakorune/docs/how-to/self-hosting.md
nyash-codex 510f4cf523 builder/vm: stabilize json_lint_vm under unified calls
- Fix condition_fn resolution: Value call path + dev safety + stub injection
- VM bridge: handle Method::birth via BoxCall; ArrayBox push/get/length/set direct bridge
- Receiver safety: pin receiver in method_call_handlers to avoid undefined use across blocks
- Local vars: materialize on declaration (use init ValueId; void for uninit)
- Prefer legacy BoxCall for Array/Map/String/user boxes in emit_box_or_plugin_call (stability-first)
- Test runner: update LLVM hint to llvmlite harness (remove LLVM_SYS_180_PREFIX guidance)
- Docs/roadmap: update CURRENT_TASK with unified default-ON + guards

Note: NYASH_DEV_BIRTH_INJECT_BUILTINS=1 can re-enable builtin birth() injection during migration.
2025-09-28 12:19:49 +09:00

1.8 KiB
Raw Blame History

SelfHosting — HowTo前提→手順→検証

目的

  • Ny → MIR → VM/JIT の自己ホスト経路を最短手順で動かす。

前提

  • Ruststable: cargo --version
  • Bash + ripgrepWSL/Unix 推奨)

手順v2 推奨)

  1. ビルド
    • 実行: cargo build --release
  2. 最小 E2EVM、plugins 無効)
    • 実行: NYASH_DISABLE_PLUGINS=1 ./target/release/nyash --backend vm apps/selfhost-minimal/main.nyash
  3. クイックスモークVM軸
    • 実行: tools/smokes/v2/run.sh --profile quick
  4. プラグイン(任意・動的)
    • 実行: tools/smokes/v2/run.sh --profile plugins
  5. LLVM 統合任意・AOT/ハーネス)
    • 実行: tools/smokes/v2/run.sh --profile integration

最小 Ny 実行器MirVmMin

  • 目的: Ny だけで MIR(JSON v0) のごく最小セットconst/binop/compare/retを実行できることを確認。
  • 実行例VM:
    • ./target/release/nyash --backend vm apps/selfhost/vm/mir_min_entry.nyash
    • 引数で MIR(JSON) を渡すことも可能(単一文字列)。簡単な例は apps/selfhost/vm/mir_min_entry.nyash のコメントを参照。

検証

  • 期待出力: Result: 0selfhostminimal
  • スモーク:全成功(非 0 は失敗)

便利フラグ

  • NYASH_DISABLE_PLUGINS=1 外部プラグイン無効化
  • NYASH_CLI_VERBOSE=1 実行ログ詳細
  • NYASH_USING_DYLIB_AUTOLOAD=1 using.dylib 自動ロード(開発用)

トラブルシュート

  • ハング: timeout 15s ... を付与、NYASH_CLI_VERBOSE=1 で詳細
  • プラグインエラー: まず NYASH_DISABLE_PLUGINS=1
  • ルート相対パスで実行/cargo clean -p nyash で個別クリーン

関連

  • CI: .github/workflows/smoke.ymlJSON/JUnit 出力は v2 ランナーで取得可能)
  • マージ運用: docs/development/engineering/merge-strategy.md