phase: 20.49 COMPLETE; 20.50 Flow+String minimal reps; 20.51 selfhost v0/v1 minimal (Option A/B); hv1-inline binop/unop/copy; docs + run_all + CURRENT_TASK -> 21.0

This commit is contained in:
nyash-codex
2025-11-06 15:41:52 +09:00
parent 2dc370223d
commit 77d4fd72b3
1658 changed files with 6288 additions and 2612 deletions

View File

@ -42,10 +42,10 @@ ExternCallenv.*)と println 正規化: `docs/reference/runtime/externcall.m
- 詳細: `docs/guides/operator-boxes.md`
開発モードと既定
- `nyash --dev script.nyash` で開発向け既定AST using ON / Operator Boxes 観測ON / 診断の最小ONを一括で有効化できます。`nyash script.nyash` は本番相当(静かで安定)。
- `nyash --dev script.hako` で開発向け既定AST using ON / Operator Boxes 観測ON / 診断の最小ONを一括で有効化できます。`nyash script.hako` は本番相当(静かで安定)。
- ワンコマンドの dev ショートカットも引き続き利用できます(`tools/opbox-json.sh` / `tools/opbox-quick.sh`)。
- using ガード: 同じファイルの重複 importまたは alias の再バインド)はエラーになり、行番号付きで通知されます。
- 例: `using: duplicate import of '<canon_path>' at file.nyash:12 (previous alias 'X' first seen at line 5)`
- 例: `using: duplicate import of '<canon_path>' at file.hako:12 (previous alias 'X' first seen at line 5)`
- 重複を削除/統合して解消してください。
Phase15202509アップデート
@ -67,7 +67,7 @@ Phase15202509アップデート
プロファイル(クイック)
- `--profile dev` → マクロONstrict、PyVM 開発向けの既定を適用(必要に応じて環境で上書き可)
- `--profile lite` → マクロOFF の軽量実行
- 例: `$NYASH_BIN --profile dev --backend vm apps/tests/ternary_basic.nyash`
- 例: `$NYASH_BIN --profile dev --backend vm apps/tests/ternary_basic.hako`
## 目次
- [Self-Hosting自己ホスト開発](#self-hosting)
@ -76,7 +76,7 @@ Phase15202509アップデート
<a id="self-hosting"></a>
## 🧪 Self-Hosting自己ホスト開発
- ガイド: `docs/how-to/self-hosting.md`
- 最小E2E: `$NYASH_BIN --backend vm apps/selfhost-minimal/main.nyash`
- 最小E2E: `$NYASH_BIN --backend vm apps/selfhost-minimal/main.hako`
- スモーク: `bash tools/jit_smoke.sh` / `bash tools/selfhost_vm_smoke.sh`
- Makefile: `make run-minimal`, `make smoke-selfhost`
@ -93,7 +93,7 @@ MIR注記: Core13 最小カーネルは既定で有効NYASH_MIR_CORE13=1
```bash
# NyashソースからネイティブバイナリへCraneliftが必要
cargo build --release --features cranelift-jit
./tools/build_aot.sh program.nyash -o app # ネイティブEXE
./tools/build_aot.sh program.hako -o app # ネイティブEXE
./app # スタンドアロン実行!
```
@ -163,7 +163,7 @@ Phase15自己ホスト期: ASTインタープリタは任意featureで
### 1. **インタープリターモード** (開発用)
```bash
$NYASH_BIN program.nyash
$NYASH_BIN program.hako
```
- 即座に実行
- 完全なデバッグ情報
@ -172,11 +172,11 @@ $NYASH_BIN program.nyash
### 2. **VMモード既定は PyVMレガシーは任意**
```bash
# 既定: PyVM ハーネスpython3 必要)
$NYASH_BIN --backend vm program.nyash
$NYASH_BIN --backend vm program.hako
# レガシー Rust VM を使う場合
cargo build --release --features vm-legacy
$NYASH_BIN --backend vm program.nyash
$NYASH_BIN --backend vm program.hako
```
- 既定vm-legacy OFF: MIR(JSON) を出力して `tools/pyvm_runner.py` で実行
- レガシー VM: インタープリター比で 13.5x(歴史的実測)。比較・検証用途で維持
@ -187,7 +187,7 @@ $NYASH_BIN --backend vm program.nyash
# 事前ビルドCranelift
cargo build --release --features cranelift-jit
./tools/build_aot.sh program.nyash -o myapp
./tools/build_aot.sh program.hako -o myapp
./myapp # スタンドアロン実行!
```
- 依存関係ゼロ
@ -203,13 +203,13 @@ cargo build --release -p nyash-llvm-compiler && cargo build --release --features
NYASH_LLVM_USE_HARNESS=1 \
NYASH_NY_LLVM_COMPILER=target/release/ny-llvmc \
NYASH_EMIT_EXE_NYRT=target/release \
$NYASH_BIN --backend llvm --emit-exe myapp program.nyash
$NYASH_BIN --backend llvm --emit-exe myapp program.hako
./myapp
# あるいは .o を出力して手動リンク
NYASH_LLVM_USE_HARNESS=1 \
NYASH_NY_LLVM_COMPILER=target/release/ny-llvmc \
$NYASH_BIN --backend llvm program.nyash \
$NYASH_BIN --backend llvm program.hako \
-D NYASH_LLVM_OBJ_OUT=$PWD/nyash_llvm_temp.o
cc nyash_llvm_temp.o -L crates/nyrt/target/release -Wl,--whole-archive -lnyrt -Wl,--no-whole-archive -lpthread -ldl -lm -o myapp
./myapp
@ -217,13 +217,13 @@ cc nyash_llvm_temp.o -L crates/nyrt/target/release -Wl,--whole-archive -lnyrt -W
簡易スモークテストVM と EXE の出力一致確認):
```bash
tools/smoke_aot_vs_vm.sh examples/aot_min_string_len.nyash
tools/smoke_aot_vs_vm.sh examples/aot_min_string_len.hako
```
### LLVM バックエンドの補足
- Python llvmlite を使用します。Python3 + llvmlite の用意と `ny-llvmc` のビルド(`cargo build -p nyash-llvm-compiler`)が必要です。`LLVM_SYS_180_PREFIX` は不要です。
- `NYASH_LLVM_OBJ_OUT`: `--backend llvm` 実行時に `.o` を出力するパス。
- 例: `NYASH_LLVM_OBJ_OUT=$PWD/nyash_llvm_temp.o $NYASH_BIN --backend llvm apps/ny-llvm-smoke/main.nyash`
- 例: `NYASH_LLVM_OBJ_OUT=$PWD/nyash_llvm_temp.o $NYASH_BIN --backend llvm apps/ny-llvm-smoke/main.hako`
- 削除された `NYASH_LLVM_ALLOW_BY_NAME=1`: すべてのプラグイン呼び出しがmethod_idベースに統一。
- LLVMバックエンドは性能と型安全性のため、method_idベースのプラグイン呼び出しのみ対応。
@ -250,7 +250,7 @@ RUST_BACKTRACE = "1"
[tasks]
# llvmlite ハーネスCLI をビルドLLVM_SYS_180_PREFIX不要
build_llvm = "cargo build --release -p nyash-llvm-compiler && cargo build --release --features llvm"
smoke_obj_array = "NYASH_LLVM_USE_HARNESS=1 NYASH_NY_LLVM_COMPILER={root}/target/release/ny-llvmc NYASH_LLVM_OBJ_OUT={root}/nyash_llvm_temp.o $NYASH_BIN --backend llvm apps/ny-llvm-smoke/main.nyash"
smoke_obj_array = "NYASH_LLVM_USE_HARNESS=1 NYASH_NY_LLVM_COMPILER={root}/target/release/ny-llvmc NYASH_LLVM_OBJ_OUT={root}/nyash_llvm_temp.o $NYASH_BIN --backend llvm apps/ny-llvm-smoke/main.hako"
```
実行:
@ -267,12 +267,12 @@ $NYASH_BIN --run-task smoke_obj_array
### ちいさなENVまとめVM vs LLVM ハーネス)
- VM 実行: 追加ENVなしでOK。
- 例: `$NYASH_BIN --backend vm apps/tests/ternary_basic.nyash`
- 例: `$NYASH_BIN --backend vm apps/tests/ternary_basic.hako`
- LLVM ハーネス実行: 下記3つだけ設定してね。
- `NYASH_LLVM_USE_HARNESS=1`
- `NYASH_NY_LLVM_COMPILER=$NYASH_ROOT/target/release/ny-llvmc`
- `NYASH_EMIT_EXE_NYRT=$NYASH_ROOT/target/release`
- 例: `NYASH_LLVM_USE_HARNESS=1 NYASH_NY_LLVM_COMPILER=target/release/ny-llvmc NYASH_EMIT_EXE_NYRT=target/release $NYASH_BIN --backend llvm apps/ny-llvm-smoke/main.nyash`
- 例: `NYASH_LLVM_USE_HARNESS=1 NYASH_NY_LLVM_COMPILER=target/release/ny-llvmc NYASH_EMIT_EXE_NYRT=target/release $NYASH_BIN --backend llvm apps/ny-llvm-smoke/main.hako`
### DebugHub かんたんガイド
- 有効化: `NYASH_DEBUG_ENABLE=1`
@ -294,13 +294,13 @@ $NYASH_BIN --run-task smoke_obj_array
基本Cranelift AOT
```bash
$NYASH_BIN --build hako.toml \
--app apps/egui-hello-plugin/main.nyash \
--app apps/egui-hello-plugin/main.hako \
--out app_egui
```
主なオプション(最小)
- `--build <path>`: `hako.toml` の場所(互換: `nyash.toml`
- `--app <file>`: エントリ `.nyash`
- `--app <file>`: エントリ `.hako`
- `--out <name>`: 出力EXE名既定: `app`/`app.exe`
- `--build-aot cranelift|llvm`(既定: cranelift
- `--profile release|debug`(既定: release
@ -314,7 +314,7 @@ $NYASH_BIN --build hako.toml \
## 📊 **パフォーマンスベンチマーク**
実世界ベンチマーク結果 (ny_bench.nyash)
実世界ベンチマーク結果 (ny_bench.hako)
```
モード | 時間 | 相対速度
@ -409,8 +409,8 @@ cd nyash
cargo build --release --features cranelift-jit
# 最初のプログラムを実行
echo 'print("Hello Nyash!")' > hello.nyash
$NYASH_BIN hello.nyash
echo 'print("Hello Nyash!")' > hello.hako
$NYASH_BIN hello.hako
```
### Windows
@ -422,7 +422,7 @@ cargo xwin build --target x86_64-pc-windows-msvc --release
# WindowsでのネイティブEXEAOTビルドCranelift と MSYS2/WSL が必要)
cargo build --release --features cranelift-jit
powershell -ExecutionPolicy Bypass -File tools\build_aot.ps1 -Input examples\aot_min_string_len.nyash -Out app.exe
powershell -ExecutionPolicy Bypass -File tools\build_aot.ps1 -Input examples\aot_min_string_len.hako -Out app.exe
./app.exe
```