Files
hakorune/crates/nyash_kernel/README.md
tomoaki 757193891f feat(llvm/phi): Phase 277 P1 - fail-fast validation for PHI strict mode
## Summary
Implemented fail-fast validation for PHI ordering and value resolution in strict mode.

## Changes

### P1-1: Strict mode for "PHI after terminator"
- File: `src/llvm_py/phi_wiring/wiring.py::ensure_phi`
- Behavior: `NYASH_LLVM_PHI_STRICT=1` → RuntimeError if PHI created after terminator
- Default: Warning only (no regression)

### P1-2: Strict mode for "fallback 0"
- File: `src/llvm_py/phi_wiring/wiring.py::wire_incomings`
- Behavior: Strict mode forbids silent fallback to 0 (2 locations)
  - Location 1: Unresolvable incoming value
  - Location 2: Type coercion failure
- Error messages point to next debug file: `llvm_builder.py::_value_at_end_i64`

### P1-3: Connect verify_phi_ordering() to execution path
- File: `src/llvm_py/builders/function_lower.py`
- Behavior: Verify PHI ordering after all instructions emitted
- Debug mode: Shows " All N blocks have correct PHI ordering"
- Strict mode: Raises RuntimeError with block list if violations found

## Testing
 Test 1: strict=OFF - passes without errors
 Test 2: strict=ON - passes without errors (no violations in test fixtures)
 Test 3: debug mode - verify_phi_ordering() connected and running

## Scope
- LLVM harness (Python) changes only
- No new environment variables (uses existing 3 from Phase 277 P2)
- No JoinIR/Rust changes (root fix is Phase 279)
- Default behavior unchanged (strict mode opt-in)

## Next Steps
- Phase 278: Remove deprecated env var support
- Phase 279: Root fix - unify "2本のコンパイラ" pipelines

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-22 14:48:37 +09:00

152 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

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.

# 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 (workspace default):
# target/release/libnyash_kernel.a
# Note: if you set `CARGO_TARGET_DIR`, the output is under `$CARGO_TARGET_DIR/release/`.
```
Notes:
- `libnyash_kernel.a` is required for **native executable linking** (AOT/`--emit-exe`/`ny-llvmc --emit exe`).
- The Python llvmlite **harness** path (`NYASH_LLVM_USE_HARNESS=1`) does not require the static library.
### For VM Backend
```bash
# Runtime integration (automatic)
./target/release/hakorune 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)*