2025-08-26 19:13:57 +09:00
|
|
|
|
# Claude Quick Start (Minimal Entry)
|
2025-08-09 15:14:44 +09:00
|
|
|
|
|
2025-08-26 19:13:57 +09:00
|
|
|
|
このファイルは最小限の入口だよ。詳細はREADMEから辿ってねにゃ😺
|
2025-08-09 15:14:44 +09:00
|
|
|
|
|
2025-09-28 12:19:49 +09:00
|
|
|
|
---
|
|
|
|
|
|
|
2025-11-20 17:12:46 +09:00
|
|
|
|
## 🔄 **現在の開発状況** (2025-11-20)
|
|
|
|
|
|
|
|
|
|
|
|
### 🎊 **PHI Bug Option C実装ほぼ完了!** (2025-11-20 commit `461bdec4`)
|
|
|
|
|
|
- **267/268テスト PASS達成!** Option C実装大成功 🎉
|
|
|
|
|
|
- **Step 5-5-H完了**: Phantom block検証実装(exit_preds検証)
|
|
|
|
|
|
- **PHI決定性向上**: BTreeSet/BTreeMap化(4ファイル修正)
|
|
|
|
|
|
- `if_phi.rs`, `loop_phi.rs`, `loop_snapshot_merge.rs`, `loopform_builder.rs`
|
|
|
|
|
|
- **根本原因解明**: HashMap非決定的イテレーションによるValueId変動
|
|
|
|
|
|
- 詳細: `docs/development/current/main/valueid-*.md`
|
|
|
|
|
|
- **退行なし**: 267テスト全てPASS(1テストのみ非決定性残存)
|
|
|
|
|
|
- **次タスク**: Stage-B型エラー修正(String > Integer(13))
|
|
|
|
|
|
- **後回し**: variable_map決定性化(builder.rs等のHashMap→BTreeMap)
|
|
|
|
|
|
|
|
|
|
|
|
#### 🔍 **MIRデバッグ完全ガイド**(超重要!)
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 基本MIR確認(最優先!)
|
|
|
|
|
|
./target/release/nyash --dump-mir program.hako
|
|
|
|
|
|
NYASH_VM_DUMP_MIR=1 ./target/release/nyash program.hako
|
|
|
|
|
|
|
|
|
|
|
|
# 詳細MIR + エフェクト情報
|
|
|
|
|
|
./target/release/nyash --dump-mir --mir-verbose --mir-verbose-effects program.hako
|
|
|
|
|
|
|
|
|
|
|
|
# JSON形式で詳細解析
|
|
|
|
|
|
./target/release/nyash --emit-mir-json mir.json program.hako
|
|
|
|
|
|
jq '.functions[0].blocks' mir.json # ブロック構造確認
|
|
|
|
|
|
|
|
|
|
|
|
# Option C デバッグ(PHI関連)
|
|
|
|
|
|
NYASH_OPTION_C_DEBUG=1 cargo test --release TEST_NAME 2>&1 | grep "Option C"
|
|
|
|
|
|
|
|
|
|
|
|
# LoopForm デバッグ
|
|
|
|
|
|
NYASH_LOOPFORM_DEBUG=1 cargo test --release TEST_NAME 2>&1 | grep "loopform"
|
|
|
|
|
|
|
2025-12-05 23:26:55 +09:00
|
|
|
|
# DCE(Dead Code Elimination)トレース ⭐NEW - 命令が消える問題のデバッグ
|
|
|
|
|
|
NYASH_DCE_TRACE=1 ./target/release/hakorune program.hako 2>&1 | grep "\[dce\]"
|
|
|
|
|
|
# 出力例:
|
|
|
|
|
|
# [dce] Eliminating unused pure instruction in bb12: %29 = Const { dst: ValueId(29), value: Void }
|
|
|
|
|
|
# [dce] Eliminating unused pure instruction in bb5: %38 = Copy { dst: ValueId(38), src: ValueId(36) }
|
|
|
|
|
|
# → 「命令は emit されてるのに実行時に undefined」問題の原因特定に有効!
|
|
|
|
|
|
|
2025-12-05 22:01:59 +09:00
|
|
|
|
# variable_map トレース (JoinIR PHI接続デバッグ) ⭐超重要
|
2025-12-05 22:28:55 +09:00
|
|
|
|
NYASH_TRACE_VARMAP=1 cargo test --release TEST_NAME 2>&1 | grep "\[trace:"
|
2025-12-05 22:01:59 +09:00
|
|
|
|
# 出力例:
|
|
|
|
|
|
# [trace:varmap] pattern3_before_merge: sum→r123, count→r124
|
|
|
|
|
|
# [trace:varmap] pattern3_after_merge: (merge完了後)
|
|
|
|
|
|
# [trace:varmap] pattern3_exit_phi_connected: sum→r456(final)
|
|
|
|
|
|
|
2025-12-05 22:28:55 +09:00
|
|
|
|
# JoinIR 詳細デバッグ(ルーティング・ブロック割り当て)⭐Phase 195
|
|
|
|
|
|
NYASH_JOINIR_DEBUG=1 ./target/release/hakorune program.hako 2>&1 | grep "\[trace:"
|
|
|
|
|
|
# 出力例:
|
|
|
|
|
|
# [trace:pattern] route: Pattern1_Minimal MATCHED
|
|
|
|
|
|
# [trace:joinir] pattern1: 3 functions, 13 blocks
|
|
|
|
|
|
# [trace:blocks] allocator: Block remap: join_func_0:BasicBlockId(0) → BasicBlockId(4)
|
|
|
|
|
|
# [trace:routing] router: function 'main' - try_cf_loop_joinir called
|
|
|
|
|
|
|
2025-11-20 17:12:46 +09:00
|
|
|
|
# 完全MIRダンプ(テスト時)
|
|
|
|
|
|
NYASH_MIR_TEST_DUMP=1 cargo test --release TEST_NAME 2>&1 > /tmp/mir_dump.log
|
|
|
|
|
|
|
|
|
|
|
|
# VM実行トレース
|
|
|
|
|
|
NYASH_CLI_VERBOSE=1 ./target/release/nyash program.hako
|
|
|
|
|
|
|
|
|
|
|
|
# 決定性テスト(3回実行して一貫性確認)
|
|
|
|
|
|
for i in 1 2 3; do
|
|
|
|
|
|
echo "=== Run $i ==="
|
|
|
|
|
|
cargo test --release TEST_NAME 2>&1 | grep -E "(ValueId|test result)"
|
|
|
|
|
|
done
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-12-05 22:01:59 +09:00
|
|
|
|
##### 🎯 **NYASH_TRACE_VARMAP の威力**
|
|
|
|
|
|
|
|
|
|
|
|
**何ができる?**
|
|
|
|
|
|
- JoinIR → MIR merge 時の variable_map 変化を可視化
|
|
|
|
|
|
- Pattern 3 のような複雑な PHI 接続を段階的に追跡
|
|
|
|
|
|
- Exit PHI が正しく variable_map に接続されたか確認
|
|
|
|
|
|
- バグ発見時間: **1.5時間 → 30秒** に短縮!
|
|
|
|
|
|
|
|
|
|
|
|
**戦略的なトレース点**:
|
|
|
|
|
|
- `pattern3_before_merge`: Merge 実行前の ValueId マッピング
|
|
|
|
|
|
- `pattern3_after_merge`: Merge 直後の状態
|
|
|
|
|
|
- `pattern3_exit_phi_connected`: Exit PHI が variable に接続された最終状態
|
|
|
|
|
|
|
|
|
|
|
|
**使用例**:
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# Pattern 3 バグの高速診断
|
|
|
|
|
|
NYASH_TRACE_VARMAP=1 cargo test --release test_loop_with_if_phi_sum -- --nocapture 2>&1 | tail -20
|
|
|
|
|
|
# → sum の ValueId 変化が一目瞭然!
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-11-20 17:12:46 +09:00
|
|
|
|
#### 📊 **重要な発見:HashMap非決定性**
|
|
|
|
|
|
- Rustの`HashMap`/`HashSet`はHashDoS対策でランダムseed使用
|
|
|
|
|
|
- PHI生成順序が毎回変わる → ValueId割り当てが変動
|
|
|
|
|
|
- **解決**: `BTreeSet`/`BTreeMap`で決定的イテレーション保証
|
|
|
|
|
|
- **残課題**: `variable_map: HashMap<String, ValueId>` (builder.rs等)
|
2025-11-15 00:02:13 +09:00
|
|
|
|
|
2025-12-04 19:24:28 +09:00
|
|
|
|
#### 🔍 **hako_check - セルフホスティング.hako品質チェック** (Phase 153復活!)
|
|
|
|
|
|
|
|
|
|
|
|
**hako_check ツール**はセルフホスティングコンパイラの .hako ファイルをコード品質チェック!
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 基本的な使い方
|
|
|
|
|
|
./tools/hako_check.sh file.hako
|
|
|
|
|
|
./tools/hako_check.sh directory/
|
|
|
|
|
|
|
|
|
|
|
|
# 実用的な使い方
|
|
|
|
|
|
./tools/hako_check.sh apps/selfhost-runtime/boxes_std.hako # 単発チェック
|
|
|
|
|
|
./tools/hako_check.sh apps/selfhost-runtime/ --dead-code # デッドコード検出
|
|
|
|
|
|
./tools/hako_check.sh apps/selfhost-runtime/ --format json-lsp # エディタ統合用
|
|
|
|
|
|
|
|
|
|
|
|
# デバッグ情報が必要な時
|
|
|
|
|
|
HAKO_CHECK_DEBUG=1 ./tools/hako_check.sh file.hako # [DEBUG] 出力を含める
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**環境変数制御**:
|
|
|
|
|
|
- `HAKO_CHECK_DEBUG=0` (デフォルト): デバッグ出力フィルタリング(クリーンな出力)
|
|
|
|
|
|
- `HAKO_CHECK_DEBUG=1`: 詳細デバッグ出力([DEBUG/...], [ControlForm::...] 等を表示)
|
|
|
|
|
|
- `HAKO_CHECK_VERBOSE=1`: 詳細モード(将来実装予定)
|
|
|
|
|
|
|
|
|
|
|
|
**検出ルール** (Phase 153):
|
|
|
|
|
|
- **HC011**: 呼ばれないメソッド(unreachable method)
|
|
|
|
|
|
- **HC012**: 参照されないスタティックボックス(dead static box)
|
|
|
|
|
|
- **HC019**: 到達不可能なコード(unreachable code / dead code)
|
|
|
|
|
|
- その他: arity mismatch など 15+ ルール
|
|
|
|
|
|
|
|
|
|
|
|
**出力例**:
|
|
|
|
|
|
```
|
|
|
|
|
|
[ERROR] ❌ MIR compilation error: Undefined variable: void
|
|
|
|
|
|
[lint/summary] failures: 1
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**次のステップ (Phase 2-3)**:
|
|
|
|
|
|
- Rust側のデバッグ出力環境変数制御化
|
|
|
|
|
|
- エラーメッセージの構造化(ファイル:行番号表示、ヒント追加)
|
|
|
|
|
|
|
docs(joinir): Phase 33 Completion - Box Theory Modularization Summary
## Phase 33: Complete JoinIR Modularization via Box Theory (3 Phases)
This commit consolidates the comprehensive modularization work across three phases:
- Phase 33-10: Exit Line Modularization (ExitLineReconnector + ExitMetaCollector Boxes)
- Phase 33-11: Quick Wins (Pattern 4 stub clarification, unused imports cleanup)
- Phase 33-12: Large Module Modularization (split mod.rs, loop_patterns.rs restructuring)
### Phase 33-10: Exit Line Modularization (Boxes P0-P1)
**New Files**:
- `exit_line/reconnector.rs` (+130 lines): ExitLineReconnector Box
- Responsibility: Update host variable_map with remapped exit values
- Design: Phase 197-B multi-carrier support (each carrier gets specific remapped value)
- Pure side effects: Only updates builder.variable_map
- Testing: Independent unit testing possible without full merge machinery
- `exit_line/meta_collector.rs` (+102 lines): ExitMetaCollector Box
- Responsibility: Construct exit_bindings from ExitMeta + variable_map lookup
- Design: Pure function philosophy (no side effects except variable_map reads)
- Reusability: Pattern-agnostic (works for Pattern 1, 2, 3, 4)
- Algorithm: For each carrier in exit_meta, lookup host ValueId, create binding
- `exit_line/mod.rs` (+58 lines): ExitLineOrchestrator facade
- Coordination: Orchestrates Phase 6 boundary reconnection
- Architecture: Delegates to ExitLineReconnector (demonstrates Box composition)
- Documentation: Comprehensive header explaining Box Theory modularization benefits
**Modified Files**:
- `merge/mod.rs` (-91 lines): Extracted reconnect_boundary() → ExitLineReconnector
- Made exit_line module public (was mod, now pub mod)
- Phase 6 delegation: Local function call → ExitLineOrchestrator::execute()
- Added exit_bindings' join_exit_values to used_values for remapping (Phase 172-3)
- `patterns/pattern2_with_break.rs` (-20 lines): Uses ExitMetaCollector
- Removed: Manual exit_binding construction loop
- Added: Delegated ExitMetaCollector::collect() for cleaner caller code
- Benefit: Reusable collector for all pattern lowerers (Pattern 1-4)
**Design Philosophy** (Exit Line Module):
Each Box handles one concern:
- ExitLineReconnector: Updates host variable_map with exit values
- ExitMetaCollector: Constructs exit_bindings from ExitMeta
- ExitLineOrchestrator: Orchestrates Phase 6 reconnection
### Phase 33-11: Quick Wins
**Pattern 4 Stub Clarification** (+132 lines):
- Added comprehensive header documentation (106 lines)
- Made `lower()` return explicit error (not silent stub)
- Migration guide: Workarounds using Pattern 1-3
- New file: `docs/development/proposals/phase-195-pattern4.md` (implementation plan)
- Status: Formal documentation that Pattern 4 is deferred to Phase 195
**Cleanup**:
- Removed unused imports via `cargo fix` (-10 lines, 11 files)
- Files affected: generic_case_a/ (5 files), if_merge.rs, if_select.rs, etc.
### Phase 33-12: Large Module Modularization
**New Files** (Modularization):
- `if_lowering_router.rs` (172 lines): If-expression routing
- Extracted from mod.rs lines 201-423
- Routes if-expressions to appropriate JoinIR lowering strategies
- Single responsibility: If expression dispatch
- `loop_pattern_router.rs` (149 lines): Loop pattern routing
- Extracted from mod.rs lines 424-511
- Routes loop patterns to Pattern 1-4 implementations
- Design: Dispatcher pattern for pattern selection
- `loop_patterns/mod.rs` (178 lines): Pattern dispatcher + shared utilities
- Created as coordinator for per-pattern files
- Exports all pattern functions via pub use
- Utilities: Shared logic across pattern lowerers
- `loop_patterns/simple_while.rs` (225 lines): Pattern 1 lowering
- `loop_patterns/with_break.rs` (129 lines): Pattern 2 lowering
- `loop_patterns/with_if_phi.rs` (123 lines): Pattern 3 lowering
- `loop_patterns/with_continue.rs` (129 lines): Pattern 4 stub
**Modified Files** (Refactoring):
- `lowering/mod.rs` (511 → 221 lines, -57%):
- Removed try_lower_if_to_joinir() (223 lines) → if_lowering_router.rs
- Removed try_lower_loop_pattern_to_joinir() (88 lines) → loop_pattern_router.rs
- Result: Cleaner core module with routers handling dispatch
- `loop_patterns.rs` → Re-export wrapper (backward compatibility)
**Result**: Clearer code organization
- Monolithic mod.rs split into focused routers
- Large loop_patterns.rs split into per-pattern files
- Better maintainability and testability
### Phase 33: Comprehensive Documentation
**New Architecture Documentation** (+489 lines):
- File: `docs/development/architecture/phase-33-modularization.md`
- Coverage: All three phases (33-10, 33-11, 33-12)
- Content:
- Box Theory principles applied
- Complete statistics table (commits, files, lines)
- Code quality analysis
- Module structure diagrams
- Design patterns explanation
- Testing strategy
- Future work recommendations
- References to implementation details
**Source Code Comments** (+165 lines):
- `exit_line/mod.rs`: Box Theory modularization context
- `exit_line/reconnector.rs`: Design notes on multi-carrier support
- `exit_line/meta_collector.rs`: Pure function philosophy
- `pattern4_with_continue.rs`: Comprehensive stub documentation + migration paths
- `if_lowering_router.rs`: Modularization context
- `loop_pattern_router.rs`: Pattern dispatch documentation
- `loop_patterns/mod.rs`: Per-pattern structure benefits
**Project Documentation** (+45 lines):
- CLAUDE.md: Phase 33 completion summary + links
- CURRENT_TASK.md: Current state and next phases
### Metrics Summary
**Phase 33 Total Impact**:
- Commits: 5 commits (P0, P1, Quick Wins×2, P2)
- Files Changed: 15 files modified/created
- Lines Added: ~1,500 lines (Boxes + documentation + comments)
- Lines Removed: ~200 lines (monolithic extractions)
- Code Organization: 2 monolithic files → 7 focused modules
- Documentation: 1 comprehensive architecture guide created
**mod.rs Impact** (Phase 33-12 P2):
- Before: 511 lines (monolithic)
- After: 221 lines (dispatcher + utilities)
- Reduction: -57% (290 lines extracted)
**loop_patterns.rs Impact** (Phase 33-12 P2):
- Before: 735 lines (monolithic)
- After: 5 files in loop_patterns/ (178 + 225 + 129 + 123 + 129)
- Improvement: Per-pattern organization
### Box Theory Principles Applied
1. **Single Responsibility**: Each Box handles one concern
- ExitLineReconnector: variable_map updates
- ExitMetaCollector: exit_binding construction
- if_lowering_router: if-expression dispatch
- loop_pattern_router: loop pattern dispatch
- Per-pattern files: Individual pattern lowering
2. **Clear Boundaries**: Public/private visibility enforced
- Boxes have explicit input/output contracts
- Module boundaries clearly defined
- Re-exports for backward compatibility
3. **Replaceability**: Boxes can be swapped/upgraded independently
- ExitLineReconnector can be optimized without affecting ExitMetaCollector
- Per-pattern files can be improved individually
- Router logic decoupled from lowering implementations
4. **Testability**: Smaller modules easier to unit test
- ExitMetaCollector can be tested independently
- ExitLineReconnector mockable with simple boundary
- Pattern lowerers isolated in separate files
### Design Patterns Introduced
1. **Facade Pattern**: ExitLineOrchestrator
- Single-entry point for Phase 6 reconnection
- Hides complexity of multi-step process
- Coordinates ExitLineReconnector + other steps
2. **Dispatcher Pattern**: if_lowering_router + loop_pattern_router
- Centralized routing logic
- Easy to add new strategies
- Separates dispatch from implementation
3. **Pure Function Pattern**: ExitMetaCollector::collect()
- No side effects (except reading variable_map)
- Easy to test, reason about, parallelize
- Reusable across all pattern lowerers
### Testing Strategy
- **Unit Tests**: Can test ExitMetaCollector independently
- **Integration Tests**: Verify boundary reconnection works end-to-end
- **Regression Tests**: Pattern 2 simple loop still passes
- **Backward Compatibility**: All existing imports still work
### Future Work
- **Phase 33-13**: Consolidate whitespace utilities (expected -100 lines)
- **Phase 34**: Extract inline_boundary validators (expected 3h effort)
- **Phase 35**: Mark loop_patterns_old.rs as legacy and remove (Phase 35+)
- **Phase 195**: Implement Pattern 4 (continue) fully
- **Phase 200+**: More complex loop patterns and optimizations
🧱 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-07 04:03:42 +09:00
|
|
|
|
### 🎉 **Phase 33: Box Theory Modularization Complete!** (2025-12-07)
|
|
|
|
|
|
- **Phases 33-10 to 33-12 completed** (5 commits, +421 net lines, 10 new files)
|
|
|
|
|
|
- **Exit line architecture** (ExitLineReconnector, ExitMetaCollector Boxes)
|
|
|
|
|
|
- **Large file restructuring** (mod.rs 511→221 lines, loop_patterns 735→7 files)
|
|
|
|
|
|
- **Code quality** (single responsibility, testability, maintainability dramatically improved)
|
|
|
|
|
|
- **Documentation** (comprehensive comments + architecture guide)
|
|
|
|
|
|
- **Build status**: ✅ All tests passing
|
|
|
|
|
|
- **Architecture doc**: [phase-33-modularization.md](docs/development/architecture/phase-33-modularization.md)
|
|
|
|
|
|
|
|
|
|
|
|
#### Phase 33-10: Exit Line Modularization
|
|
|
|
|
|
- **✅ 箱化モジュール化完了**: ExitLineReconnector, ExitMetaCollector, ExitLineOrchestrator
|
|
|
|
|
|
- **✅ 単一責任の原則**: 各Boxが1つの関心事のみ処理
|
|
|
|
|
|
- **✅ 再利用性**: Pattern 3, 4等で共通利用可能
|
|
|
|
|
|
- **✅ テスト容易性**: 独立したBoxで単体テスト可能
|
|
|
|
|
|
|
|
|
|
|
|
#### Phase 33-11: Quick Wins
|
|
|
|
|
|
- **✅ 未使用import削除**: cargo fix による自動クリーンアップ(11ファイル)
|
|
|
|
|
|
- **✅ Pattern 4明確化**: Stub→明示的エラー、マイグレーションガイド追加
|
|
|
|
|
|
- **✅ Dispatcher統一確認**: common.rsで既に統一済み
|
|
|
|
|
|
|
|
|
|
|
|
#### Phase 33-12: Structural Improvements
|
|
|
|
|
|
- **✅ If lowering router**: 専用ファイル分離(172行)
|
|
|
|
|
|
- **✅ Loop pattern router**: 専用ファイル分離(149行)
|
|
|
|
|
|
- **✅ Pattern別ファイル**: 735行→7ファイル(Pattern 1-4各独立)
|
|
|
|
|
|
- **✅ mod.rs削減**: 511→221行(57%削減)
|
2025-11-27 17:05:46 +09:00
|
|
|
|
|
2025-11-15 00:02:13 +09:00
|
|
|
|
### 🎉 **Phase 25 MVP 完全成功!** (2025-11-15)
|
|
|
|
|
|
- **numeric_core BoxCall→Call変換** 完全動作!
|
|
|
|
|
|
- **2つの重大バグ修正**:
|
|
|
|
|
|
1. nyash.toml モジュールマッピング欠落(224行目追加)
|
|
|
|
|
|
2. numeric_core.hako JSONパース処理のバグ(全JSON→個別命令処理に修正)
|
|
|
|
|
|
- **型検出システム正常動作**: 型テーブルサイズ 1→3、MatI64インスタンス完全検出
|
|
|
|
|
|
- **変換例**: `BoxCall(MatI64, "mul_naive")` → `Call("NyNumericMatI64.mul_naive")`
|
|
|
|
|
|
- **検証**: 全テストパス(単体・E2E・変換確認・残骸確認)✅
|
2025-11-15 05:42:32 +09:00
|
|
|
|
- **🔧 追加修正(継続セッション)**:
|
|
|
|
|
|
- **PHI型伝播修正**: 4回反復型伝播で copy → phi → copy チェーン完全対応(8d9bbc40)
|
|
|
|
|
|
- **環境変数伝播**: microbench.sh に NYASH_AOT_NUMERIC_CORE 伝播追加(3d082ca1)
|
|
|
|
|
|
- **両SSAパターン検証**: 冗長版(13 PHI)& 最適化版(1 PHI)両方で変換成功確認 ✅
|
|
|
|
|
|
- **ログ転送問題根治**: hakorune_emit_mir.sh の provider 経路にログ転送追加(ユーザー実装)
|
|
|
|
|
|
- **STRICT mode 調査**: check_numeric_core_invariants() 実装済みだが未使用(タイミング問題で無効化)
|
|
|
|
|
|
- **🛠️ 推奨ワークフロー確立**: `tools/dev_numeric_core_prep.sh` で環境変数自動設定 ✅
|
2025-09-28 12:19:49 +09:00
|
|
|
|
|
|
|
|
|
|
### 🎯 **Phase 15: セルフホスティング実行器統一化**
|
|
|
|
|
|
- **Rust VM + LLVM 2本柱体制**で開発中
|
|
|
|
|
|
- **Core Box統一化**: 3-tier → 2-tier 統一完了
|
|
|
|
|
|
- **MIR Callee型革新**: 型安全な関数解決システム実装済み
|
|
|
|
|
|
|
|
|
|
|
|
### 🤝 **AI協働開発体制**
|
|
|
|
|
|
```
|
|
|
|
|
|
Claude(私): 戦略・分析・レビュー
|
|
|
|
|
|
ChatGPT: 実装・検証
|
|
|
|
|
|
|
|
|
|
|
|
現在の合意:
|
|
|
|
|
|
✅ Phase 15集中(セルフホスト優先)
|
|
|
|
|
|
✅ Builder根治は段階的(3 Phase戦略)
|
|
|
|
|
|
✅ 息が合っている状態: 良好
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 📚 **重要リソース**
|
2025-11-23 05:53:27 +09:00
|
|
|
|
- **開発マスタープラン**: [00_MASTER_ROADMAP.md](docs/private/roadmap2/phases/00_MASTER_ROADMAP.md)
|
2025-09-28 12:19:49 +09:00
|
|
|
|
- **現在のタスク**: [CURRENT_TASK.md](CURRENT_TASK.md)
|
2025-11-23 05:53:27 +09:00
|
|
|
|
- **Phase 15詳細**: [docs/private/roadmap2/phases/phase-15/](docs/private/roadmap2/phases/phase-15/)
|
2025-09-28 12:19:49 +09:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2025-09-24 21:45:27 +09:00
|
|
|
|
## 🚨 重要:スモークテストはv2構造を使う!
|
2025-09-27 08:45:25 +09:00
|
|
|
|
- 📖 **スモークテスト完全ガイド**: [tools/smokes/README.md](tools/smokes/README.md)
|
|
|
|
|
|
- 📁 **v2詳細ドキュメント**: [tools/smokes/v2/README.md](tools/smokes/v2/README.md)
|
2025-09-24 21:45:27 +09:00
|
|
|
|
|
2025-09-28 01:33:58 +09:00
|
|
|
|
### 🎯 2つのベースライン(Two Baselines)
|
|
|
|
|
|
|
|
|
|
|
|
#### 📦 VM ライン(Rust VM - 既定)
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# ビルド
|
|
|
|
|
|
cargo build --release
|
|
|
|
|
|
|
|
|
|
|
|
# 一括スモークテスト
|
|
|
|
|
|
tools/smokes/v2/run.sh --profile quick
|
|
|
|
|
|
|
2025-09-28 12:19:49 +09:00
|
|
|
|
# 個別スモークテスト(フィルタ指定)
|
2025-09-28 01:33:58 +09:00
|
|
|
|
tools/smokes/v2/run.sh --profile quick --filter "<glob>"
|
2025-09-28 12:19:49 +09:00
|
|
|
|
# 例: --filter "userbox_*" # User Box関連のみ
|
|
|
|
|
|
# 例: --filter "json_*" # JSON関連のみ
|
|
|
|
|
|
|
|
|
|
|
|
# 単発スクリプト実行
|
|
|
|
|
|
bash tools/smokes/v2/profiles/quick/core/selfhost_mir_m3_jump_vm.sh
|
2025-09-28 01:33:58 +09:00
|
|
|
|
|
|
|
|
|
|
# 単発実行(参考)
|
2025-11-06 15:41:52 +09:00
|
|
|
|
./target/release/nyash --backend vm apps/APP/main.hako
|
2025-09-28 01:33:58 +09:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### ⚡ llvmlite ライン(LLVMハーネス)
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 前提: Python3 + llvmlite
|
|
|
|
|
|
# 未導入なら: pip install llvmlite
|
|
|
|
|
|
|
2025-09-28 12:19:49 +09:00
|
|
|
|
# 一括スモークテスト(そのまま実行)
|
|
|
|
|
|
tools/smokes/v2/run.sh --profile integration
|
2025-09-28 01:33:58 +09:00
|
|
|
|
|
2025-09-28 12:19:49 +09:00
|
|
|
|
# 警告低減版(ビルド後に実行・推奨)
|
|
|
|
|
|
cargo build --release -p nyash-llvm-compiler && cargo build --release --features llvm
|
2025-09-28 01:33:58 +09:00
|
|
|
|
tools/smokes/v2/run.sh --profile integration
|
|
|
|
|
|
|
2025-09-28 12:19:49 +09:00
|
|
|
|
# 個別スモークテスト(フィルタ指定)
|
2025-09-28 01:33:58 +09:00
|
|
|
|
tools/smokes/v2/run.sh --profile integration --filter "<glob>"
|
2025-09-28 12:19:49 +09:00
|
|
|
|
# 例: --filter "json_*" # JSON関連のみ
|
|
|
|
|
|
# 例: --filter "vm_llvm_*" # VM/LLVM比較系のみ
|
2025-09-28 01:33:58 +09:00
|
|
|
|
|
|
|
|
|
|
# 単発実行
|
2025-11-06 15:41:52 +09:00
|
|
|
|
NYASH_LLVM_USE_HARNESS=1 ./target/release/nyash --backend llvm apps/tests/peek_expr_block.hako
|
2025-09-28 01:33:58 +09:00
|
|
|
|
|
|
|
|
|
|
# 有効化確認
|
|
|
|
|
|
./target/release/nyash --version | rg -i 'features.*llvm'
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**💡 ポイント**:
|
|
|
|
|
|
- **VM ライン**: 開発・デバッグ・検証用(高速・型安全)
|
|
|
|
|
|
- **llvmlite ライン**: 本番・最適化・配布用(実証済み安定性)
|
|
|
|
|
|
- 両方のテストが通ることで品質保証!
|
|
|
|
|
|
|
2025-11-25 09:30:48 +09:00
|
|
|
|
#### 🔥 セルフホストライン(.hako コンパイラ - 爆速開発!)
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 🚀 ビルド不要!.hako 編集 → 即実行で爆速イテレーション
|
|
|
|
|
|
NYASH_USE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
|
|
|
|
|
./target/release/hakorune program.hako
|
|
|
|
|
|
|
|
|
|
|
|
# タイムアウト延長(大きいファイル用)
|
|
|
|
|
|
NYASH_USE_NY_COMPILER=1 NYASH_NY_COMPILER_TIMEOUT_MS=60000 \
|
|
|
|
|
|
NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
|
|
|
|
|
./target/release/hakorune program.hako
|
|
|
|
|
|
|
|
|
|
|
|
# デバッグ出力付き
|
|
|
|
|
|
NYASH_USE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
|
|
|
|
|
NYASH_CLI_VERBOSE=1 \
|
|
|
|
|
|
./target/release/hakorune program.hako
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**💡 セルフホストの価値**:
|
|
|
|
|
|
- **cargo build 不要!** .hako 変更 → 即テスト(1-2分の待ち時間ゼロ)
|
|
|
|
|
|
- **開発加速**: Rust パーサー強化のドライバーにもなる
|
|
|
|
|
|
- **復活**: 2025-11-25 に StringBox.get() バグ修正で復活 (`4120ab65`)
|
|
|
|
|
|
|
2025-12-04 14:33:30 +09:00
|
|
|
|
#### 🔍 コード品質チェック - hako_check(Phase 153 復活!)
|
|
|
|
|
|
|
|
|
|
|
|
**hako_check を使いながら .hako 開発するワークフロー**:
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# Step 1: .hako を実行テスト
|
|
|
|
|
|
NYASH_USE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
|
|
|
|
|
./target/release/hakorune program.hako
|
|
|
|
|
|
|
|
|
|
|
|
# Step 2: コード品質チェック(基本チェック)
|
|
|
|
|
|
./tools/hako_check.sh program.hako
|
|
|
|
|
|
|
|
|
|
|
|
# Step 3: デッドコード検出(Phase 153 新機能!)
|
|
|
|
|
|
./tools/hako_check.sh --dead-code program.hako
|
|
|
|
|
|
# → [HC019] unreachable method (dead code)
|
|
|
|
|
|
# → [HC019] dead static box (never referenced)
|
|
|
|
|
|
|
|
|
|
|
|
# Step 4: 特定ルールのみチェック
|
|
|
|
|
|
./tools/hako_check.sh --rules dead_code program.hako
|
|
|
|
|
|
|
|
|
|
|
|
# Step 5: JSON-LSP フォーマット出力(エディタ統合用)
|
|
|
|
|
|
./tools/hako_check.sh --format json-lsp --dead-code program.hako
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**開発フロー例**:
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# .hako ファイル編集
|
|
|
|
|
|
vim src/compiler/my_feature.hako
|
|
|
|
|
|
|
|
|
|
|
|
# 即座に実行テスト(cargo build 不要!)
|
|
|
|
|
|
NYASH_USE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
|
|
|
|
|
./target/release/hakorune src/compiler/my_feature.hako
|
|
|
|
|
|
|
|
|
|
|
|
# コード品質確認(未使用関数・デッドコード検出)
|
|
|
|
|
|
./tools/hako_check.sh --dead-code src/compiler/my_feature.hako
|
|
|
|
|
|
|
|
|
|
|
|
# 問題があれば修正 → 再実行
|
|
|
|
|
|
# (ループ高速!セルフホスト + hako_check で完全な検証ワークフロー)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**チェック内容** (Phase 153):
|
|
|
|
|
|
- **HC011**: 呼ばれないメソッド(デッドメソッド)
|
|
|
|
|
|
- **HC012**: 参照されないスタティックボックス
|
|
|
|
|
|
- **HC019**: 到達不可能な関数・ブロック(新!デッドコード検出)
|
|
|
|
|
|
- その他: arity mismatch など 15+ ルール
|
|
|
|
|
|
|
|
|
|
|
|
**💡 価値**:
|
|
|
|
|
|
- **JoinIR ベース**: コンパイラ側の制御フロー情報を活用(正確!)
|
|
|
|
|
|
- **.hako 移植時の安全ネット**: Phase 160+ で .hako JoinIR/MIR 移植するときの検証に使える
|
|
|
|
|
|
- **即座にフィードバック**: セルフホストの爆速開発と組み合わせ最強!
|
|
|
|
|
|
|
2025-08-26 19:13:57 +09:00
|
|
|
|
## Start Here (必ずここから)
|
2025-09-05 13:29:17 +09:00
|
|
|
|
- 現在のタスク: [CURRENT_TASK.md](CURRENT_TASK.md)
|
2025-09-17 10:58:12 +09:00
|
|
|
|
- 📁 **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/)
|
2025-08-31 06:22:48 +09:00
|
|
|
|
- ドキュメントハブ: [README.md](README.md)
|
2025-11-23 05:53:27 +09:00
|
|
|
|
- 🚀 **開発マスタープラン**: [00_MASTER_ROADMAP.md](docs/private/roadmap2/phases/00_MASTER_ROADMAP.md)
|
2025-08-31 06:22:48 +09:00
|
|
|
|
- 📊 **JIT統計JSONスキーマ(v1)**: [jit_stats_json_v1.md](docs/reference/jit/jit_stats_json_v1.md)
|
2025-08-28 09:26:58 +09:00
|
|
|
|
|
|
|
|
|
|
## 🧱 先頭原則: 「箱理論(Box-First)」で足場を積む
|
|
|
|
|
|
Nyashは「Everything is Box」。実装・最適化・検証のすべてを「箱」で分離・固定し、いつでも戻せる足場を積み木のように重ねる。
|
|
|
|
|
|
|
|
|
|
|
|
- 基本姿勢: 「まず箱に切り出す」→「境界をはっきりさせる」→「差し替え可能にする」
|
|
|
|
|
|
- 環境依存や一時的なフラグは、可能な限り「箱経由」に集約(例: JitConfigBox)
|
|
|
|
|
|
- VM/JIT/GC/スケジューラは箱化されたAPI越しに連携(直参照・直結合を避ける)
|
|
|
|
|
|
- いつでも戻せる: 機能フラグ・スコープ限定・デフォルトオフを活用し、破壊的変更を避ける
|
|
|
|
|
|
- 「限定スコープの足場」を先に立ててから最適化(戻りやすい積み木)
|
|
|
|
|
|
- AI補助時の注意: 「力づく最適化」を抑え、まず箱で境界を確立→小さく通す→可視化→次の一手
|
2025-09-25 16:03:29 +09:00
|
|
|
|
- **Fail-Fast原則**: フォールバック処理は原則禁止。エラーは早期に明示的に失敗させる。過去に何度も分岐ミスでエラーの発見が遅れたため、特にChatGPTが入れがちなフォールバック処理には要注意
|
2025-08-28 09:26:58 +09:00
|
|
|
|
|
|
|
|
|
|
実践テンプレート(開発時の合言葉)
|
|
|
|
|
|
- 「箱にする」: 設定・状態・橋渡しはBox化(例: JitConfigBox, HandleRegistry)
|
|
|
|
|
|
- 「境界を作る」: 変換は境界1箇所で(VMValue↔JitValue, Handle↔Arc)
|
|
|
|
|
|
- 「戻せる」: フラグ・feature・env/Boxで切替。panic→フォールバック経路を常設
|
|
|
|
|
|
- 「見える化」: ダンプ/JSON/DOTで可視化、回帰テストを最小構成で先に入れる
|
2025-09-25 16:03:29 +09:00
|
|
|
|
- 「Fail-Fast」: エラーは隠さず即座に失敗。フォールバックより明示的エラー
|
2025-08-28 09:26:58 +09:00
|
|
|
|
|
2025-08-26 20:30:07 +09:00
|
|
|
|
## 🤖 **Claude×Copilot×ChatGPT協調開発**
|
|
|
|
|
|
### 📋 **開発マスタープラン - 全フェーズの統合ロードマップ**
|
2025-11-23 05:53:27 +09:00
|
|
|
|
**すべてはここに書いてある!** → [00_MASTER_ROADMAP.md](docs/private/roadmap2/phases/00_MASTER_ROADMAP.md)
|
2025-08-14 13:00:44 +09:00
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
**現在のフェーズ:Phase 15 (Nyashセルフホスティング実行器統一化 - Rust VM + LLVM 2本柱体制)**
|
2025-09-24 02:13:43 +09:00
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
### 🏆 **Phase 15.5完了!アーキテクチャ革命達成**
|
|
|
|
|
|
- ✅ **Core Box Unification**: 3-tier → 2-tier 統一化完了
|
|
|
|
|
|
- ✅ **MIRビルダー統一化**: 約40行の特別処理削除
|
|
|
|
|
|
- ✅ **プラグインチェッカー**: ChatGPT5 Pro設計の安全性機能実装
|
|
|
|
|
|
- ✅ **StringBox問題根本解決**: slot_registry統一による完全修正
|
|
|
|
|
|
|
2025-09-24 12:57:33 +09:00
|
|
|
|
### 🎉 **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協働**: 歴史的画期的成果達成!
|
|
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
### 🚀 **Phase 15戦略確定: Rust VM + LLVM 2本柱**
|
|
|
|
|
|
```
|
|
|
|
|
|
【Rust VM】 開発・デバッグ・検証用(712行、高品質・型安全)
|
|
|
|
|
|
【LLVM】 本番・最適化・配布用(Python/llvmlite、実証済み)
|
|
|
|
|
|
【PyVM】 JSON v0ブリッジ専用(セルフホスティング・using処理のみ)
|
|
|
|
|
|
【削除完了】 レガシーインタープリター(~350行削除済み)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-11-23 05:53:27 +09:00
|
|
|
|
📋 **詳細計画**: [Phase 15.5 README](docs/private/roadmap2/phases/phase-15.5/README.md) | [CURRENT_TASK.md](CURRENT_TASK.md)
|
2025-08-13 18:19:49 +09:00
|
|
|
|
|
2025-08-26 01:42:18 +09:00
|
|
|
|
## 🏃 開発の基本方針: 80/20ルール - 完璧より進捗
|
|
|
|
|
|
|
|
|
|
|
|
### なぜこのルールか?
|
|
|
|
|
|
**実装後、必ず新しい問題や転回点が生まれるから。**
|
|
|
|
|
|
- 100%完璧を目指すと、要件が変わったときの手戻りが大きい
|
|
|
|
|
|
- 80%で動くものを作れば、実際の使用からフィードバックが得られる
|
|
|
|
|
|
- 残り20%は、本当に必要かどうか実装後に判断できる
|
|
|
|
|
|
|
|
|
|
|
|
### 実践方法
|
|
|
|
|
|
1. **まず動くものを作る**(80%)
|
2025-09-26 00:42:55 +09:00
|
|
|
|
2. **改善アイデアは `docs/development/proposals/ideas/` フォルダに記録**(20%)
|
2025-08-26 01:42:18 +09:00
|
|
|
|
3. **優先度に応じて後から改善**
|
|
|
|
|
|
|
2025-08-09 15:14:44 +09:00
|
|
|
|
## 🚀 クイックスタート
|
|
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
### 🎯 **2本柱実行方式** (推奨!)
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 🔧 開発・デバッグ・検証用 (Rust VM)
|
2025-11-06 15:41:52 +09:00
|
|
|
|
./target/release/nyash program.hako
|
|
|
|
|
|
./target/release/nyash --backend vm program.hako
|
2025-08-14 06:46:57 +09:00
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
# ⚡ 本番・最適化・配布用 (LLVM)
|
2025-11-06 15:41:52 +09:00
|
|
|
|
./target/release/nyash --backend llvm program.hako
|
2025-09-12 20:40:48 +09:00
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
# 🛡️ プラグインエラー対策
|
2025-11-06 15:41:52 +09:00
|
|
|
|
NYASH_DISABLE_PLUGINS=1 ./target/release/nyash program.hako
|
2025-09-05 15:18:13 +09:00
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
# 🔍 詳細診断
|
2025-11-06 15:41:52 +09:00
|
|
|
|
NYASH_CLI_VERBOSE=1 ./target/release/nyash program.hako
|
2025-09-24 09:30:42 +09:00
|
|
|
|
```
|
2025-09-05 15:18:13 +09:00
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
### 🚀 **Phase 15 セルフホスティング専用**
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# JSON v0ブリッジ(PyVM特殊用途)
|
2025-11-06 15:41:52 +09:00
|
|
|
|
NYASH_SELFHOST_EXEC=1 ./target/release/nyash program.hako
|
2025-09-05 15:18:13 +09:00
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
# using処理確認
|
2025-11-06 15:41:52 +09:00
|
|
|
|
./target/release/nyash --enable-using program_with_using.hako
|
2025-09-15 01:21:37 +09:00
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
# ラウンドトリップテスト
|
|
|
|
|
|
./tools/ny_roundtrip_smoke.sh
|
2025-09-05 15:18:13 +09:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-08-09 16:19:22 +09:00
|
|
|
|
### 🐧 Linux/WSL版
|
2025-08-09 15:14:44 +09:00
|
|
|
|
```bash
|
2025-09-24 09:30:42 +09:00
|
|
|
|
# 標準ビルド(2本柱対応)
|
|
|
|
|
|
cargo build --release
|
2025-08-14 06:46:57 +09:00
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
# 開発・デバッグ実行(Rust VM)
|
2025-11-06 15:41:52 +09:00
|
|
|
|
./target/release/nyash program.hako
|
2025-08-14 06:46:57 +09:00
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
# 本番・最適化実行(LLVM)
|
2025-11-06 15:41:52 +09:00
|
|
|
|
./target/release/nyash --backend llvm program.hako
|
2025-08-09 16:19:22 +09:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-08-31 06:22:48 +09:00
|
|
|
|
### 🪟 Windows版
|
2025-08-09 16:19:22 +09:00
|
|
|
|
```bash
|
2025-09-24 09:30:42 +09:00
|
|
|
|
# Windows実行ファイル生成
|
|
|
|
|
|
cargo build --release --target x86_64-pc-windows-msvc
|
2025-08-09 16:19:22 +09:00
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
# 生成された実行ファイル
|
2025-08-09 16:19:22 +09:00
|
|
|
|
target/x86_64-pc-windows-msvc/release/nyash.exe
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
### 🌐 **WASM/AOT版**(開発中)
|
2025-08-29 02:05:39 +09:00
|
|
|
|
```bash
|
2025-09-24 09:30:42 +09:00
|
|
|
|
# ⚠️ WASM機能: レガシーインタープリター削除により一時無効
|
|
|
|
|
|
# TODO: VM/LLVMベースのWASM実装に移行予定
|
2025-08-29 02:05:39 +09:00
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
# LLVM AOTコンパイル(実験的)
|
2025-11-06 15:41:52 +09:00
|
|
|
|
./target/release/nyash --backend llvm program.hako # 実行時最適化
|
2025-08-29 02:05:39 +09:00
|
|
|
|
```
|
2025-08-28 09:26:58 +09:00
|
|
|
|
|
2025-09-28 12:19:49 +09:00
|
|
|
|
### 🎯 **2本柱ビルド方法** (2025-09-28更新)
|
2025-09-10 20:56:14 +09:00
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
#### 🔨 **標準ビルド**(推奨)
|
2025-09-10 20:56:14 +09:00
|
|
|
|
```bash
|
2025-09-24 09:30:42 +09:00
|
|
|
|
# 標準ビルド(2本柱対応)
|
|
|
|
|
|
cargo build --release
|
2025-09-10 20:56:14 +09:00
|
|
|
|
|
2025-09-28 12:19:49 +09:00
|
|
|
|
# LLVM(llvmliteハーネス)付きビルド(本番用)
|
|
|
|
|
|
cargo build --release --features llvm
|
2025-09-10 20:56:14 +09:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
#### 📝 **2本柱テスト実行**
|
2025-09-10 20:56:14 +09:00
|
|
|
|
```bash
|
2025-09-24 09:30:42 +09:00
|
|
|
|
# 1. Rust VM実行 ✅(開発・デバッグ用)
|
|
|
|
|
|
cargo build --release
|
2025-11-06 15:41:52 +09:00
|
|
|
|
./target/release/nyash program.hako
|
2025-09-10 20:56:14 +09:00
|
|
|
|
|
2025-09-28 12:19:49 +09:00
|
|
|
|
# 2. LLVM実行 ✅(本番・最適化用, llvmliteハーネス)
|
|
|
|
|
|
cargo build --release --features llvm
|
2025-11-06 15:41:52 +09:00
|
|
|
|
NYASH_LLVM_USE_HARNESS=1 ./target/release/nyash --backend llvm program.hako
|
2025-09-10 20:56:14 +09:00
|
|
|
|
|
|
|
|
|
|
# 3. プラグインテスト実証済み ✅
|
2025-09-24 09:30:42 +09:00
|
|
|
|
# CounterBox
|
2025-11-06 15:41:52 +09:00
|
|
|
|
echo 'local c = new CounterBox(); c.inc(); c.inc(); print(c.get())' > test.hako
|
|
|
|
|
|
./target/release/nyash --backend llvm test.hako
|
2025-09-10 20:56:14 +09:00
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
# StringBox
|
2025-11-06 15:41:52 +09:00
|
|
|
|
echo 'local s = new StringBox(); print(s.concat("Hello"))' > test.hako
|
|
|
|
|
|
./target/release/nyash test.hako
|
2025-09-24 09:30:42 +09:00
|
|
|
|
|
2025-09-10 20:56:14 +09:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
⚠️ **ビルド時間の注意**:
|
2025-09-24 09:30:42 +09:00
|
|
|
|
- 標準ビルド: 1-2分(高速)
|
2025-09-10 20:56:14 +09:00
|
|
|
|
- LLVMビルド: 3-5分(時間がかかる)
|
|
|
|
|
|
- 必ず十分な時間設定で実行してください
|
|
|
|
|
|
|
2025-09-23 04:10:00 +09:00
|
|
|
|
## 🚨 **Claude迷子防止ガイド** - 基本的な使い方で悩む君へ!
|
|
|
|
|
|
|
|
|
|
|
|
### 😵 **迷ったらこれ!**(Claude Code専用)
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
2025-09-24 09:30:42 +09:00
|
|
|
|
# 🎯 基本実行(まずこれ)- Rust VM
|
2025-11-06 15:41:52 +09:00
|
|
|
|
./target/release/nyash program.hako
|
2025-09-23 04:10:00 +09:00
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
# ⚡ 本番・最適化実行 - LLVM
|
2025-11-06 15:41:52 +09:00
|
|
|
|
./target/release/nyash --backend llvm program.hako
|
2025-09-24 09:30:42 +09:00
|
|
|
|
|
|
|
|
|
|
# 🛡️ プラグインエラー対策(緊急時のみ)
|
2025-11-06 15:41:52 +09:00
|
|
|
|
NYASH_DISABLE_PLUGINS=1 ./target/release/nyash program.hako
|
2025-09-23 04:10:00 +09:00
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
# 🔍 詳細診断情報
|
2025-11-06 15:41:52 +09:00
|
|
|
|
NYASH_CLI_VERBOSE=1 ./target/release/nyash program.hako
|
2025-09-23 04:10:00 +09:00
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
# ⚠️ PyVM特殊用途(JSON v0ブリッジ・セルフホスト専用)
|
2025-11-06 15:41:52 +09:00
|
|
|
|
NYASH_SELFHOST_EXEC=1 ./target/release/nyash program.hako
|
2025-09-23 04:10:00 +09:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
### 🚨 **Phase 15戦略確定**
|
|
|
|
|
|
- ✅ **Rust VM + LLVM 2本柱体制**(開発集中)
|
|
|
|
|
|
- ✅ **PyVM特化保持**(JSON v0ブリッジ・using処理のみ)
|
|
|
|
|
|
- ✅ **レガシーインタープリター削除完了**(~350行削除済み)
|
|
|
|
|
|
- 🎯 **基本はRust VM、本番はLLVM、特殊用途のみPyVM**
|
2025-09-23 04:10:00 +09:00
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
### 📊 **環境変数優先度マトリックス**(Phase 15戦略版)
|
2025-09-23 04:10:00 +09:00
|
|
|
|
|
|
|
|
|
|
| 環境変数 | 必須度 | 用途 | 使用タイミング |
|
|
|
|
|
|
|---------|-------|-----|-------------|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
| `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`!
|
2025-09-23 04:10:00 +09:00
|
|
|
|
|
2025-09-24 09:30:42 +09:00
|
|
|
|
**⚠️ PyVM使用制限**: [PyVM使用ガイドライン](docs/reference/pyvm-usage-guidelines.md)で適切な用途を確認
|
2025-09-23 04:10:00 +09:00
|
|
|
|
|
2025-09-24 21:45:27 +09:00
|
|
|
|
### ✅ **using system完全実装完了!** (2025-09-24 ChatGPT実装完了確認済み)
|
2025-09-23 11:58:31 +09:00
|
|
|
|
|
2025-09-24 21:45:27 +09:00
|
|
|
|
**🎉 歴史的快挙**: `using nyashstd`が完璧動作!環境変数なしでデフォルト有効!
|
2025-09-23 12:39:35 +09:00
|
|
|
|
|
|
|
|
|
|
**✅ 実装完了内容**:
|
|
|
|
|
|
- **ビルトイン名前空間解決**: `nyashstd` → `builtin:nyashstd`の自動解決
|
|
|
|
|
|
- **自動コード生成**: nyashstdのstatic box群(string, integer, bool, array, console)を動的生成
|
2025-09-24 21:45:27 +09:00
|
|
|
|
- **環境変数不要**: デフォルトで有効(--enable-using不要)
|
2025-09-23 12:39:35 +09:00
|
|
|
|
|
|
|
|
|
|
**✅ 動作確認済み**:
|
2025-09-23 11:58:31 +09:00
|
|
|
|
```bash
|
2025-09-24 21:45:27 +09:00
|
|
|
|
# 基本using動作(環境変数・フラグ不要!)
|
2025-11-06 15:41:52 +09:00
|
|
|
|
echo 'using nyashstd' > test.hako
|
|
|
|
|
|
echo 'console.log("Hello!")' >> test.hako
|
|
|
|
|
|
./target/release/nyash test.hako
|
2025-09-24 21:45:27 +09:00
|
|
|
|
# 出力: Hello!
|
2025-09-23 12:39:35 +09:00
|
|
|
|
|
2025-09-24 21:45:27 +09:00
|
|
|
|
# 実装箇所
|
|
|
|
|
|
src/runner/pipeline.rs # builtin:nyashstd解決
|
|
|
|
|
|
src/runner/modes/common_util/resolve/strip.rs # コード生成
|
2025-09-23 11:58:31 +09:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-09-23 12:39:35 +09:00
|
|
|
|
**📦 含まれるnyashstd機能**:
|
|
|
|
|
|
- `string.create(text)`, `string.upper(str)`
|
|
|
|
|
|
- `integer.create(value)`, `bool.create(value)`, `array.create()`
|
|
|
|
|
|
- `console.log(message)`
|
|
|
|
|
|
|
2025-09-24 21:45:27 +09:00
|
|
|
|
**🎯 完成状態**: ChatGPT実装で`using nyashstd`完全動作中!
|
2025-09-23 11:58:31 +09:00
|
|
|
|
|
2025-09-24 01:05:44 +09:00
|
|
|
|
## 🧪 テストスクリプト参考集(既存のを活用しよう!)
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 基本的なテスト
|
2025-11-06 15:41:52 +09:00
|
|
|
|
./target/release/nyash local_tests/hello.hako # Hello World
|
|
|
|
|
|
./target/release/nyash local_tests/test_array_simple.hako # ArrayBox
|
|
|
|
|
|
./target/release/nyash apps/tests/string_ops_basic.hako # StringBox
|
2025-09-24 01:05:44 +09:00
|
|
|
|
|
|
|
|
|
|
# MIR確認用テスト
|
2025-11-06 15:41:52 +09:00
|
|
|
|
./target/release/nyash --dump-mir apps/tests/loop_min_while.hako
|
|
|
|
|
|
./target/release/nyash --dump-mir apps/tests/esc_dirname_smoke.hako
|
2025-09-24 01:05:44 +09:00
|
|
|
|
|
2025-09-24 03:09:47 +09:00
|
|
|
|
# 統一Call テスト(Phase A完成!)
|
2025-11-06 15:41:52 +09:00
|
|
|
|
NYASH_MIR_UNIFIED_CALL=1 ./target/release/nyash --dump-mir test_simple_call.hako
|
|
|
|
|
|
NYASH_MIR_UNIFIED_CALL=1 ./target/release/nyash --emit-mir-json test.json test.hako
|
2025-09-24 01:05:44 +09:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-08-09 15:14:44 +09:00
|
|
|
|
## ⚡ 重要な設計原則
|
|
|
|
|
|
|
|
|
|
|
|
### 🏗️ Everything is Box
|
|
|
|
|
|
- すべての値がBox(StringBox, IntegerBox, BoolBox等)
|
2025-09-04 06:27:39 +09:00
|
|
|
|
- ユーザー定義Box: `box ClassName { field1: TypeBox field2: TypeBox }`
|
2025-09-15 01:21:37 +09:00
|
|
|
|
- **MIR14命令**: たった14個の命令で全機能実現!
|
|
|
|
|
|
- 基本演算(5): Const, UnaryOp, BinOp, Compare, TypeOp
|
|
|
|
|
|
- メモリ(2): Load, Store
|
|
|
|
|
|
- 制御(4): Branch, Jump, Return, Phi
|
|
|
|
|
|
- Box(2): NewBox, BoxCall
|
|
|
|
|
|
- 外部(1): ExternCall
|
2025-08-09 15:14:44 +09:00
|
|
|
|
|
2025-08-31 06:22:48 +09:00
|
|
|
|
### 🌟 完全明示デリゲーション
|
2025-08-11 09:40:24 +09:00
|
|
|
|
```nyash
|
2025-08-26 06:30:01 +09:00
|
|
|
|
// デリゲーション構文(すべてのBoxで統一的に使える!)
|
2025-08-11 09:40:24 +09:00
|
|
|
|
box Child from Parent { // from構文でデリゲーション
|
2025-09-09 09:31:39 +09:00
|
|
|
|
birth(args) { // コンストラクタは「birth」に統一
|
|
|
|
|
|
from Parent.birth(args) // 親の初期化
|
2025-08-11 09:40:24 +09:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
override method() { // 明示的オーバーライド必須
|
|
|
|
|
|
from Parent.method() // 親メソッド呼び出し
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-08-26 06:30:01 +09:00
|
|
|
|
|
|
|
|
|
|
// ✅ ビルトインBox、プラグインBox、ユーザー定義Boxすべてで可能!
|
|
|
|
|
|
box MyString from StringBox { } // ビルトインBoxから
|
|
|
|
|
|
box MyFile from FileBox { } // プラグインBoxから
|
|
|
|
|
|
box Employee from Person { } // ユーザー定義Boxから
|
|
|
|
|
|
box Multi from StringBox, IntegerBox { } // 多重デリゲーションも可能!
|
2025-08-11 09:40:24 +09:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-08-09 15:14:44 +09:00
|
|
|
|
### 🔄 統一ループ構文
|
|
|
|
|
|
```nyash
|
|
|
|
|
|
// ✅ 唯一の正しい形式
|
|
|
|
|
|
loop(condition) { }
|
|
|
|
|
|
|
|
|
|
|
|
// ❌ 削除済み構文
|
|
|
|
|
|
while condition { } // 使用不可
|
|
|
|
|
|
loop() { } // 使用不可
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-08-31 06:22:48 +09:00
|
|
|
|
### 🌟 birth構文 - 生命をBoxに与える
|
2025-08-11 09:40:24 +09:00
|
|
|
|
```nyash
|
2025-08-15 19:34:26 +09:00
|
|
|
|
// 🌟 「Boxに生命を与える」直感的コンストラクタ
|
|
|
|
|
|
box Life {
|
2025-09-04 06:27:39 +09:00
|
|
|
|
name: StringBox
|
|
|
|
|
|
energy: IntegerBox
|
2025-08-11 09:40:24 +09:00
|
|
|
|
|
2025-08-15 19:34:26 +09:00
|
|
|
|
birth(lifeName) { // ← Everything is Box哲学を体現!
|
|
|
|
|
|
me.name = lifeName
|
|
|
|
|
|
me.energy = 100
|
|
|
|
|
|
print("🌟 " + lifeName + " が誕生しました!")
|
2025-08-11 09:40:24 +09:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-09-04 06:27:39 +09:00
|
|
|
|
// ✅ birth統一: すべてのBoxでbirthを使用
|
2025-08-31 06:22:48 +09:00
|
|
|
|
local alice = new Life("Alice") // birthが使われる
|
2025-08-15 19:34:26 +09:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-09-04 06:27:39 +09:00
|
|
|
|
### 🌟 ビルトインBox継承
|
2025-08-15 19:34:26 +09:00
|
|
|
|
```nyash
|
2025-09-04 06:27:39 +09:00
|
|
|
|
// ✅ Phase 12.7以降: birthで統一(packは廃止)
|
2025-08-15 19:34:26 +09:00
|
|
|
|
box EnhancedP2P from P2PBox {
|
2025-09-04 06:27:39 +09:00
|
|
|
|
additionalData: MapBox
|
|
|
|
|
|
|
|
|
|
|
|
birth(nodeId, transport) {
|
|
|
|
|
|
from P2PBox.birth(nodeId, transport) // 親のbirth呼び出し
|
|
|
|
|
|
me.additionalData = new MapBox()
|
2025-08-15 19:34:26 +09:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-08-11 09:40:24 +09:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-08-31 06:22:48 +09:00
|
|
|
|
### 🎯 正統派Nyashスタイル
|
2025-08-09 15:14:44 +09:00
|
|
|
|
```nyash
|
|
|
|
|
|
// 🚀 Static Box Main パターン - エントリーポイントの統一スタイル
|
|
|
|
|
|
static box Main {
|
2025-09-04 06:27:39 +09:00
|
|
|
|
console: ConsoleBox // フィールド宣言
|
|
|
|
|
|
result: IntegerBox
|
2025-08-09 15:14:44 +09:00
|
|
|
|
|
|
|
|
|
|
main() {
|
|
|
|
|
|
// ここから始まる!他の言語と同じエントリーポイント
|
|
|
|
|
|
me.console = new ConsoleBox()
|
|
|
|
|
|
me.console.log("🎉 Everything is Box!")
|
|
|
|
|
|
|
|
|
|
|
|
// local変数も使用可能
|
|
|
|
|
|
local temp
|
|
|
|
|
|
temp = 42
|
|
|
|
|
|
me.result = temp
|
|
|
|
|
|
|
|
|
|
|
|
return "Revolution completed!"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-08-31 06:22:48 +09:00
|
|
|
|
### 📝 変数宣言厳密化システム
|
2025-08-09 15:14:44 +09:00
|
|
|
|
```nyash
|
|
|
|
|
|
// 🔥 すべての変数は明示宣言必須!(メモリ安全性・非同期安全性保証)
|
|
|
|
|
|
|
|
|
|
|
|
// ✅ static box内のフィールド
|
|
|
|
|
|
static box Calculator {
|
2025-09-04 06:27:39 +09:00
|
|
|
|
result: IntegerBox // 明示宣言
|
|
|
|
|
|
memory: ArrayBox
|
2025-08-09 15:14:44 +09:00
|
|
|
|
|
|
|
|
|
|
calculate() {
|
|
|
|
|
|
me.result = 42 // ✅ フィールドアクセス
|
|
|
|
|
|
|
|
|
|
|
|
local temp // ✅ local変数宣言
|
|
|
|
|
|
temp = me.result * 2
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ❌ 未宣言変数への代入はエラー
|
|
|
|
|
|
x = 42 // Runtime Error: 未宣言変数 + 修正提案
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-08-31 06:22:48 +09:00
|
|
|
|
### ⚡ 実装済み演算子
|
2025-08-09 15:14:44 +09:00
|
|
|
|
```nyash
|
|
|
|
|
|
// 論理演算子(完全実装)
|
|
|
|
|
|
not condition // NOT演算子
|
|
|
|
|
|
a and b // AND演算子
|
|
|
|
|
|
a or b // OR演算子
|
|
|
|
|
|
|
|
|
|
|
|
// 算術演算子
|
|
|
|
|
|
a / b // 除算(ゼロ除算エラー対応済み)
|
|
|
|
|
|
a + b, a - b, a * b // 加算・減算・乗算
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-09-23 02:03:48 +09:00
|
|
|
|
### 🎯 match式(パターンマッチング)
|
2025-09-14 19:26:46 +09:00
|
|
|
|
```nyash
|
|
|
|
|
|
// 値を返す式として使用
|
2025-09-23 02:03:48 +09:00
|
|
|
|
local dv = match d {
|
2025-09-14 19:26:46 +09:00
|
|
|
|
"0" => 0,
|
|
|
|
|
|
"1" => 1,
|
|
|
|
|
|
"2" => 2,
|
2025-09-23 02:03:48 +09:00
|
|
|
|
_ => 0
|
2025-09-14 19:26:46 +09:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ブロックで複雑な処理も可能
|
2025-09-23 02:03:48 +09:00
|
|
|
|
local result = match status {
|
2025-09-14 19:26:46 +09:00
|
|
|
|
"success" => { log("OK"); 200 }
|
|
|
|
|
|
"error" => { log("NG"); 500 }
|
2025-09-23 02:03:48 +09:00
|
|
|
|
_ => 404
|
2025-09-14 19:26:46 +09:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 文として使用(値を捨てる)
|
2025-09-23 02:03:48 +09:00
|
|
|
|
match action {
|
2025-09-14 19:26:46 +09:00
|
|
|
|
"save" => save_data()
|
|
|
|
|
|
"load" => load_data()
|
2025-09-23 02:03:48 +09:00
|
|
|
|
_ => print("Unknown")
|
2025-09-14 19:26:46 +09:00
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-08-09 15:14:44 +09:00
|
|
|
|
### ⚠️ 重要な注意点
|
|
|
|
|
|
```nyash
|
2025-09-04 06:27:39 +09:00
|
|
|
|
// ✅ 正しい書き方(Phase 12.7文法改革後)
|
|
|
|
|
|
box MyBox {
|
|
|
|
|
|
field1: TypeBox
|
|
|
|
|
|
field2: TypeBox
|
|
|
|
|
|
|
|
|
|
|
|
birth() {
|
|
|
|
|
|
// 初期化処理
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-08-09 15:14:44 +09:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-09-11 21:42:40 +09:00
|
|
|
|
### 🏗️ アーキテクチャ決定事項(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)
|
|
|
|
|
|
|
2025-08-31 06:22:48 +09:00
|
|
|
|
## 📚 ドキュメント構造
|
|
|
|
|
|
|
|
|
|
|
|
### 🎯 最重要ドキュメント(開発者向け)
|
2025-11-23 05:53:27 +09:00
|
|
|
|
- **[Phase 15 セルフホスティング計画](docs/private/roadmap2/phases/phase-15/self-hosting-plan.txt)** - 80k→20k行革命
|
|
|
|
|
|
- **[Phase 15 ROADMAP](docs/private/roadmap2/phases/phase-15/ROADMAP.md)** - 現在の進捗チェックリスト
|
|
|
|
|
|
- **[Phase 15 INDEX](docs/private/roadmap2/phases/phase-15/INDEX.md)** - 入口の統合
|
2025-09-06 06:24:08 +09:00
|
|
|
|
- **[CURRENT_TASK.md](CURRENT_TASK.md)** - 現在進行状況詳細
|
2025-08-31 06:22:48 +09:00
|
|
|
|
- **[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/)
|
|
|
|
|
|
|
2025-09-12 21:06:47 +09:00
|
|
|
|
### 🎯 リファレンス
|
2025-09-28 12:19:49 +09:00
|
|
|
|
- **言語**:
|
|
|
|
|
|
- [Quick Reference](docs/reference/language/quick-reference.md) ⭐最優先 - 1ページ実用ガイド
|
|
|
|
|
|
- [LANGUAGE_REFERENCE_2025.md](docs/reference/language/LANGUAGE_REFERENCE_2025.md) - 完全仕様
|
2025-09-12 21:06:47 +09:00
|
|
|
|
- **MIR**: [INSTRUCTION_SET.md](docs/reference/mir/INSTRUCTION_SET.md)
|
|
|
|
|
|
- **API**: [boxes-system/](docs/reference/boxes-system/)
|
|
|
|
|
|
- **プラグイン**: [plugin-system/](docs/reference/plugin-system/)
|
2025-08-10 07:54:03 +09:00
|
|
|
|
|
|
|
|
|
|
|
2025-08-12 04:02:19 +09:00
|
|
|
|
## 📖 ドキュメントファースト開発(重要!)
|
|
|
|
|
|
|
|
|
|
|
|
### 🚨 開発手順の鉄則
|
|
|
|
|
|
**絶対にソースコードを直接読みに行かない!必ずこの順序で作業:**
|
|
|
|
|
|
|
|
|
|
|
|
1. **📚 ドキュメント確認** - まず既存ドキュメントをチェック
|
|
|
|
|
|
2. **🔄 ドキュメント更新** - 古い/不足している場合は更新
|
|
|
|
|
|
3. **💻 ソース確認** - それでも解決しない場合のみソースコード参照
|
|
|
|
|
|
|
2025-09-01 23:44:34 +09:00
|
|
|
|
### 🎯 最重要ドキュメント(2つの核心)
|
|
|
|
|
|
|
|
|
|
|
|
#### 🔤 言語仕様
|
2025-09-28 12:19:49 +09:00
|
|
|
|
- **[クイックリファレンス](docs/reference/language/quick-reference.md)** ⭐最優先 - 1ページ実用ガイド(ASI・Truthiness・演算子・型ルール)
|
2025-09-01 23:44:34 +09:00
|
|
|
|
- **[構文早見表](docs/quick-reference/syntax-cheatsheet.md)** - 基本構文・よくある間違い
|
|
|
|
|
|
- **[完全リファレンス](docs/reference/language/LANGUAGE_REFERENCE_2025.md)** - 言語仕様詳細
|
|
|
|
|
|
|
|
|
|
|
|
#### 📦 主要BOXのAPI
|
|
|
|
|
|
- **[Box/プラグイン関連](docs/reference/boxes-system/)** - APIと設計
|
|
|
|
|
|
|
2025-08-12 04:02:19 +09:00
|
|
|
|
### ⚡ API確認の実践例
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# ❌ 悪い例:いきなりソース読む
|
|
|
|
|
|
Read src/boxes/p2p_box.rs # 直接ソース参照
|
|
|
|
|
|
|
|
|
|
|
|
# ✅ 良い例:ドキュメント優先
|
2025-08-22 05:01:11 +09:00
|
|
|
|
Read docs/reference/ # まずドキュメント(API/言語仕様の入口)
|
2025-08-12 04:02:19 +09:00
|
|
|
|
# → 古い/不足 → ドキュメント更新
|
|
|
|
|
|
# → それでも不明 → ソース確認
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-09-24 12:22:08 +09:00
|
|
|
|
## 🔧 重要設計書(迷子防止ガイド)
|
|
|
|
|
|
|
|
|
|
|
|
**設計書がすぐ見つからない問題を解決!**
|
|
|
|
|
|
|
|
|
|
|
|
### 🏗️ **アーキテクチャ核心**
|
2025-12-08 18:36:13 +09:00
|
|
|
|
- **[JoinIR アーキテクチャ](docs/development/current/main/joinir-architecture-overview.md)** ⭐超重要 - Loop/If/ExitLine/Boundary/PHI の全体図
|
|
|
|
|
|
- **[名前空間・using system](docs/reference/language/using.md)** - ドット記法・スコープ演算子・Phase 15.5計画
|
2025-09-24 12:22:08 +09:00
|
|
|
|
- **[MIR Callee革新](docs/development/architecture/mir-callee-revolution.md)** - 関数呼び出し型安全化・シャドウイング解決
|
|
|
|
|
|
- **[構文早見表](docs/quick-reference/syntax-cheatsheet.md)** - 基本構文・よくある間違い
|
|
|
|
|
|
|
|
|
|
|
|
### 📋 **Phase 15.5重要資料**
|
2025-11-23 05:53:27 +09:00
|
|
|
|
- **[Core Box統一計画](docs/private/roadmap2/phases/phase-15.5/README.md)** - builtin vs plugin問題
|
2025-09-24 12:22:08 +09:00
|
|
|
|
- **[Box Factory設計](docs/reference/architecture/box-factory-design.md)** - 優先順位問題・解決策
|
2025-11-23 05:53:27 +09:00
|
|
|
|
- **[Callee実装ロードマップ](docs/private/roadmap2/phases/phase-15/mir-callee-implementation-roadmap.md)**
|
2025-09-24 12:22:08 +09:00
|
|
|
|
|
|
|
|
|
|
### 📖 **完全リファレンス**
|
|
|
|
|
|
- **[言語仕様](docs/reference/language/LANGUAGE_REFERENCE_2025.md)** - 全構文・セマンティクス
|
|
|
|
|
|
- **[プラグインシステム](docs/reference/plugin-system/)** - プラグイン開発ガイド
|
2025-11-23 05:53:27 +09:00
|
|
|
|
- **[Phase 15 INDEX](docs/private/roadmap2/phases/phase-15/INDEX.md)** - 現在進捗
|
2025-09-24 12:22:08 +09:00
|
|
|
|
|
2025-12-08 18:36:13 +09:00
|
|
|
|
### 🗂️ **control_flow モジュール構造**
|
|
|
|
|
|
**17モジュール分割完了** - `src/mir/builder/control_flow/` 参照
|
|
|
|
|
|
- `joinir/patterns/` - Pattern1-4ループ処理
|
|
|
|
|
|
- `joinir/merge/` - MIRマージ処理
|
|
|
|
|
|
- `exception/` - try/catch/throw処理
|
2025-12-05 21:12:47 +09:00
|
|
|
|
|
2025-08-09 15:14:44 +09:00
|
|
|
|
## 🔧 開発サポート
|
|
|
|
|
|
|
2025-09-05 15:18:13 +09:00
|
|
|
|
### 🎛️ 重要フラグ一覧(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出力
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-12-08 18:36:13 +09:00
|
|
|
|
### 🐍 Python LLVM バックエンド
|
|
|
|
|
|
**場所**: `/src/llvm_py/` - llvmliteベースのMIR14→LLVM変換(2000行程度)
|
2025-08-09 15:14:44 +09:00
|
|
|
|
```bash
|
2025-12-08 18:36:13 +09:00
|
|
|
|
cd src/llvm_py && ./venv/bin/python llvm_builder.py test.json -o output.o
|
2025-09-05 15:18:13 +09:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-09-26 00:42:55 +09:00
|
|
|
|
### 💡 アイデア管理(docs/development/proposals/ideas/ フォルダ)
|
2025-08-26 01:42:18 +09:00
|
|
|
|
|
|
|
|
|
|
**80/20ルールの「残り20%」を整理して管理**
|
|
|
|
|
|
|
|
|
|
|
|
```
|
2025-09-26 00:42:55 +09:00
|
|
|
|
docs/development/proposals/ideas/
|
2025-08-26 01:42:18 +09:00
|
|
|
|
├── improvements/ # 80%実装の残り20%改善候補
|
|
|
|
|
|
├── new-features/ # 新機能アイデア
|
|
|
|
|
|
└── other/ # その他すべて(調査、メモ、設計案)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-08-09 15:14:44 +09:00
|
|
|
|
### 🧪 テスト実行
|
2025-08-16 17:39:04 +09:00
|
|
|
|
|
2025-08-31 06:22:48 +09:00
|
|
|
|
**詳細**: [テスト実行ガイド](docs/guides/testing-guide.md)
|
2025-08-26 04:34:14 +09:00
|
|
|
|
|
2025-09-05 15:18:13 +09:00
|
|
|
|
#### 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
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-09-12 21:06:47 +09:00
|
|
|
|
**ルート汚染防止**: `local_tests/`ディレクトリを使う!
|
2025-08-26 04:34:14 +09:00
|
|
|
|
|
2025-08-17 18:32:15 +09:00
|
|
|
|
|
2025-08-09 15:14:44 +09:00
|
|
|
|
### 🐛 デバッグ
|
2025-08-10 11:32:32 +09:00
|
|
|
|
|
2025-08-31 06:22:48 +09:00
|
|
|
|
#### パーサー無限ループ対策
|
2025-08-10 11:32:32 +09:00
|
|
|
|
```bash
|
|
|
|
|
|
# 🔥 デバッグ燃料でパーサー制御
|
2025-11-06 15:41:52 +09:00
|
|
|
|
./target/release/nyash --debug-fuel 1000 program.hako # 1000回制限
|
|
|
|
|
|
./target/release/nyash --debug-fuel unlimited program.hako # 無制限
|
|
|
|
|
|
./target/release/nyash program.hako # デフォルト10万回
|
2025-08-10 11:32:32 +09:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-08-31 06:22:48 +09:00
|
|
|
|
**対応状況**: must_advance!マクロでパーサー制御完全実装済み✅
|
2025-08-09 15:14:44 +09:00
|
|
|
|
|
2025-08-21 21:35:17 +09:00
|
|
|
|
## 🤝 プロアクティブ開発方針
|
|
|
|
|
|
|
|
|
|
|
|
エラーを見つけた際は、単に報告するだけでなく:
|
|
|
|
|
|
|
|
|
|
|
|
1. **🔍 原因分析** - エラーの根本原因を探る
|
|
|
|
|
|
2. **📊 影響範囲** - 他のコードへの影響を調査
|
|
|
|
|
|
3. **💡 改善提案** - 関連する問題も含めて解決策を提示
|
|
|
|
|
|
4. **🧹 機会改善** - デッドコード削除など、ついでにできる改善も実施
|
|
|
|
|
|
|
2025-08-31 06:22:48 +09:00
|
|
|
|
詳細: [開発プラクティス](docs/guides/development-practices.md)
|
2025-08-21 21:35:17 +09:00
|
|
|
|
|
2025-09-15 18:44:49 +09:00
|
|
|
|
## 🎆 面白事件ログ(爆速開発の記録)
|
|
|
|
|
|
|
|
|
|
|
|
### 世界記録級の事件たち:
|
|
|
|
|
|
- **JIT1日完成事件**: 2週間予定が1日で完成(8/27伝説の日)
|
|
|
|
|
|
- **プラグインBox事件**: 「こらー!」でシングルトン拒否
|
|
|
|
|
|
- **AIが人間に相談**: ChatGPTが「助けて」と言った瞬間
|
|
|
|
|
|
- **危険センサー発動**: 「なんか変だにゃ」がAIを救う
|
|
|
|
|
|
|
|
|
|
|
|
詳細は[開発事件簿](docs/private/papers/paper-k-explosive-incidents/)へ!
|
|
|
|
|
|
|
2025-08-31 06:22:48 +09:00
|
|
|
|
## ⚠️ Claude実行環境の既知のバグ
|
2025-08-12 05:12:32 +09:00
|
|
|
|
|
2025-08-31 06:22:48 +09:00
|
|
|
|
詳細: [Claude環境の既知のバグ](docs/tools/claude-issues.md)
|
2025-08-12 05:12:32 +09:00
|
|
|
|
|
2025-08-31 06:22:48 +09:00
|
|
|
|
### 🐛 Bash Glob展開バグ(Issue #5811)
|
2025-08-12 05:12:32 +09:00
|
|
|
|
|
2025-08-31 06:22:48 +09:00
|
|
|
|
```bash
|
|
|
|
|
|
# ❌ 失敗するパターン
|
|
|
|
|
|
ls *.md | wc -l # エラー: "ls: 'glob' にアクセスできません"
|
2025-08-12 05:12:32 +09:00
|
|
|
|
|
2025-08-31 06:22:48 +09:00
|
|
|
|
# ✅ 回避策1: bash -c でラップ
|
|
|
|
|
|
bash -c 'ls *.md | wc -l'
|
2025-08-21 00:41:26 +09:00
|
|
|
|
|
2025-08-31 06:22:48 +09:00
|
|
|
|
# ✅ 回避策2: findコマンドを使う
|
|
|
|
|
|
find . -name "*.md" -exec wc -l {} \;
|
|
|
|
|
|
```
|
2025-08-21 00:41:26 +09:00
|
|
|
|
|
2025-09-12 21:06:47 +09:00
|
|
|
|
## 🚨 コンテキスト圧縮時: 作業停止→状況確認→CURRENT_TASK.md確認→ユーザー確認
|
2025-08-21 00:41:26 +09:00
|
|
|
|
|
2025-08-09 15:14:44 +09:00
|
|
|
|
---
|
|
|
|
|
|
|
2025-08-31 06:22:48 +09:00
|
|
|
|
Notes:
|
|
|
|
|
|
- ここから先の導線は README.md に集約
|
|
|
|
|
|
- 詳細情報は各docsファイルへのリンクから辿る
|
2025-09-14 19:26:46 +09:00
|
|
|
|
- このファイルは500行以内が目安(あくまで目安であり、必要に応じて増減可)
|
2025-11-23 05:53:27 +09:00
|
|
|
|
- Phase 15セルフホスティング実装中!詳細は[Phase 15](docs/private/roadmap2/phases/phase-15/)へ
|