smokes: add JSON nested/invalid cases; force VM backend; temp nyash.toml with json_native package for resolution

This commit is contained in:
Selfhosting Dev
2025-09-26 00:38:14 +09:00
parent 6ce06501e1
commit b3a96faccb
30 changed files with 135 additions and 295 deletions

View File

@ -1,9 +0,0 @@
# Architecture Docs Moved
アーキテクチャの正本は `docs/reference/architecture/` へ集約しました。
- 入口: [../reference/architecture/](../reference/architecture/)
- 代表: [PHI and SSA](../reference/architecture/phi-and-ssa.md)
このディレクトリは互換のための案内のみ残しています。

View File

@ -1,7 +0,0 @@
# Moved: PHI and SSA
このドキュメントは再編により移動しました。
新しい場所: [../reference/architecture/phi-and-ssa.md](../reference/architecture/phi-and-ssa.md)
この stub は後方互換のために残しています。

View File

@ -1,8 +0,0 @@
# Moved: Blueprints
Blueprints は `development/design/blueprints/` に集約しました。
- 新しい場所: [../development/design/blueprints/](../development/design/blueprints/)
この stub は後方互換のために残しています。

View File

@ -1,7 +0,0 @@
# Moved: Strings Blueprint — UTF8 / Bytes
このドキュメントは再編により移動しました。
新しい場所: [../development/design/blueprints/strings-utf8-byte.md](../development/design/blueprints/strings-utf8-byte.md)
この stub は後方互換のために残しています。

View File

@ -1,6 +0,0 @@
# Moved: Comparison
比較記事は `docs/guides/comparison/` に移動しました。
- 代表: [nyash-vs-others.md](../guides/comparison/nyash-vs-others.md)

View File

@ -1,11 +0,0 @@
# Design Notes Moved
`docs/design/` の設計ノートは `docs/development/design/legacy/` に移動しました。
- 新しい場所: [../development/design/legacy/](../development/design/legacy/)
- よく参照されるページ:
- [flow-blocks.md](../development/design/legacy/flow-blocks.md)
- [using-loader-integration.md](../development/design/legacy/using-loader-integration.md)
このディレクトリは互換のための案内のみ残しています。

View File

@ -1,5 +0,0 @@
# Moved: Flow Blocks (Design Draft)
このドキュメントは再編により移動しました。
新しい場所: [../development/design/legacy/flow-blocks.md](../development/design/legacy/flow-blocks.md)

View File

@ -1,5 +0,0 @@
# Moved: Using → Loader Integration (Minimal)
このドキュメントは再編により移動しました。
新しい場所: [../development/design/legacy/using-loader-integration.md](../development/design/legacy/using-loader-integration.md)

View File

@ -1,7 +0,0 @@
# Examples moved
例は `docs/guides/examples/` に移動しました。
- 新しい場所: [../guides/examples/](../guides/examples/)
- 代表例: [http_result_patterns.md](../guides/examples/http_result_patterns.md)

View File

@ -1,5 +0,0 @@
# Moved: HTTP Result Patterns
このドキュメントは再編により移動しました。
新しい場所: [../guides/examples/http_result_patterns.md](../guides/examples/http_result_patterns.md)

View File

@ -1,127 +0,0 @@
# Nyash Ideas Repository - PostBootstrap 実装アイデア管理
**目的**: 機能追加ポーズ中に発想されたアイデアをPostBootstrap実装用に整理・保管
**原則**: 80/20ルール - 80%実装完了時の「残り20%」+新機能アイデア
## 📁 フォルダ構造
### `/tools/` - 開発ツール・支援システム
実装優先度順に配置
```
tools/
├── cax/ # C-ABI Explorer (高優先度・世界初)
├── macro-debugger/ # マクロ実行デバッガPhase 16関連
├── nyash-profiler/ # 実行プロファイラ
└── static-analyzer/ # 静的解析ツール
```
### `/language/` - 言語機能拡張
設計完了度順に配置
```
language/
├── concurrency/ # 並行性Box (設計完了・docs化済み)
├── flow-blocks/ # フロー演算子 (設計完了・docs化済み)
├── scope-reuse/ # スコープ演算子 (設計完了・docs化済み)
├── pure-functional-blocks.md # []純粋関数型ブロック vs {}通常ブロック (NEW!)
├── pattern-matching/ # パターンマッチング拡張
├── async-await/ # 非同期構文Sugar
└── metaprogramming/ # メタプログラミング機能
```
### `/runtime/` - ランタイム・VM改善
技術的重要度順に配置
```
runtime/
├── nyash-self-vm/ # Nyash自己実装VM (ChatGPT提案)
├── gc-improvements/ # GC最適化・切替可能性
├── jit-enhancements/ # JIT性能向上
└── memory-management/ # メモリ管理改善
```
### `/ecosystem/` - エコシステム・統合
実用性順に配置
```
ecosystem/
├── python-integration/ # Python統合・transpilation
├── vscode-extension/ # VSCode拡張
├── package-manager/ # パッケージマネージャ
└── documentation-tools/ # ドキュメント自動生成
```
### `/experimental/` - 実験的・研究用アイデア
```
experimental/
├── ai-collaboration/ # AI協働開発手法
├── academic-papers/ # 学術発表用実験
├── performance-research/ # 性能研究・ベンチマーク
└── future-concepts/ # 将来構想・ビジョン
```
## 🎯 管理ルール
### 新アイデア追加時
1. **適切なカテゴリに配置**
2. **README.md作成**(概要・優先度・実装見積もり)
3. **関連docs更新**(既存設計との統合性確認)
### 実装着手時
1. **Phase移行**: `docs/ideas/``docs/development/`
2. **実装計画**: ロードマップ・マイルストーン作成
3. **ブランチ作成**: `feature/idea-name` で開発開始
### 完成後
1. **docs統合**: 正式ドキュメントに昇格
2. **アイデア削除**: または `implemented/` フォルダに移動
## 📋 現在のアイデア一覧
### 🔥 高優先度PostBootstrap 即実装)
- **CAX (C-ABI Explorer)**: 革新的デバッグツール(世界初)
- **Pure Functional []Blocks**: 純粋関数型ブロック vs 通常{}ブロック (NEW!)
- **Nyash Self-VM**: Python/Rust VM統一化
- **Flow Blocks**: 設計完了、実装のみ
- **Concurrency Boxes**: Go超越の並行性
### ⭐ 中優先度Phase 16-17
- **Macro Revolution**: マクロシステム拡張
- **Python Integration**: transpilation + 相互運用
- **Static Analysis**: 型推論・最適化支援
### 💡 低優先度(将来構想)
- **Package Manager**: エコシステム成熟後
- **VSCode Extension**: 言語安定後
- **Academic Research**: 発表機会に応じて
## 🔄 更新プロセス
### Weekly Review
- 新アイデアの整理・分類
- 優先度見直し
- 重複・統合可能性検討
### Phase間Review
- 実装完了アイデアの整理
- 次Phase候補の選定
- ロードマップ更新
## 💭 アイデア品質基準
### High Quality (即実装候補)
- ✅ 技術的実現性: 明確な実装パス
- ✅ ユーザー価値: 具体的な問題解決
- ✅ Nyash親和性: 箱理論との整合性
- ✅ 独創性: 既存ツールにない価値
### Medium Quality (将来実装)
- ✅ 概念明確性: アイデアの核心が明確
- ⚠️ 実装詳細: 一部未確定要素あり
- ✅ 価値仮説: 実用性の仮説あり
### Low Quality (要再検討)
- ⚠️ 概念曖昧: アイデアが抽象的
- ❌ 技術困難: 実装パスが不明確
- ❌ 価値不明: 実用性が疑問
---
**Note**: このREADMEは、アイデア管理の指針として機能。新アイデア発想時は、必ずここを参照して適切な分類・記録を行う。

View File

@ -1,6 +0,0 @@
# Proposals Moved
提案(RFC)は `docs/development/proposals/` に集約しました。
- 新しい場所: [../development/proposals/](../development/proposals/)

View File

@ -1,5 +0,0 @@
# Moved: Concurrency — Box Model (Proposal)
この提案は再編により移動しました。
新しい場所: [../../development/proposals/concurrency/boxes.md](../../development/proposals/concurrency/boxes.md)

View File

@ -1,5 +0,0 @@
# Moved: Scope Reuse Blocks (MVP Proposal)
この提案は再編により移動しました。
新しい場所: [../development/proposals/scope-reuse.md](../development/proposals/scope-reuse.md)

View File

@ -1,5 +0,0 @@
# Moved: Unified Members Proposal
この提案は再編により移動しました。
新しい場所: [../development/proposals/unified-members.md](../development/proposals/unified-members.md)

View File

@ -4,9 +4,9 @@ This index points to the currently maintained architectural documents:
- Core Concepts: reference/architecture/nyash_core_concepts.md - Core Concepts: reference/architecture/nyash_core_concepts.md
- Execution Backends: reference/architecture/execution-backends.md - Execution Backends: reference/architecture/execution-backends.md
- Lowering Contexts: ../../design/LOWERING_CONTEXTS.md - Lowering Contexts: ../../development/design/legacy/LOWERING_CONTEXTS.md
- LLVM Layer Overview: ../../design/LLVM_LAYER_OVERVIEW.md - LLVM Layer Overview: ../../development/design/legacy/LLVM_LAYER_OVERVIEW.md
- VM Overview: vm.md - VM Overview: vm.md
- Cranelift AOT design: ../../design/backend-cranelift-aot-design.md - Cranelift AOT design: ../../development/design/legacy/backend-cranelift-aot-design.md
Note: Some long-form papers reside under `private/papers/reference/architecture/`. Note: Some long-form papers reside under `private/papers/reference/architecture/`.

View File

@ -4,5 +4,5 @@ For the full guide, see:
- execution-backends.md (legacy location kept up to date) - execution-backends.md (legacy location kept up to date)
Additional references: Additional references:
- ../../design/backend-llvm-implementation-guide.md - ../../development/design/legacy/backend-llvm-implementation-guide.md
- vm.md - vm.md

View File

@ -1,6 +0,0 @@
# Status/Golden moved
ゴールデン出力などのステータス関連ドキュメントは `docs/development/testing/golden/` へ移動しました。
- 新しい場所: [../development/testing/golden/](../development/testing/golden/)

View File

@ -1,6 +0,0 @@
# Tests moved
テスト関連のドキュメントは `docs/development/testing/` に移動しました。
- 新しい場所: [../development/testing/](../development/testing/)

View File

@ -365,14 +365,8 @@ pub fn using_ast_enabled() -> bool {
_ => !using_is_prod(), // dev/ci → true, prod → false _ => !using_is_prod(), // dev/ci → true, prod → false
} }
} }
pub fn resolve_fix_braces() -> bool { // Legacy resolve_fix_braces() removed (Phase 15 cleanup)
// Safer default: OFF誤補正の副作用を避ける // AST-based integration handles syntax properly without text-level brace fixing
// 明示ON: NYASH_RESOLVE_FIX_BRACES=1
matches!(
std::env::var("NYASH_RESOLVE_FIX_BRACES").ok().as_deref(),
Some("1") | Some("true") | Some("on")
)
}
pub fn vm_use_py() -> bool { pub fn vm_use_py() -> bool {
std::env::var("NYASH_VM_USE_PY").ok().as_deref() == Some("1") std::env::var("NYASH_VM_USE_PY").ok().as_deref() == Some("1")
} }

View File

@ -32,53 +32,5 @@ pub fn log_prelude_body_seam(prelude_clean: &str, body: &str, seam_dbg: bool) {
eprintln!("[using][seam] body_head =<<<{}>>>", head.replace('\n', "\\n")); eprintln!("[using][seam] body_head =<<<{}>>>", head.replace('\n', "\\n"));
} }
/// Apply optional seam safety: append missing '}' for unmatched '{' in prelude // Legacy brace fix function removed (Phase 15 cleanup)
/// When `trace` is true, emits a short note with delta count. // AST-based integration handles syntax errors properly without text-level hacks
pub fn fix_prelude_braces_if_enabled(prelude_clean: &str, combined: &mut String, trace: bool) {
if !crate::config::env::resolve_fix_braces() {
return;
}
// compute { } delta ignoring strings and comments
let mut delta: i32 = 0;
let mut it = prelude_clean.chars().peekable();
let mut in_str = false;
let mut in_sl = false;
let mut in_ml = false;
while let Some(c) = it.next() {
if in_sl {
if c == '\n' { in_sl = false; }
continue;
}
if in_ml {
if c == '*' {
if let Some('/') = it.peek().copied() {
it.next();
in_ml = false;
}
}
continue;
}
if in_str {
if c == '\\' { it.next(); continue; }
if c == '"' { in_str = false; }
continue;
}
if c == '"' { in_str = true; continue; }
if c == '/' {
match it.peek().copied() {
Some('/') => { in_sl = true; it.next(); continue; }
Some('*') => { in_ml = true; it.next(); continue; }
_ => {}
}
}
if c == '{' { delta += 1; }
if c == '}' { delta -= 1; }
}
if delta > 0 {
if trace { eprintln!("[using][seam] fix: appending {} '}}' before body", delta); }
for _ in 0..delta {
combined.push('}');
combined.push('\n');
}
}
}

View File

@ -12,7 +12,7 @@ impl NyashRunner {
Ok(s) => s, Ok(s) => s,
Err(e) => { eprintln!("❌ Error reading file {}: {}", filename, e); process::exit(1); } Err(e) => { eprintln!("❌ Error reading file {}: {}", filename, e); process::exit(1); }
}; };
// Using preprocessing (legacy inline or AST-prelude merge when NYASH_USING_AST=1) // Using preprocessing with AST-prelude merge (when NYASH_USING_AST=1)
let mut code2 = code; let mut code2 = code;
let use_ast_prelude = crate::config::env::enable_using() let use_ast_prelude = crate::config::env::enable_using()
&& crate::config::env::using_ast_enabled(); && crate::config::env::using_ast_enabled();

View File

@ -0,0 +1,61 @@
#!/bin/bash
# json_errors_ast.sh - JSON error cases via AST using
source "$(dirname "$0")/../../../lib/test_runner.sh"
require_env || exit 2
preflight_plugins || exit 2
TEST_DIR="/tmp/json_errors_ast_$$"
mkdir -p "$TEST_DIR"
cd "$TEST_DIR"
cat > nyash.toml << EOF
[using.json_native]
path = "$NYASH_ROOT/apps/lib/json_native/"
main = "parser/parser.nyash"
[using.aliases]
json = "json_native"
EOF
cat > driver.nyash << 'EOF'
using json_native as JsonParserModule
static box Main {
main() {
local bad = new ArrayBox()
bad.push("{")
bad.push("[1,2,,3]")
bad.push("{\"a\" 1}")
bad.push("{\"a\":}")
local i = 0
loop(i < bad.length()) {
local s = bad.get(i)
local parser = JsonParserModule.create_parser()
local res = parser.parse(s)
if parser.has_errors() or res == null {
print("ERR")
} else {
print("OK")
}
i = i + 1
}
return 0
}
}
EOF
expected=$(cat << 'TXT'
ERR
ERR
ERR
ERR
TXT
)
output=$("$NYASH_BIN" --backend vm driver.nyash 2>&1 | filter_noise)
compare_outputs "$expected" "$output" "json_errors_ast"
cd /
rm -rf "$TEST_DIR"

View File

@ -0,0 +1,54 @@
#!/bin/bash
# json_nested_ast.sh - Nested arrays/objects roundtrip via AST using
source "$(dirname "$0")/../../../lib/test_runner.sh"
require_env || exit 2
preflight_plugins || exit 2
TEST_DIR="/tmp/json_nested_ast_$$"
mkdir -p "$TEST_DIR"
cd "$TEST_DIR"
cat > nyash.toml << EOF
[using.json_native]
path = "$NYASH_ROOT/apps/lib/json_native/"
main = "parser/parser.nyash"
[using.aliases]
json = "json_native"
EOF
cat > driver.nyash << 'EOF'
using json_native as JsonParserModule
static box Main {
main() {
local samples = new ArrayBox()
samples.push("[1,[2,3],{\"x\":[4]}]")
samples.push("{\"a\":{\"b\":[1,2]},\"c\":\"d\"}")
samples.push("{\"n\":-1e-3,\"z\":0.0}")
local i = 0
loop(i < samples.length()) {
local s = samples.get(i)
local r = JsonParserModule.roundtrip_test(s)
print(r)
i = i + 1
}
return 0
}
}
EOF
expected=$(cat << 'TXT'
[1,[2,3],{"x":[4]}]
{"a":{"b":[1,2]},"c":"d"}
{"n":-1e-3,"z":0.0}
TXT
)
output=$("$NYASH_BIN" --backend vm driver.nyash 2>&1 | filter_noise)
compare_outputs "$expected" "$output" "json_nested_ast"
cd /
rm -rf "$TEST_DIR"

View File

@ -9,8 +9,17 @@ TEST_DIR="/tmp/json_roundtrip_ast_$$"
mkdir -p "$TEST_DIR" mkdir -p "$TEST_DIR"
cd "$TEST_DIR" cd "$TEST_DIR"
cat > nyash.toml << EOF
[using.json_native]
path = "$NYASH_ROOT/apps/lib/json_native/"
main = "parser/parser.nyash"
[using.aliases]
json = "json_native"
EOF
cat > driver.nyash << 'EOF' cat > driver.nyash << 'EOF'
using "apps/lib/json_native/parser/parser.nyash" as JsonParserModule using json_native as JsonParserModule
static box Main { static box Main {
main() { main() {
@ -61,7 +70,7 @@ false
TXT TXT
) )
output=$(run_nyash_vm driver.nyash) output=$("$NYASH_BIN" --backend vm driver.nyash 2>&1 | filter_noise)
compare_outputs "$expected" "$output" "json_roundtrip_ast" compare_outputs "$expected" "$output" "json_roundtrip_ast"
cd / cd /