Phase 122.5-126完了:ConsoleBox 品質改善・最適化・統合

## 実装成果(Phase 122.5-126)

### Phase 122.5: nyash.toml method_id 修正
- println method_id を 2 → 1 に統一(log と同じ)
- TypeRegistry slot 400 との整合性確保

### Phase 123: ConsoleBox WASM/非WASM コード統一化
- マクロ define_console_impl! による重複排除
- 67行削減(27.3% 削減達成)
- ビルド成功・全テストパス

### Phase 124: VM Method Dispatch 統一化
- TypeRegistry ベースの統一ディスパッチ (dispatch_by_slot)
- String/Array/ConsoleBox を一元化
- 100行削減、メソッド解決の高速化

### Phase 125: 削除:deprecated builtin ConsoleBox
- src/box_factory/builtin_impls/console_box.rs 削除
- Plugin-only 移行で "Everything is Plugin" 実現
- 52行削減

### Phase 126: ドキュメント統合
- consolebox_complete_guide.md (27KB統合マスター)
- core_boxes_design/logging_policy/hako_logging_design 更新
- ~750行の navigation・cross-reference 改善

## 数値成果

- **総コード削減**: 219行
- **新規ドキュメント**: 1ファイル (+27KB)
- **更新ドキュメント**: 6ファイル (+~750行)
- **テスト**: Phase 120 representative tests  PASS
- **ビルド**: Zero errors

## 設計原則の完全実現

 println/log エイリアス統一(Phase 122)
 WASM/非WASM 統一化(Phase 123)
 TypeRegistry 統合(Phase 124)
 Plugin-only 移行(Phase 125)
 ドキュメント統合(Phase 126)

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
nyash-codex
2025-12-04 06:02:03 +09:00
parent 0b2a7e906b
commit e328be0307
17 changed files with 3469 additions and 355 deletions

View File

@ -659,3 +659,89 @@ crate::runtime::get_global_ring0().log.debug(&format!(
- Ring0/Ring1/Core の責務分離を保ったまま internal ログを OS 抽象層に集約
- 環境変数ベースのデバッグトレースPLUGIN_DEBUG, HAKO_*)も Ring0.log 経由に統一
- stderr のノイズ低減とログ観測の一元化を達成
---
## Section 8: Phase 122 println/log 統一化
### 背景
従来、ConsoleBox の `println``log` は別々のメソッドとして扱われていました。しかし、ユーザーコード(.hakoでは `println` を使用することが多く、Rust VM 実装では `log` のみが実装されていたため、selfhost Stage-3 + JoinIR Strict 経路で `Unknown method 'println'` エラーが発生していました。
### 実装内容
**Phase 122 の解決策**:
- `println``log` のエイリアスとして統一
- TypeRegistry で両者を同じ slot (400) に割り当て
- すべての経路JSON v0 / selfhost / 通常VMで一貫性を保証
**技術的詳細**:
```rust
// src/runtime/type_registry.rs
const CONSOLE_METHODS: &[MethodEntry] = &[
MethodEntry { name: "log", arity: 1, slot: 400 },
MethodEntry { name: "println", arity: 1, slot: 400 }, // log と同じ slot
MethodEntry { name: "warn", arity: 1, slot: 401 },
MethodEntry { name: "error", arity: 1, slot: 402 },
MethodEntry { name: "clear", arity: 0, slot: 403 },
];
```
**nyash.toml での統一**Phase 122.5:
```toml
[libraries."libnyash_console_plugin.so".ConsoleBox.methods]
log = { method_id = 400 }
println = { method_id = 400 } # log と同じ
warn = { method_id = 401 }
error = { method_id = 402 }
clear = { method_id = 403 }
```
### 使用ガイドライン
| 用途 | 推奨 API | 理由 |
|------|---------|------|
| **ユーザーコード(.hako** | `ConsoleBox.println` | ユーザー向け sugar、他言語との一貫性 |
| **内部実装Rust** | `ConsoleBox.log` または `console_println!` | VM レベルでは同じ、マクロ推奨 |
| **selfhost / CLI** | `ConsoleService` / `console_println!` | Ring0 経由で安定 |
### 正規化ルール
- `ConsoleBox.println` は VM の TypeRegistry で `ConsoleBox.log`slot 400に正規化される
- JSON v0 / selfhost / 通常VM のすべての経路で同じ動作を保証
- Rust から直接使用する場合も `println` / `log` の両方が使用可能
### 3層ロギングとの関係
Phase 122 の println/log 統一は、Phase 99-101 で確立された3層ロギングシステムの **Layer 2ConsoleService** に該当します。
**3層ロギングの位置付け**:
1. **Layer 1Ring0.log**: Runtime/OS層内部ログ開発者向け
2. **Layer 2ConsoleService**: ユーザー向けCLI出力 ← **Phase 122 の対象**
3. **Layer 3Raw println!**: テスト・デバッグ専用(本番では制限)
### 実装完了日
**Phase 122 実装完了日**: 2025-12-04
### 参照
- [Phase 122 詳細ドキュメント](phase122_consolebox_println_unification.md)
- [Phase 122.5 詳細ドキュメント](phase122_5_nyash_toml_fix.md)
- [ConsoleBox 完全ガイド](consolebox_complete_guide.md) - 統合的なリファレンス
---
## 📚 Related Documents
### ConsoleBox について知りたい場合
- [ConsoleBox 完全ガイド](consolebox_complete_guide.md) - 統合的なリファレンス
- [Phase 122-125 実装記録](phase122_consolebox_println_unification.md) - 詳細な実装背景
### ログ出力について知りたい場合
- このドキュメント - Nyash のログ出力全体のポリシー
- [Hako ログ設計](hako_logging_design.md) - Hako コンパイラ側のログ設計
### Core Boxes 設計について知りたい場合
- [Core Boxes 設計](core_boxes_design.md) - Core Box の全体設計
- [TypeRegistry 設計](../architecture/type-registry-design.md) - TypeRegistry の詳細設計