Phase 26-H 完了内容: ✅ JoinIR 型定義実装(src/mir/join_ir.rs) ✅ MIR → JoinIR 自動変換実装(lower_min_loop_to_joinir) ✅ 自動変換テスト実装(mir_joinir_min_auto_lowering) ✅ PHI/Loop箱 → JoinIR 移行対応表追加(loopform_ssot.md) ドキュメント更新: - Phase 27 JoinIR タスク計画追加 - Phase 26-H タスク完了記録 - 各種 README 更新(進捗反映) - CURRENT_TASK.md 更新 コミット統計: $(git status --short | wc -l) files changed 次のステップ: Phase 27 一般化 MIR → JoinIR 変換
145 lines
4.3 KiB
Markdown
145 lines
4.3 KiB
Markdown
# Nyash Kernel
|
||
|
||
**Minimal runtime kernel for Nyash language - Plugin-First Architecture**
|
||
|
||
Generated: 2025-09-24
|
||
Architecture: Phase 2.4 NyRT→NyKernel Revolution Complete
|
||
|
||
## Overview
|
||
|
||
The Nyash Kernel (`nyash_kernel`) is the minimal runtime core that replaced the legacy NyRT system. This represents a **42% reduction** in runtime complexity by moving from VM-dependent architecture to a unified Plugin-First system.
|
||
|
||
## Architecture Revolution
|
||
|
||
### ✅ **From NyRT to NyKernel** (Phase 2.4 Complete)
|
||
|
||
**Before (Legacy NyRT)**:
|
||
- Mixed VM/Plugin dependencies
|
||
- `with_legacy_vm_args` scattered throughout codebase
|
||
- 58% essential + 42% deletable functions
|
||
- Complex shim layer for LLVM integration
|
||
|
||
**After (NyKernel)**:
|
||
- Pure Plugin-First architecture
|
||
- Zero legacy VM dependencies
|
||
- Only essential kernel functions remain
|
||
- Clean C ABI for LLVM integration
|
||
|
||
### 🏗️ **Core Components**
|
||
|
||
#### Essential Kernel Functions (58% - Kept)
|
||
- **GC Management**: Safepoints, write barriers, memory management
|
||
- **Handle Registry**: Object handle management for AOT/JIT
|
||
- **Plugin Host**: Unified plugin loading and method resolution
|
||
- **Process Entry**: Main entry point and runtime initialization
|
||
|
||
#### Removed Shim Functions (42% - Deleted)
|
||
- `with_legacy_vm_args` - 11 locations completely removed
|
||
- Legacy VM argument processing
|
||
- String/Box operation shims
|
||
- VM-specific encoding functions
|
||
|
||
## Build Output
|
||
|
||
```
|
||
Target: libnyash_kernel.a (static library)
|
||
Status: Clean build (0 errors, 0 warnings)
|
||
Integration: LLVM + VM unified
|
||
```
|
||
|
||
## Implementation Details
|
||
|
||
### Deleted Legacy Functions
|
||
|
||
| File | Locations | Status |
|
||
|------|-----------|---------|
|
||
| `encode.rs` | 1 | ✅ Removed |
|
||
| `birth.rs` | 1 | ✅ Removed |
|
||
| `future.rs` | 2 | ✅ Removed |
|
||
| `invoke.rs` | 6 | ✅ Removed |
|
||
| `invoke_core.rs` | 1 | ✅ Removed |
|
||
| **Total** | **11** | **✅ Complete** |
|
||
|
||
### Plugin-First Integration
|
||
|
||
All Box operations now route through the unified plugin system:
|
||
|
||
```rust
|
||
// Before: VM-dependent
|
||
with_legacy_vm_args(|args| { ... })
|
||
|
||
// After: Plugin-First
|
||
let host = get_global_plugin_host().read()?;
|
||
host.create_box(type_name, &args)?
|
||
```
|
||
|
||
### 🔥 **ExternCall Print修正** (codex技術力)
|
||
|
||
**Phase 2.4で解決した重大問題**: LLVM EXEで`print()`出力されない
|
||
|
||
#### 問題の詳細
|
||
- **症状**: VM実行は正常、LLVM EXEは無音
|
||
- **根本原因**: `src/llvm_py/instructions/externcall.py`の引数変換バグ
|
||
- **技術詳細**: 文字列ハンドル→ポインタ変換後にnull上書き
|
||
|
||
#### 修正内容
|
||
```python
|
||
# src/llvm_py/instructions/externcall.py:152-154
|
||
else:
|
||
# used_string_h2p was true: keep the resolved pointer (do not null it)
|
||
pass
|
||
```
|
||
|
||
#### 検証結果
|
||
```bash
|
||
/tmp/direct_python_test_fixed
|
||
# 出力:
|
||
# 🎉 ExternCall print修正テスト!
|
||
# codex先生の名前解決修正確認
|
||
# Result: 0
|
||
```
|
||
|
||
## Usage
|
||
|
||
### For LLVM Backend
|
||
```bash
|
||
# Build with LLVM integration
|
||
cargo build --release -p nyash_kernel
|
||
# Output: crates/nyash_kernel/target/release/libnyash_kernel.a
|
||
```
|
||
|
||
### For VM Backend
|
||
```bash
|
||
# Runtime integration (automatic)
|
||
./target/release/nyash program.hako
|
||
```
|
||
|
||
## Design Philosophy
|
||
|
||
**"Everything is Plugin"** - The kernel provides only the essential infrastructure for plugin management, leaving all Box implementations to the plugin system.
|
||
|
||
### Core Principles
|
||
1. **Minimal Surface**: Only GC, handles, plugins, and process entry
|
||
2. **Plugin-First**: All Box operations through unified plugin host
|
||
3. **C ABI Clean**: Stable interface for LLVM/VM integration
|
||
4. **Zero Legacy**: Complete removal of VM-dependent code paths
|
||
|
||
## ChatGPT5 × codex × Claude Collaboration
|
||
|
||
This kernel represents a historic achievement in AI-assisted architecture design:
|
||
- **Design**: ChatGPT5 Pro architectural analysis (42% reduction strategy)
|
||
- **Implementation**: Claude systematic implementation (11 locations)
|
||
- **Debugging**: codex root cause analysis (ExternCall print fix)
|
||
- **Result**: 100% successful architecture revolution + critical bug resolution
|
||
|
||
## Integration
|
||
|
||
The Nyash Kernel integrates seamlessly with:
|
||
- **LLVM Backend**: Static linking via libnyash_kernel.a
|
||
- **VM Backend**: Dynamic plugin loading
|
||
- **Build System**: tools/build_llvm.sh integration complete
|
||
|
||
---
|
||
|
||
*Part of Phase 15 Nyash Self-hosting Revolution*
|
||
*Documentation: [ChatGPT5 NyRT→NyKernel Design](../../docs/private/roadmap2/phases/phase-15/chatgpt5-nyrt-kernel-design.md)* |