Major Interpreter Refactoring: - Split core.rs (373 lines removed) into focused modules - Split expressions/calls.rs (460 lines removed) into cleaner structure - Added new modules: calls.rs, errors.rs, eval.rs, methods_dispatch.rs, state.rs - Improved separation of concerns across interpreter components P2PBox Enhancements: - Added on_once() for one-time event handlers - Added off() for handler deregistration - Implemented handler flags with AtomicBool for thread-safe management - Added loopback testing cache (last_from, last_intent_name) - Improved Arc-based state sharing for transport and handlers Plugin Loader Unification (In Progress): - Created plugin_loader_unified.rs skeleton - Created plugin_ffi_common.rs for shared FFI utilities - Migration plan documented (2400 lines → 1100 lines target) MIR & VM Improvements: - Enhanced modularized MIR builder structure - Added BoxCall dispatch improvements - Better separation in builder modules Documentation Updates: - Added Phase 9.79a unified box dispatch plan - Created plugin loader migration plan - Updated CURRENT_TASK.md with latest progress All tests passing (180 tests) - ready for next phase of refactoring 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
🌐 Nyash WebAssembly Project
Nyash programming language running in the browser via WebAssembly!
🚀 Quick Start
# Install wasm-pack (if not already installed)
cargo install wasm-pack
# Build WASM module
cd /mnt/c/git/nyash
wasm-pack build --target web --out-dir projects/nyash-wasm/pkg
# Start local server
cd projects/nyash-wasm
python3 -m http.server 8000
# Open browser
# Navigate to: http://localhost:8000/nyash_playground.html
🎯 Features
- 🐱 Full Nyash Language - Complete interpreter running in browser
- 📦 ConsoleBox - Browser console integration
- 🔍 DebugBox - Real-time debugging in browser
- ⚡ All Operators - NOT/AND/OR/Division fully supported
- 🎮 Interactive Playground - Code editor with examples
📁 File Structure
projects/nyash-wasm/
├── README.md # This file
├── nyash_playground.html # Interactive playground
├── build.sh # Build script
└── pkg/ # Generated WASM files (after build)
├── nyash_rust.js
├── nyash_rust_bg.wasm
└── ...
🎨 Example Code
// Browser console output
console = new ConsoleBox()
console.log("Hello from Nyash in Browser!")
// Math with new operators
x = 10
y = 3
console.log("Division: " + (x / y)) // 3.333...
console.log("Logic: " + (x > 5 and y < 5)) // true
// Debugging
debug = new DebugBox()
debug.startTracking()
debug.trackBox(x, "my_number")
console.log(debug.memoryReport())
🔧 Development
Build Process
- Rust code compiled to WebAssembly using wasm-bindgen
- NyashWasm struct exported with eval() method
- ConsoleBox uses web-sys for browser console access
- HTML playground provides interactive interface
Architecture
Browser JavaScript
↓
NyashWasm.eval(code)
↓
NyashInterpreter (Rust)
↓
ConsoleBox → web_sys::console
🎉 Coming Soon
- DOMBox - DOM manipulation from Nyash
- CanvasBox - Graphics and games
- EventBox - Mouse/keyboard event handling
- HTTPBox - Network requests
- Sample Apps - Snake game, Calculator, etc.
Everything is Box, even in the browser! 🐱