# Nyash言語と実行モデル——Box‑First設計と二系統実行(PyVM/LLVM) 著者: Nyash Project 要旨 NyashはBox‑First設計(Everything is Box)を採用し、birth/init/pack↔finiの対称的メモリ管理、プラグインABI、そして実行系の二系統(PyVM/LLVM)で開発・配布を成り立たせる。本稿ではPhase‑15での現実的な運用範囲として、PyVM(意味論基準)とLLVM(PHI合成・AOT/EXE)に評価を絞り、Boxモデルと実行責務の分担設計を示す。 ## 1. はじめに Boxを言語の第一級抽象として採用し、型・所有・リソース・ABIを単一のメンタルモデルで統一する。設計の簡素さを保ちながら現実的な配布物を得るため、実装コストの高い経路(JIT/Interpreter)はPhase‑15では補助に留め、PyVM/LLVMの二系統を強化した。 ## 2. 言語設計(Box‑First) - Boxモデル: 値・モジュール・リソースの統一表現 - 対称メモリ: birth/init/pack と fini による決定的解放(将来GCオン/オフ両立へ拡張可能) - プラグインABI: TypeBox/BID‑FFI(`docs/reference/plugin-system/`)での安定相互運用 - 例外と修飾子(将来含む): Block + Modifier の方向性(詳細は別稿) ## 3. 実行モデル(二系統) - PyVM(基準): 短絡やtruthy規約を含む意味論確認。仕様差検出・パリティ基盤 - LLVM(配布): AOT/EXE生成、PHI合成、IRダンプ/トレース - 責務分担: - MIRはPHI‑off(合流はエッジコピー) - LLVMがブロック先頭でPHI合成(typed incoming) - PyVMは意味論の参照実装、LLVMは配布物と性能の源泉 ## 4. ケーススタディ - 文字列/配列/MapなどのBoxメソッド(BoxCall)での一貫API - プラグイン連携(ファイル/パス等)とABI境界の単純化 - 短絡・分岐合流でのパリティ(PyVM=意味, LLVM=PHI合成)確認 ## 5. 評価計画(v0) - パリティ: `tools/parity.sh --lhs pyvm --rhs llvmlite apps/tests/CASE.nyash` - 性能: LLVM実行時間/起動時間/メモリ(PyVMは意味論sanity) - トレース: `NYASH_LLVM_TRACE_PHI=1`, `NYASH_LLVM_DUMP_IR=...` ## 6. 関連研究 OOP/Actor/Capability/Plugin指向設計と実行系(LLVM/JVM/WASM)との比較。Nyashの特徴は「Box‑First × 実行責務の分離(PyVM=意味, LLVM=生成)」にある。 ## 7. 結論 Box‑First設計と二系統実行の分担により、複雑性を爆発させずに言語の実働ラインを維持できた。次段階ではLoopFormやJITの再統合を段階的に検討する。 ### 再現手順 - LLVMハーネス: `NYASH_LLVM_USE_HARNESS=1 ./target/release/nyash --backend llvm apps/tests/CASE.nyash` - パリティ: `tools/parity.sh --lhs pyvm --rhs llvmlite apps/tests/CASE.nyash` - ビルド(PDF): `tools/papers/build.sh b-jp` ### キーワード Box‑First, 実行モデル, PHI合成, LLVM, PyVM, プラグインABI