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:
44
README.ja.md
44
README.ja.md
@ -42,10 +42,10 @@ ExternCall(env.*)と 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)`
|
||||
- 重複を削除/統合して解消してください。
|
||||
|
||||
Phase‑15(2025‑09)アップデート
|
||||
@ -67,7 +67,7 @@ Phase‑15(2025‑09)アップデート
|
||||
プロファイル(クイック)
|
||||
- `--profile dev` → マクロON(strict)、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 @@ Phase‑15(2025‑09)アップデート
|
||||
<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注記: Core‑13 最小カーネルは既定で有効(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 @@ Phase‑15(自己ホスト期): 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でのネイティブEXE(AOT)ビルド(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
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user