Files
hakorune/docs/ARCHITECTURE.md
Selfhosting Dev 89e6fbf010 feat(llvm): Comprehensive LLVM backend improvements by ChatGPT
Major enhancements to LLVM code generation and type handling:

1. String Operations:
   - Added StringBox length fast-path (length/len methods)
   - Converts i8* to handle when needed for len_h call
   - Consistent handle-based string operations

2. Array/Map Fast-paths:
   - ArrayBox: get/set/push/length operations
   - MapBox: get/set/has/size with handle-based keys
   - Optimized paths for common collection operations

3. Field Access:
   - getField/setField implementation with handle conversion
   - Proper i64 handle to pointer conversions

4. NewBox Improvements:
   - StringBox/IntegerBox pass-through optimizations
   - Fallback to env.box.new when type_id unavailable
   - Support for dynamic box creation

5. Documentation:
   - Added ARCHITECTURE.md for overall design
   - Added EXTERNCALL.md for external call specs
   - Added LOWERING_LLVM.md for LLVM lowering rules
   - Added PLUGIN_ABI.md for plugin interface

6. Type System:
   - Added UserBox type registration in nyash_box.toml
   - Consistent handle (i64) representation across system

Results: More robust LLVM code generation with proper type handling

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-11 22:30:26 +09:00

1.4 KiB
Raw Blame History

Nyash Architecture (Phase 15)

Scope and Priorities

  • Primary execution path: LLVM AOT only. VM, Cranelift JIT/AOT, and the interpreter are not MIR14ready and are considered experimental in this phase.
  • Minimize fallback logic. Prefer simple, predictable lowering over clever heuristics that diverge across backends.

Value Model

  • Box = handle (i64) as the canonical runtime representation.
  • Strings: LLVM AOT favors i8* for fast path operations and bridging with NyRT. Conversions between i8* and handle exist but are kept to the minimum required surfaces.

Division of Responsibilities

  • NyRT (core, builtin): fundamental boxes and operations essential for bootstrapping/selfhosting.
    • IntegerBox, StringBox, ArrayBox, MapBox, BoolBox
    • Implemented as NyRT intrinsics (byid shims exist for plugin ABI compatibility).
  • Plugins: external or platformdependent functionality (File/Net/Regex/HTTP/DB/GUI etc.).
  • ExternCall: minimal window to the outside world (console print/log/error, debug trace, exit/now/readline); other APIs should route through BoxCall.

Backend Policy (Phase 15)

  • LLVM is the source of truth. All new rules and ABIs are documented for LLVM. Other backends will adopt them after LLVM stabilizes.
  • Fallback logic must be narrow and documented. If behavior depends on type annotations, the (missing) annotations should be fixed at the MIR stage rather than widening fallback.