## 🎉 完了項目 - ✅ plugin_box_legacy.rs削除(7.7KB、参照ゼロ確認済み) - ✅ REMOVEDコメント整理(encode.rs簡潔化) - ✅ venv削除(143MB節約、.gitignoreは既存) - ✅ llvm_legacyスタブ化(8KB、compile_error!による安全化) ## 🏆 成果 - **リポジトリサイズ改善**: 151MB削減 - **コード整理**: レガシーコード安全にアーカイブ - **プラグインファースト**: StrictPluginFirst継続動作 ## ✅ 検証完了 - cargo build --release --features llvm (警告のみ、エラーなし) - LLVMハーネス実行: print出力正常 - プラグイン動作: StringBox等正常動作 codex先生の戦略に従った安全な段階的削除を実行 Co-Authored-By: codex <noreply@anthropic.com>
2.4 KiB
2.4 KiB
ExternCall — Runtime Interfaces (env.*)
Overview
- ExternCall represents calls to host-provided interfaces, addressed by an interface name and method, e.g.
env.console.log. - In Nyash, source-level
print/printlnnormalize to an ExternCall targeting the console interface.
Normalization of println/print
- Builder/Optimizer rewrites language-level printing to ExternCall:
println(x)orConsoleBox.println(x)→ExternCall("env.console", "log", [x])
- Rationale: unifies backends and keeps ConsoleBox for other roles (vtable optimization, advanced console APIs).
Backend Behavior
- LLVM/AOT (EXE-first):
env.console.logis normalized in the LLVM builder to kernel exports and links statically.- Primary mapping uses pointer-API when possible to avoid handle churn:
nyash.console.log(i8*) -> i64- Fallback to handle-API helpers (
nyash.string.to_i8p_h) if only a handle is available.
- Runtime result line: the kernel prints
Result: <code>afterny_main()returns. SetNYASH_NYRT_SILENT_RESULT=1to suppress for tests.
- PyVM:
- Accepts
env.console.log/warn/errorand writes to stdout (MVP). Return is0when a destination is present.
- Accepts
- JIT:
- Host-bridge directly prints the first argument to stdout for
env.console.logminimal parity.
- Host-bridge directly prints the first argument to stdout for
MIR JSON v0 Encoding
- Instruction shape:
{ "op": "externcall", "func": "env.console.log", "args": [<vid>], "dst": <vid|null>, "dst_type": "i64"? }
- Builder may also emit
"func": "nyash.console.log"in some paths; both are accepted by backends. The LLVM builder mapsenv.console.*tonyash.console.*automatically.
Key Fields (JSON v0, minimal)
op: literal"externcall".func: fully qualified name. Preferred:"env.console.log". Accepted:"nyash.console.log".args: value-ids array (each is an integer referencing a producer).dst: optional value-id to store result; may be null when ignored.dst_type(optional): backend hint. For console methods,"i64"is used whendstis present.
Return Value Convention
- Console methods return
i64status (typically 0). Most user code ignores it; whendstis set, backends materialize0.
Guidance
- Use
print/printlnin Nyash source; the toolchain normalizes to ExternCall. - Prefer exit code assertions in EXE-first tests. If you must compare stdout, set
NYASH_NYRT_SILENT_RESULT=1to hide NyRT'sResult:line.