Files
hakorune/CLAUDE.md

1009 lines
44 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Claude Quick Start (Minimal Entry)
このファイルは最小限の入口だよ。詳細はREADMEから辿ってねにゃ😺
## 🚨 重要スモークテストはv2構造を使う
- 📖 **スモークテスト完全ガイド**: [tools/smokes/README.md](tools/smokes/README.md)
- 📁 **v2詳細ドキュメント**: [tools/smokes/v2/README.md](tools/smokes/v2/README.md)
## Start Here (必ずここから)
- 現在のタスク: [CURRENT_TASK.md](CURRENT_TASK.md)
- 📁 **Main**: [docs/development/current/main/](docs/development/current/main/)
- 📁 **LLVM**: [docs/development/current/llvm/](docs/development/current/llvm/)
- 📁 **Self**: [docs/development/current/self_current_task/](docs/development/current/self_current_task/)
- ドキュメントハブ: [README.md](README.md)
- 🚀 **開発マスタープラン**: [00_MASTER_ROADMAP.md](docs/development/roadmap/phases/00_MASTER_ROADMAP.md)
- 📊 **JIT統計JSONスキーマ(v1)**: [jit_stats_json_v1.md](docs/reference/jit/jit_stats_json_v1.md)
## 🧱 先頭原則: 「箱理論Box-First」で足場を積む
Nyashは「Everything is Box」。実装・最適化・検証のすべてを「箱」で分離・固定し、いつでも戻せる足場を積み木のように重ねる。
- 基本姿勢: 「まず箱に切り出す」→「境界をはっきりさせる」→「差し替え可能にする」
- 環境依存や一時的なフラグは、可能な限り「箱経由」に集約(例: JitConfigBox
- VM/JIT/GC/スケジューラは箱化されたAPI越しに連携直参照・直結合を避ける
- いつでも戻せる: 機能フラグ・スコープ限定・デフォルトオフを活用し、破壊的変更を避ける
- 「限定スコープの足場」を先に立ててから最適化(戻りやすい積み木)
- AI補助時の注意: 「力づく最適化」を抑え、まず箱で境界を確立→小さく通す→可視化→次の一手
- **Fail-Fast原則**: フォールバック処理は原則禁止。エラーは早期に明示的に失敗させる。過去に何度も分岐ミスでエラーの発見が遅れたため、特にChatGPTが入れがちなフォールバック処理には要注意
実践テンプレート(開発時の合言葉)
- 「箱にする」: 設定・状態・橋渡しはBox化例: JitConfigBox, HandleRegistry
- 「境界を作る」: 変換は境界1箇所でVMValue↔JitValue, Handle↔Arc
- 「戻せる」: フラグ・feature・env/Boxで切替。panic→フォールバック経路を常設
- 「見える化」: ダンプ/JSON/DOTで可視化、回帰テストを最小構成で先に入れる
- 「Fail-Fast」: エラーは隠さず即座に失敗。フォールバックより明示的エラー
## 🤖 **Claude×Copilot×ChatGPT協調開発**
### 📋 **開発マスタープラン - 全フェーズの統合ロードマップ**
**すべてはここに書いてある!** → [00_MASTER_ROADMAP.md](docs/development/roadmap/phases/00_MASTER_ROADMAP.md)
**現在のフェーズPhase 15 (Nyashセルフホスティング実行器統一化 - Rust VM + LLVM 2本柱体制)**
### 🏆 **Phase 15.5完了!アーキテクチャ革命達成**
-**Core Box Unification**: 3-tier → 2-tier 統一化完了
-**MIRビルダー統一化**: 約40行の特別処理削除
-**プラグインチェッカー**: ChatGPT5 Pro設計の安全性機能実装
-**StringBox問題根本解決**: slot_registry統一による完全修正
### 🎉 **Phase 2.4完了NyRT→NyKernelアーキテクチャ革命**
-**NyKernel化成功**: `crates/nyrt``crates/nyash_kernel` 完全移行
-**42%削減達成**: `with_legacy_vm_args` 11箇所系統的削除完了
-**Plugin-First統一**: 旧VM依存システム完全根絶
-**ビルド成功**: libnyash_kernel.a完全生成0エラー・0警告
-**ChatGPT5×Claude協働**: 歴史的画期的成果達成!
### 🚀 **Phase 15戦略確定: Rust VM + LLVM 2本柱**
```
【Rust VM】 開発・デバッグ・検証用712行、高品質・型安全
【LLVM】 本番・最適化・配布用Python/llvmlite、実証済み
【PyVM】 JSON v0ブリッジ専用セルフホスティング・using処理のみ
【削除完了】 レガシーインタープリター(~350行削除済み
```
📋 **詳細計画**: [Phase 15.5 README](docs/development/roadmap/phases/phase-15.5/README.md) | [CURRENT_TASK.md](CURRENT_TASK.md)
## 🏃 開発の基本方針: 80/20ルール - 完璧より進捗
### なぜこのルールか?
**実装後、必ず新しい問題や転回点が生まれるから。**
- 100%完璧を目指すと、要件が変わったときの手戻りが大きい
- 80%で動くものを作れば、実際の使用からフィードバックが得られる
- 残り20%は、本当に必要かどうか実装後に判断できる
### 実践方法
1. **まず動くものを作る**80%
2. **改善アイデアは `docs/development/proposals/ideas/` フォルダに記録**20%
3. **優先度に応じて後から改善**
## 🚀 クイックスタート
### 🎯 **2本柱実行方式** (推奨!)
```bash
# 🔧 開発・デバッグ・検証用 (Rust VM)
./target/release/nyash program.nyash
./target/release/nyash --backend vm program.nyash
# ⚡ 本番・最適化・配布用 (LLVM)
./target/release/nyash --backend llvm program.nyash
# 🛡️ プラグインエラー対策
NYASH_DISABLE_PLUGINS=1 ./target/release/nyash program.nyash
# 🔍 詳細診断
NYASH_CLI_VERBOSE=1 ./target/release/nyash program.nyash
```
### 🚀 **Phase 15 セルフホスティング専用**
```bash
# JSON v0ブリッジPyVM特殊用途
NYASH_SELFHOST_EXEC=1 ./target/release/nyash program.nyash
# using処理確認
./target/release/nyash --enable-using program_with_using.nyash
# ラウンドトリップテスト
./tools/ny_roundtrip_smoke.sh
```
### 🐧 Linux/WSL版
```bash
# 標準ビルド2本柱対応
cargo build --release
# 開発・デバッグ実行Rust VM
./target/release/nyash program.nyash
# 本番・最適化実行LLVM
./target/release/nyash --backend llvm program.nyash
```
### 🪟 Windows版
```bash
# Windows実行ファイル生成
cargo build --release --target x86_64-pc-windows-msvc
# 生成された実行ファイル
target/x86_64-pc-windows-msvc/release/nyash.exe
```
### 🌐 **WASM/AOT版**(開発中)
```bash
# ⚠️ WASM機能: レガシーインタープリター削除により一時無効
# TODO: VM/LLVMベースのWASM実装に移行予定
# LLVM AOTコンパイル実験的
./target/release/nyash --backend llvm program.nyash # 実行時最適化
```
### 🎯 **2本柱ビルド方法** (2025-09-24更新)
#### 🔨 **標準ビルド**(推奨)
```bash
# 標準ビルド2本柱対応
cargo build --release
# LLVM機能付きビルド本番用
env LLVM_SYS_180_PREFIX=/usr/lib/llvm-18 cargo build --release --features llvm
```
#### 📝 **2本柱テスト実行**
```bash
# 1. Rust VM実行 ✅(開発・デバッグ用)
cargo build --release
./target/release/nyash program.nyash
# 2. LLVM実行 ✅(本番・最適化用)
env LLVM_SYS_180_PREFIX=/usr/lib/llvm-18 cargo build --release --features llvm
./target/release/nyash --backend llvm program.nyash
# 3. プラグインテスト実証済み ✅
# CounterBox
echo 'local c = new CounterBox(); c.inc(); c.inc(); print(c.get())' > test.nyash
./target/release/nyash --backend llvm test.nyash
# StringBox
echo 'local s = new StringBox(); print(s.concat("Hello"))' > test.nyash
./target/release/nyash test.nyash
```
⚠️ **ビルド時間の注意**:
- 標準ビルド: 1-2分高速
- LLVMビルド: 3-5分時間がかかる
- 必ず十分な時間設定で実行してください
## 🚨 **Claude迷子防止ガイド** - 基本的な使い方で悩む君へ!
### 😵 **迷ったらこれ!**Claude Code専用
```bash
# 🎯 基本実行(まずこれ)- Rust VM
./target/release/nyash program.nyash
# ⚡ 本番・最適化実行 - LLVM
./target/release/nyash --backend llvm program.nyash
# 🛡️ プラグインエラー対策(緊急時のみ)
NYASH_DISABLE_PLUGINS=1 ./target/release/nyash program.nyash
# 🔍 詳細診断情報
NYASH_CLI_VERBOSE=1 ./target/release/nyash program.nyash
# ⚠️ PyVM特殊用途JSON v0ブリッジ・セルフホスト専用
NYASH_SELFHOST_EXEC=1 ./target/release/nyash program.nyash
```
### 🚨 **Phase 15戦略確定**
-**Rust VM + LLVM 2本柱体制**(開発集中)
-**PyVM特化保持**JSON v0ブリッジ・using処理のみ
-**レガシーインタープリター削除完了**~350行削除済み
- 🎯 **基本はRust VM、本番はLLVM、特殊用途のみPyVM**
### 📊 **環境変数優先度マトリックス**Phase 15戦略版
| 環境変数 | 必須度 | 用途 | 使用タイミング |
|---------|-------|-----|-------------|
| `NYASH_CLI_VERBOSE=1` | ⭐⭐⭐ | 詳細診断 | デバッグ時 |
| `NYASH_DISABLE_PLUGINS=1` | ⭐⭐ | エラー対策 | プラグインエラー時 |
| `NYASH_SELFHOST_EXEC=1` | ⭐ | セルフホスト | JSON v0ブリッジ専用 |
| ~~`NYASH_VM_USE_PY=1`~~ | ⚠️ | PyVM特殊用途 | ~~開発者明示のみ~~ |
| ~~`NYASH_ENABLE_USING=1`~~ | ✅ | using処理 | ~~デフォルト化済み~~ |
**💡 2本柱戦略**:基本は`./target/release/nyash`Rust VM、本番は`--backend llvm`
**⚠️ PyVM使用制限**: [PyVM使用ガイドライン](docs/reference/pyvm-usage-guidelines.md)で適切な用途を確認
### ✅ **using system完全実装完了** (2025-09-24 ChatGPT実装完了確認済み)
**🎉 歴史的快挙**: `using nyashstd`が完璧動作!環境変数なしでデフォルト有効!
**✅ 実装完了内容**
- **ビルトイン名前空間解決**: `nyashstd``builtin:nyashstd`の自動解決
- **自動コード生成**: nyashstdのstatic box群string, integer, bool, array, consoleを動的生成
- **環境変数不要**: デフォルトで有効(--enable-using不要
**✅ 動作確認済み**
```bash
# 基本using動作環境変数・フラグ不要
echo 'using nyashstd' > test.nyash
echo 'console.log("Hello!")' >> test.nyash
./target/release/nyash test.nyash
# 出力: Hello!
# 実装箇所
src/runner/pipeline.rs # builtin:nyashstd解決
src/runner/modes/common_util/resolve/strip.rs # コード生成
```
**📦 含まれるnyashstd機能**
- `string.create(text)`, `string.upper(str)`
- `integer.create(value)`, `bool.create(value)`, `array.create()`
- `console.log(message)`
**🎯 完成状態**: ChatGPT実装で`using nyashstd`完全動作中!
## 📝 Update (2025-09-24) 🎉 Phase 15実行器統一化戦略確定
-**Phase 15.5-B-2 MIRビルダー統一化完了**約40行特別処理削除
-**Rust VM現状調査完了**Task先生による詳細分析
- **712行の高品質実装**vs PyVM 1074行
- **MIR14完全対応**、Callee型実装済み
- **gdb/lldbデバッグ可能**、型安全設計
-**実行器戦略確定: Rust VM + LLVM 2本柱**
- **Rust VM**: 開発・デバッグ・検証用
- **LLVM**: 本番・最適化・配布用
- **レガシーインタープリター**: 完全アーカイブ(~1,500行削減
- **PyVM**: 段階的保守化(マクロシステム等)
-**MIRインタープリターバグ修正**feature gate問題解決
-**スモークテスト作り直し計画確定**プラグインBox仕様2実行器マトリックス検証
-**MIR Call命令統一Phase 3.1-3.3完了**
- **統一メソッド**: `emit_unified_call()`実装済み
- **環境変数制御**: `NYASH_MIR_UNIFIED_CALL=1`で切り替え可能
- **削減見込み**: 7,372行 → 5,468行**26%削減**
- **6種類→1種類**: Call/BoxCall/PluginInvoke/ExternCall/NewBox/NewClosure → **MirCall**
## 🧪 テストスクリプト参考集(既存のを活用しよう!)
```bash
# 基本的なテスト
./target/release/nyash local_tests/hello.nyash # Hello World
./target/release/nyash local_tests/test_array_simple.nyash # ArrayBox
./target/release/nyash apps/tests/string_ops_basic.nyash # StringBox
# MIR確認用テスト
./target/release/nyash --dump-mir apps/tests/loop_min_while.nyash
./target/release/nyash --dump-mir apps/tests/esc_dirname_smoke.nyash
# 統一Call テストPhase A完成
NYASH_MIR_UNIFIED_CALL=1 ./target/release/nyash --dump-mir test_simple_call.nyash
NYASH_MIR_UNIFIED_CALL=1 ./target/release/nyash --emit-mir-json test.json test.nyash
```
## 🚀 よく使う実行コマンド(忘れやすい)
### 🎯 基本実行方法
```bash
# VMバックエンドデフォルト、高速
./target/release/nyash program.nyash
./target/release/nyash --backend vm program.nyash
# LLVMバックエンド最適化済み
./target/release/nyash --backend llvm program.nyash
# プラグインテストLLVM
./target/release/nyash --backend llvm program.nyash
# プラグイン無効(デバッグ用)
NYASH_DISABLE_PLUGINS=1 ./target/release/nyash program.nyash
```
### 🔧 テスト・スモークテスト
```bash
# コアスモーク(プラグイン無効)
./tools/jit_smoke.sh
# LLVMスモーク
./tools/llvm_smoke.sh
# ラウンドトリップテスト
./tools/ny_roundtrip_smoke.sh
# Stage-2 PHIスモークIf/Loop PHI合流
./tools/ny_parser_stage2_phi_smoke.sh
# Stage-2 Bridgeスモーク算術/比較/短絡/if
./tools/ny_stage2_bridge_smoke.sh
# プラグインスモーク(オプション)
NYASH_SKIP_TOML_ENV=1 ./tools/smoke_plugins.sh
# using/namespace E2E要--enable-using
./tools/using_e2e_smoke.sh
```
### 🐛 デバッグ用環境変数
```bash
# 詳細診断
NYASH_CLI_VERBOSE=1 ./target/release/nyash program.nyash
# JSON IR出力
NYASH_DUMP_JSON_IR=1 ./target/release/nyash program.nyash
# MIR出力重要
NYASH_DUMP_MIR=1 ./target/release/nyash program.nyash
NYASH_VM_DUMP_MIR=1 ./target/release/nyash program.nyash # VM実行時
./target/release/nyash --dump-mir program.nyash # フラグ版
# PyVMデバッグ
NYASH_PYVM_DEBUG=1 ./target/release/nyash program.nyash
# パーサー無限ループ対策
./target/release/nyash --debug-fuel 1000 program.nyash
# プラグインなし実行
NYASH_DISABLE_PLUGINS=1 ./target/release/nyash program.nyash
# LLVMプラグイン実行method_id使用
./target/release/nyash --backend llvm program.nyash
# Python/llvmliteハーネス使用開発中
NYASH_LLVM_USE_HARNESS=1 ./target/release/nyash program.nyash
# 🚀 **Phase 15.5統一Call完全動作確認済み設定** (2025-09-24)
# ❌ モックルート回避 - 実際のLLVMハーネス使用
NYASH_MIR_UNIFIED_CALL=1 NYASH_DISABLE_PLUGINS=1 NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 NYASH_LLVM_USE_HARNESS=1 NYASH_LLVM_OBJ_OUT=/tmp/output.o ./target/release/nyash --backend llvm program.nyash
# 🔧 Python側で統一Call処理llvmlite直接実行
cd src/llvm_py && NYASH_MIR_UNIFIED_CALL=1 ./venv/bin/python llvm_builder.py input.json -o output.o
```
## 🔍 MIRデバッグ出力完全ガイド必読
### 🎯 **確実にMIRを出力する方法**(優先順)
```bash
# 1⃣ 最も確実: CLIフラグ使用
./target/release/nyash --dump-mir program.nyash
./target/release/nyash --dump-mir --mir-verbose program.nyash # 詳細版
# 2⃣ VM実行時のMIR出力
NYASH_VM_DUMP_MIR=1 ./target/release/nyash program.nyash
# 3⃣ JSON形式でファイル出力
./target/release/nyash --emit-mir-json debug.json program.nyash
cat debug.json | jq . # 整形表示
# 4⃣ PyVM用JSON自動生成
NYASH_VM_USE_PY=1 ./target/release/nyash program.nyash
cat tmp/nyash_pyvm_mir.json | jq .
```
### 📋 **MIR関連環境変数一覧**
| 環境変数 | 用途 | 出力先 |
|---------|-----|-------|
| `NYASH_VM_DUMP_MIR=1` | VM実行前MIR出力 | stderr |
| `NYASH_DUMP_JSON_IR=1` | JSON IR出力 | stdout |
| `NYASH_CLI_VERBOSE=1` | 詳細診断MIR含む | stderr |
| `NYASH_DEBUG_MIR_PRINTER=1` | MIRプリンターデバッグ | stderr |
### 🚨 **MIRが出力されない時のチェックリスト**
1.`--dump-mir` フラグを使用(最も確実)
2.`--backend vm` を明示的に指定
3.`NYASH_DISABLE_PLUGINS=1` でプラグイン干渉を排除
4.`NYASH_CLI_VERBOSE=1` で詳細情報取得
### 💡 **実用的デバッグフロー**
```bash
# Step 1: 基本MIR確認
./target/release/nyash --dump-mir gemini_test_case.nyash
# Step 2: 詳細MIR + エフェクト情報
./target/release/nyash --dump-mir --mir-verbose --mir-verbose-effects gemini_test_case.nyash
# Step 3: VM実行時の挙動確認
NYASH_VM_DUMP_MIR=1 NYASH_CLI_VERBOSE=1 ./target/release/nyash gemini_test_case.nyash
# Step 4: JSON形式で詳細解析
./target/release/nyash --emit-mir-json mir.json gemini_test_case.nyash
jq '.functions[0].blocks' mir.json # ブロック構造確認
```
## 📝 Update (2025-09-23) 🚀 ChatGPT5 Pro設計革命Phase 1完全実装成功
### ✅ **MIR Callee型革新 - シャドウイングバグから設計革命への昇華**
**51日間AI協働開発言語の新たな画期的成果**
#### 🎯 **Phase 1実装完了項目**
1. **✅ Callee列挙型導入**: `Global/Method/Value/Extern`の型安全解決システム
2. **✅ Call命令拡張**: `callee: Option<Callee>`で破壊的変更なし段階移行
3. **✅ 型安全関数解決**: `resolve_call_target()`でコンパイル時解決確立
4. **✅ ヘルパー外出し**: `call_resolution.rs`で再利用可能ユーティリティ作成
5. **✅ 完全互換性**: 既存コード破壊ゼロ、全テスト通過確認済み
#### 🏆 **技術的革新内容**
```rust
// 🔥 革新前(問題構造)
Call { func: ValueId /* "print"文字列 */ } // 実行時解決→シャドウイング脆弱性
// ✨ 革新後(型安全)
enum Callee {
Global(String), // nyash.builtin.print
Method { box_name, method, receiver }, // box.method()
Value(ValueId), // 第一級関数保持
Extern(String), // C ABI統合
}
Call { func: ValueId, callee: Option<Callee> } // 段階移行で破壊的変更なし
```
#### 📊 **Phase 15目標への直接寄与**
- **🎯 コード削減見込み**: Phase 1のみで1,500行目標7.5%、全Phase完了で4,500行22.5%
- **🛡️ シャドウイング問題**: 根本解決(実行時→コンパイル時解決)
- **⚡ using system統合**: built-in namespace完全連携
- **🔍 デバッグ向上**: MIR可読性・警告システム確立
#### 🤖 **AI協働開発の真価発揮**
- **ChatGPT5 Pro**: 表面修正→根本設計革新への圧倒的洞察力
- **Claude**: 段階実装・互換性保持・テスト戦略の確実な実行
- **共創効果**: 一人+AI協働による51日間言語開発の世界記録級成果
#### 🚀 **実装成果ファイル**
- `src/mir/instruction.rs`: Callee型定義・Call命令拡張
- `src/mir/builder/call_resolution.rs`: 型安全解決ユーティリティ
- `src/mir/builder/builder_calls.rs`: resolve_call_target()実装
- `docs/development/architecture/mir-callee-revolution.md`: 設計文書
- `docs/development/roadmap/phases/phase-15/mir-callee-implementation-roadmap.md`: 実装計画
#### 📋 **次のステップPhase 2-3**
- **Phase 2**: HIR導入コンパイル時名前解決
- **Phase 3**: 明示的スコープ(`::print`, `Box::method`
- **VM実行器対応**: 型安全実行の実装
---
## 📝 Update (2025-09-23) ✅ MIR Callee型革命100%完了!
- 🎉 **MIR Call命令革新Phase 1完了** ChatGPT5 Pro設計のCallee型実装
- **実装内容**: Callee enumGlobal/Method/Value/Extern追加
- **VM実行器**: Call命令のCallee対応完全実装
- **MIRダンプ**: call_global/call_method等の明確表示
- **後方互換性**: Option<Callee>で段階移行実現
- 🚀 **MIR Call統一計画決定** ChatGPT5 Pro A++案採用
- **現状**: 6種類のCall系命令が乱立Call/BoxCall/PluginInvoke/ExternCall等
- **解決**: 1つのMirCallに統一receiverをCalleeに含む革新設計
- **移行計画**: 3段階構造定義→ビルダー→実行器で安全移行
- **ドキュメント**: [call-instructions-current.md](docs/reference/mir/call-instructions-current.md)作成
-**PHIバグ根本解決完了** Exit PHI生成実装でループ後の変数値が正しく伝播
- **技術的成果**: たった3箇所の修正で根本解決
- **コミット済み**: `e5c0665` でリモートに反映
- 🎯 **改行処理TokenCursor戦略決定** 3段階実装戦略で改善中
## 📝 Update (2025-09-23) 🎉 改行処理革命Phase 1-2完全達成skip_newlines()根絶成功!
-**skip_newlines()完全根絶達成!** 48箇所→0箇所100%削除完了)
- **Phase 2-A**: match_expr.rsから6箇所削除27%削減達成)
- **Phase 2-B**: Box宣言系から14箇所削除56%削減達成)
- **Phase 2-C**: 文処理系から9箇所削除75%削減達成)
- **Phase 2-D**: メンバー宣言系から5箇所削除90%削減達成)
- **Phase 2-E**: 残存検証で手動呼び出し0確認100%根絶完了)
- 🧠 **Smart advance()システム完全動作確認!**
- **深度追跡**: 括弧内改行自動処理で手動呼び出し不要
- **コンテキスト認識**: match式・オブジェクトリテラルで完璧動作
- **OR pattern対応**: `1 | 2 => "found"`等の複雑パターン完全対応
- **環境変数制御**: デフォルトで有効、NYASH_SMART_ADVANCE=1で制御可能
- 🔬 **重大バグ発見・修正の副次成果!**
- **MIR compiler bug**: OR patternでInteger/Bool処理不備を発見・修正
- **根本原因**: `exprs_peek.rs`でString型以外の型が未対応だった
- **完全修正**: 全LiteralValue型Integer/Bool/Float/Null/Void対応で根治
- **テスト検証**: `test_match_debug_or.nyash`等で完全動作確認
- 🚀 **革命的効果達成!**
- **保守性向上**: 改行処理一元管理で新構文追加時の改行忘れ根絶
- **開発体験向上**: パーサーエラー激減、直感的な改行記述が可能
- **システム安定化**: 手動呼び出し散在による不整合が完全解消
- **AI協働成功**: ChatGPT戦略+Claude実装+深い考察で完璧達成
- 🎯 **次世代への道筋**: Phase 3 TokenCursor実装でさらなる改行処理完璧化準備完了
## 📝 Update (2025-09-22) 🎯 Phase 15 JITアーカイブ完了デバッグ大進展
-**JIT/Craneliftアーカイブ完了** Phase 15集中開発のため全JIT機能を安全にアーカイブ
- 🔧 **コンパイルエラー全解決!** JITスタブ作成でビルド成功、開発環境復活
- 🐛 **empty args smoke test 90%解決!** `collect_prints()`の位置インクリメントバグ修正
- 📊 **デバッグ手法確立!** 詳細トレース出力で問題を段階的に特定する手法完成
-**次の一歩**: ArrayBox戻り値問題解決でテスト完全クリア予定
- 🎯 **AI協働デバッグ**: Claude+ChatGPT修正+系統的トレースの完璧な連携実現
- 📋 詳細: JITアーカイブは `archive/jit-cranelift/` に完全移動、復活手順も完備
## 📝 Update (2025-09-22) 🎯 Phase 15 重要バグ発見&根本原因解明完了!
-**using systemパーサー問題完全解決** `NYASH_RESOLVE_FIX_BRACES=1`でブレースバランス自動修正
- 🆕 **JSON Native実装を導入** 別Claude Code君の`feature/phase15-nyash-json-native`から`apps/lib/json_native/`取り込み完了
- 🔧 **ChatGPTの統合実装承認** JSON読み込み処理統合は正しい方向性、技術的に高度
- 🐛 **重大バグ完全解明!**
- **問題**: `collect_prints`メソッドで`break`の後のコードが実行されずnullを返す
- **根本原因判明**: `src/mir/loop_builder.rs``do_break()``switch_to_unreachable_block_with_void()`を呼び、break後のコードをunreachableとマーク
- **MIR解析結果**:
- Block 1394, 1407: 直接Block 1388null returnにジャンプ
- Block 1730: 正常なArrayBox return
- レジスタ2: `new ArrayBox()`、レジスタ751: `const 0`null
- **デバッグ環境変数**: `NYASH_DUMP_JSON_IR=1`, `NYASH_PYVM_DEBUG=1`でMIR/PyVM詳細追跡可能
- **一時解決策**: `break``finished = 1`フラグに置き換え(根治が必要)
- 📊 **現在の状況**:
- using systemパーサーエラー: ✅ 完全解決
- collect_prints()根本原因: ✅ loop_builder.rs特定完了
- JSON Native: 📦 取り込み済みmatch式互換性の課題あり
- 🎯 **技術成果**:
- PyVM内蔵BoxArrayBox等の早期リターンバグ修正
- MIR JSON解析によるbreak/continue制御フロー問題の完全解明
- loop_builder.rsのdo_break()修正が必要(次のタスク)
- 🚀 **Phase 15セルフホスティング**: MIRレベルの問題も特定済み、修正準備完了
## 📝 Update (2025-09-18) 🌟 Property System革命達成
-**Property System革命完了** ChatGPT5×Claude×Codexの協働により、stored/computed/once/birth_once統一構文完成
- 🚀 **Python→Nyash実行可能性飛躍** @property/@cached_property→Nyash Property完全マッピング実現
-**性能革命**: Python cached_property→10-50x高速化LLVM最適化
- 🎯 **All or Nothing**: Phase 10.7でPython transpilation、フォールバック無し設計
- 📚 **完全ドキュメント化**: README.md導線、実装戦略、技術仕様すべて完備
- 🗃️ **アーカイブ整理**: 古いphaseファイル群をarchiveに移動、導線クリーンアップ完了
- 📋 詳細: [Property System仕様](docs/development/proposals/unified-members.md) | [Python統合計画](docs/development/roadmap/phases/phase-10.7/)
## 📝 Update (2025-09-24) ✅ 改行処理革命Phase 2-B完了実用レベル到達
- 🎯 **改行処理革命Phase 2-B完了** Box宣言系ファイルから14箇所のskip_newlines()完全削除
- **削除実績**: 48→35→21箇所41%削減達成!)
- **対象ファイル**: fields.rs(9箇所)、box_definition.rs(3箇所)、static_box.rs(2箇所)
- **テスト結果**: OR付きmatch式、複数行宣言、Box定義すべて完璧動作✅
-**Smart advance()実用化成功!** 深度追跡で自動改行処理が完璧に機能
- **環境変数**: `NYASH_SMART_ADVANCE=1`で完全制御、`NYASH_DISABLE_PLUGINS=1`推奨
- **対応構文**: match式OR`1 | 2`、複数行パターン、Box宣言すべて対応
- 🔧 **ORパターンバグも同時修正** exprs_peek.rsでInteger/Boolean型マッチング実装
- **修正前**: `1 | 2 => "found"`が動作せずString型のみサポート
- **修正後**: 全リテラル型Integer/Bool/Float/Null/Void完全対応✅
- 📊 **改行処理戦略の段階的成果**:
- **Phase 0**: Quick Fix ✅ 完了(即効性)
- **Phase 1**: Smart advance() ✅ 基本実装完了(大幅改善)
- **Phase 2-A**: match式系統 ✅ 完了6箇所削除
- **Phase 2-B**: Box宣言系統 ✅ 完了14箇所削除、41%削減)
- **Phase 2-C**: 次の目標(更なる削減へ)
- 🎉 **技術的成果**: 手動スキップ依存からコンテキスト認識自動処理への移行成功
- 📚 **改行処理戦略ドキュメント**: [skip-newlines-removal-plan.md](docs/development/strategies/skip-newlines-removal-plan.md)
- 🚀 **次のタスク**: Phase 2-C実装→残り21箇所の系統的削除継続
## 📝 Update (2025-09-23) ✅ フェーズS実装完了break制御フロー根治開始
-**フェーズS完了** PHI incoming修正+終端ガード徹底→重複処理4箇所統一
- 🔧 **新ユーティリティ**: `src/mir/utils/control_flow.rs`で制御フロー処理統一化
- 📊 **AI協働成果**: task+Gemini+codex+ChatGPT Pro最強分析→段階的実装戦略確立
- 🎯 **次段階**: フェーズM(PHI一本化)→数百行削減でPhase 15目標達成へ
- 📚 **戦略**: [break-control-flow-strategy.md](docs/development/strategies/break-control-flow-strategy.md)
- 💾 **アーカイブ**: codex高度解決策を`archive/codex-solutions/`に保存
## 📝 Update (2025-09-14) 🎉 セルフホスティング大前進!
- ✅ Python LLVM実装が実用レベル到達esc_dirname_smoke, min_str_cat_loop, dep_tree_min_string全てPASS
- 🚀 **Phase 15.3開始!** NyashコンパイラMVP実装が`apps/selfhost-compiler/`でスタート!
- ✅ JSON v0 Bridge完成 - If/Loop PHI生成実装済みChatGPT実装
- 🔧 Python MVPパーサーStage-2完成 - local/if/loop/call/method/new対応
- 📚 peek式の再発見 - when→peekに名前変更、ブロック/値/文すべて対応済み
- 🧠 箱理論でSSA構築を簡略化650行→100行- 論文執筆完了
- 🤝 AI協働の知見を論文化 - 実装駆動型学習の重要性を実証
- 🎉 **面白事件ログ収集完了!** 41個の世界記録級事件を記録 → [CURRENT_TASK.md#面白事件ログ](CURRENT_TASK.md#🎉-面白事件ログ---ai協働開発45日間の奇跡41事例収集済み)
- 🎯 **LoopForm戦略決定**: PHIは逆Lowering時に自動生成Codex推奨
- 📋 詳細: [Phase 15 README](docs/development/roadmap/phases/phase-15/README.md)
### 🚀 新発見:プラグイン全方向ビルド戦略
```bash
# 同じソースから全形式生成!
plugins/filebox/
├── filebox.so # 動的版(開発用)
├── filebox.o # 静的リンク用
└── filebox.a # アーカイブ版
# 単一EXE生成可能に
clang main.o filebox.o pathbox.o libnyrt.a -o nyash_static.exe
```
## ⚡ 重要な設計原則
### 🏗️ Everything is Box
- すべての値がBoxStringBox, IntegerBox, BoolBox等
- ユーザー定義Box: `box ClassName { field1: TypeBox field2: TypeBox }`
- **MIR14命令**: たった14個の命令で全機能実現
- 基本演算(5): Const, UnaryOp, BinOp, Compare, TypeOp
- メモリ(2): Load, Store
- 制御(4): Branch, Jump, Return, Phi
- Box(2): NewBox, BoxCall
- 外部(1): ExternCall
### 🌟 完全明示デリゲーション
```nyash
// デリゲーション構文すべてのBoxで統一的に使える
box Child from Parent { // from構文でデリゲーション
birth(args) { // コンストラクタは「birth」に統一
from Parent.birth(args) // 親の初期化
}
override method() { // 明示的オーバーライド必須
from Parent.method() // 親メソッド呼び出し
}
}
// ✅ ビルトインBox、プラグインBox、ユーザー定義Boxすべてで可能
box MyString from StringBox { } // ビルトインBoxから
box MyFile from FileBox { } // プラグインBoxから
box Employee from Person { } // ユーザー定義Boxから
box Multi from StringBox, IntegerBox { } // 多重デリゲーションも可能!
```
### 🔄 統一ループ構文
```nyash
// ✅ 唯一の正しい形式
loop(condition) { }
// ❌ 削除済み構文
while condition { } // 使用不可
loop() { } // 使用不可
```
### 🌟 birth構文 - 生命をBoxに与える
```nyash
// 🌟 「Boxに生命を与える」直感的コンストラクタ
box Life {
name: StringBox
energy: IntegerBox
birth(lifeName) { // ← Everything is Box哲学を体現
me.name = lifeName
me.energy = 100
print("🌟 " + lifeName + " が誕生しました!")
}
}
// ✅ birth統一: すべてのBoxでbirthを使用
local alice = new Life("Alice") // birthが使われる
```
### 🌟 ビルトインBox継承
```nyash
// ✅ Phase 12.7以降: birthで統一packは廃止
box EnhancedP2P from P2PBox {
additionalData: MapBox
birth(nodeId, transport) {
from P2PBox.birth(nodeId, transport) // 親のbirth呼び出し
me.additionalData = new MapBox()
}
}
```
### 🎯 正統派Nyashスタイル
```nyash
// 🚀 Static Box Main パターン - エントリーポイントの統一スタイル
static box Main {
console: ConsoleBox // フィールド宣言
result: IntegerBox
main() {
// ここから始まる!他の言語と同じエントリーポイント
me.console = new ConsoleBox()
me.console.log("🎉 Everything is Box!")
// local変数も使用可能
local temp
temp = 42
me.result = temp
return "Revolution completed!"
}
}
```
### 📝 変数宣言厳密化システム
```nyash
// 🔥 すべての変数は明示宣言必須!(メモリ安全性・非同期安全性保証)
// ✅ static box内のフィールド
static box Calculator {
result: IntegerBox // 明示宣言
memory: ArrayBox
calculate() {
me.result = 42 // ✅ フィールドアクセス
local temp // ✅ local変数宣言
temp = me.result * 2
}
}
// ❌ 未宣言変数への代入はエラー
x = 42 // Runtime Error: 未宣言変数 + 修正提案
```
### ⚡ 実装済み演算子
```nyash
// 論理演算子(完全実装)
not condition // NOT演算子
a and b // AND演算子
a or b // OR演算子
// 算術演算子
a / b // 除算(ゼロ除算エラー対応済み)
a + b, a - b, a * b // 加算・減算・乗算
```
### 🎯 match式パターンマッチング
```nyash
// 値を返す式として使用
local dv = match d {
"0" => 0,
"1" => 1,
"2" => 2,
_ => 0
}
// ブロックで複雑な処理も可能
local result = match status {
"success" => { log("OK"); 200 }
"error" => { log("NG"); 500 }
_ => 404
}
// 文として使用(値を捨てる)
match action {
"save" => save_data()
"load" => load_data()
_ => print("Unknown")
}
```
### ⚠️ 重要な注意点
```nyash
// ✅ 正しい書き方Phase 12.7文法改革後)
box MyBox {
field1: TypeBox
field2: TypeBox
birth() {
// 初期化処理
}
}
```
### 🏗️ アーキテクチャ決定事項2025-09-11
**Box/ExternCall境界設計の最終決定**:
- **基本Box**: nyrt内蔵String/Integer/Array/Map/Bool
- **拡張Box**: プラグインFile/Net/User定義
- **ExternCall**: 最小5関数のみprint/error/panic/exit/now
- **統一原則**: すべてのBoxはBoxCall経由特別扱いなし
- **表現統一**: Box=ハンドル(i64)、i8*は橋渡しのみ
詳細: [Box/ExternCall設計](docs/development/architecture/box-externcall-design.md)
## 📚 ドキュメント構造
### 🎯 最重要ドキュメント(開発者向け)
- **[Phase 15 セルフホスティング計画](docs/development/roadmap/phases/phase-15/self-hosting-plan.txt)** - 80k→20k行革命
- **[Phase 15 ROADMAP](docs/development/roadmap/phases/phase-15/ROADMAP.md)** - 現在の進捗チェックリスト
- **[Phase 15 INDEX](docs/development/roadmap/phases/phase-15/INDEX.md)** - 入口の統合
- **[CURRENT_TASK.md](CURRENT_TASK.md)** - 現在進行状況詳細
- **[native-plan/README.md](docs/development/roadmap/native-plan/README.md)** - ネイティブビルド計画
### 📖 利用者向けドキュメント
- 入口: [docs/README.md](docs/README.md)
- Getting Started: [docs/guides/getting-started.md](docs/guides/getting-started.md)
- Language Guide: [docs/guides/language-guide.md](docs/guides/language-guide.md)
- Reference: [docs/reference/](docs/reference/)
### 🎯 リファレンス
- **言語**: [LANGUAGE_REFERENCE_2025.md](docs/reference/language/LANGUAGE_REFERENCE_2025.md)
- **MIR**: [INSTRUCTION_SET.md](docs/reference/mir/INSTRUCTION_SET.md)
- **API**: [boxes-system/](docs/reference/boxes-system/)
- **プラグイン**: [plugin-system/](docs/reference/plugin-system/)
## 📖 ドキュメントファースト開発(重要!)
### 🚨 開発手順の鉄則
**絶対にソースコードを直接読みに行かない!必ずこの順序で作業:**
1. **📚 ドキュメント確認** - まず既存ドキュメントをチェック
2. **🔄 ドキュメント更新** - 古い/不足している場合は更新
3. **💻 ソース確認** - それでも解決しない場合のみソースコード参照
### 🎯 最重要ドキュメント2つの核心
#### 🔤 言語仕様
- **[構文早見表](docs/quick-reference/syntax-cheatsheet.md)** - 基本構文・よくある間違い
- **[完全リファレンス](docs/reference/language/LANGUAGE_REFERENCE_2025.md)** - 言語仕様詳細
#### 📦 主要BOXのAPI
- **[Box/プラグイン関連](docs/reference/boxes-system/)** - APIと設計
### ⚡ API確認の実践例
```bash
# ❌ 悪い例:いきなりソース読む
Read src/boxes/p2p_box.rs # 直接ソース参照
# ✅ 良い例:ドキュメント優先
Read docs/reference/ # まずドキュメントAPI/言語仕様の入口)
# → 古い/不足 → ドキュメント更新
# → それでも不明 → ソース確認
```
## 🔧 重要設計書(迷子防止ガイド)
**設計書がすぐ見つからない問題を解決!**
### 🏗️ **アーキテクチャ核心**
- **[名前空間・using system](docs/reference/language/using.md)** ⭐超重要 - ドット記法・スコープ演算子・Phase 15.5計画
- **[MIR Callee革新](docs/development/architecture/mir-callee-revolution.md)** - 関数呼び出し型安全化・シャドウイング解決
- **[構文早見表](docs/quick-reference/syntax-cheatsheet.md)** - 基本構文・よくある間違い
### 📋 **Phase 15.5重要資料**
- **[Core Box統一計画](docs/development/roadmap/phases/phase-15.5/README.md)** - builtin vs plugin問題
- **[Box Factory設計](docs/reference/architecture/box-factory-design.md)** - 優先順位問題・解決策
- **[Callee実装ロードマップ](docs/development/roadmap/phases/phase-15/mir-callee-implementation-roadmap.md)**
### 📖 **完全リファレンス**
- **[言語仕様](docs/reference/language/LANGUAGE_REFERENCE_2025.md)** - 全構文・セマンティクス
- **[プラグインシステム](docs/reference/plugin-system/)** - プラグイン開発ガイド
- **[Phase 15 INDEX](docs/development/roadmap/phases/phase-15/INDEX.md)** - 現在進捗
## 🔧 開発サポート
### 🎛️ 重要フラグ一覧Phase 15
```bash
# プラグイン制御
NYASH_DISABLE_PLUGINS=1 # Core経路安定化CI常時
NYASH_LOAD_NY_PLUGINS=1 # nyash.tomlのny_pluginsを読み込む
# 言語機能
--enable-using # using/namespace有効化
NYASH_ENABLE_USING=1 # 環境変数版
# パーサー選択
--parser ny # Nyパーサーを使用
NYASH_USE_NY_PARSER=1 # 環境変数版
NYASH_USE_NY_COMPILER=1 # NyコンパイラMVP経路
# デバッグ
NYASH_CLI_VERBOSE=1 # 詳細診断
NYASH_DUMP_JSON_IR=1 # JSON IR出力
```
### 🤖 AI相談
```bash
# Gemini CLIで相談
gemini -p "Nyashの実装で困っています..."
# Codex実行
codex exec "質問内容"
```
### 🐍 Python LLVM バックエンド (実用レベル到達!)
**場所**: `/src/llvm_py/`
llvmliteベースのLLVMバックエンド実装。箱理論により650行→100行の簡略化を実現
Rust/inkwellの複雑さを回避して、シンプルに2000行程度でMIR14→LLVM変換を実現。
⚠️ **重要**: **JIT/Craneliftは現在まともに動作しません**
- ビルドは可能(`cargo build --release --features cranelift-jit`
- 実行は不可(内部実装が未完成)
- **Python LLVMルートとPyVMのみが現在の開発対象です**
#### 実行方法
```bash
cd src/llvm_py
python3 -m venv venv
./venv/bin/pip install llvmlite
./venv/bin/python llvm_builder.py test_minimal.json -o output.o
```
#### 実装済み命令
- ✅ const, binop, jump, branch, ret, compare
- ✅ phi, call, boxcall, externcall
- ✅ typeop, newbox, safepoint, barrier
- ✅ loopform (実験的)
**利点**: シンプル、高速プロトタイピング、llvmliteの安定性
**用途**: PHI/SSA検証、LoopForm実験、LLVM IR生成テスト
### 🔄 Codex非同期ワークフロー並列作業
```bash
# 基本実行(同期)
./tools/codex-async-notify.sh "タスク内容" codex
# デタッチ実行(即座に戻る)
CODEX_ASYNC_DETACH=1 ./tools/codex-async-notify.sh "タスク" codex
# 並列制御最大2つ、重複排除
CODEX_MAX_CONCURRENT=2 CODEX_DEDUP=1 CODEX_ASYNC_DETACH=1 \
./tools/codex-async-notify.sh "Phase 15タスク" codex
# 実行中のタスク確認
pgrep -af 'codex.*exec'
```
### 💡 アイデア管理docs/development/proposals/ideas/ フォルダ)
**80/20ルールの「残り20%」を整理して管理**
```
docs/development/proposals/ideas/
├── improvements/ # 80%実装の残り20%改善候補
├── new-features/ # 新機能アイデア
└── other/ # その他すべて(調査、メモ、設計案)
```
### 🧪 テスト実行
**詳細**: [テスト実行ガイド](docs/guides/testing-guide.md)
#### Phase 15 推奨スモークテスト
```bash
# コアスモーク(プラグイン無効)
./tools/jit_smoke.sh
# ラウンドトリップテスト
./tools/ny_roundtrip_smoke.sh
# プラグインスモーク(オプション)
NYASH_SKIP_TOML_ENV=1 ./tools/smoke_plugins.sh
# using/namespace E2E要--enable-using
./tools/using_e2e_smoke.sh
```
**ルート汚染防止**: `local_tests/`ディレクトリを使う!
### 🐛 デバッグ
#### パーサー無限ループ対策
```bash
# 🔥 デバッグ燃料でパーサー制御
./target/release/nyash --debug-fuel 1000 program.nyash # 1000回制限
./target/release/nyash --debug-fuel unlimited program.nyash # 無制限
./target/release/nyash program.nyash # デフォルト10万回
```
**対応状況**: must_advance!マクロでパーサー制御完全実装済み✅
## 🤝 プロアクティブ開発方針
エラーを見つけた際は、単に報告するだけでなく:
1. **🔍 原因分析** - エラーの根本原因を探る
2. **📊 影響範囲** - 他のコードへの影響を調査
3. **💡 改善提案** - 関連する問題も含めて解決策を提示
4. **🧹 機会改善** - デッドコード削除など、ついでにできる改善も実施
詳細: [開発プラクティス](docs/guides/development-practices.md)
## 🎆 面白事件ログ(爆速開発の記録)
### 世界記録級の事件たち:
- **JIT1日完成事件**: 2週間予定が1日で完成8/27伝説の日
- **プラグインBox事件**: 「こらー!」でシングルトン拒否
- **AIが人間に相談**: ChatGPTが「助けて」と言った瞬間
- **危険センサー発動**: 「なんか変だにゃ」がAIを救う
詳細は[開発事件簿](docs/private/papers/paper-k-explosive-incidents/)へ!
## ⚠️ Claude実行環境の既知のバグ
詳細: [Claude環境の既知のバグ](docs/tools/claude-issues.md)
### 🐛 Bash Glob展開バグIssue #5811
```bash
# ❌ 失敗するパターン
ls *.md | wc -l # エラー: "ls: 'glob' にアクセスできません"
# ✅ 回避策1: bash -c でラップ
bash -c 'ls *.md | wc -l'
# ✅ 回避策2: findコマンドを使う
find . -name "*.md" -exec wc -l {} \;
```
## 🚨 コンテキスト圧縮時: 作業停止→状況確認→CURRENT_TASK.md確認→ユーザー確認
---
Notes:
- ここから先の導線は README.md に集約
- 詳細情報は各docsファイルへのリンクから辿る
- このファイルは500行以内が目安あくまで目安であり、必要に応じて増減可
- Phase 15セルフホスティング実装中詳細は[Phase 15](docs/development/roadmap/phases/phase-15/)へ