Phase 22.1 WIP: SSOT resolver + TLV infrastructure + Hako MIR builder setup
Setup infrastructure for Phase 22.1 (TLV C shim & Resolver SSOT):
Core changes:
- Add nyash_tlv, nyash_c_core, nyash_kernel_min_c crates (opt-in)
- Implement SSOT resolver bridge (src/using/ssot_bridge.rs)
- Add HAKO_USING_SSOT=1 / HAKO_USING_SSOT_HAKO=1 env support
- Add HAKO_TLV_SHIM=1 infrastructure (requires --features tlv-shim)
MIR builder improvements:
- Fix using/alias consistency in Hako MIR builder
- Add hako.mir.builder.internal.{prog_scan,pattern_util} to nyash.toml
- Normalize LLVM extern calls: nyash.console.* → nyash_console_*
Smoke tests:
- Add phase2211 tests (using_ssot_hako_parity_canary_vm.sh)
- Add phase2220, phase2230, phase2231 test structure
- Add phase2100 S3 backend selector tests
- Improve test_runner.sh with quiet/timeout controls
Documentation:
- Add docs/ENV_VARS.md (Phase 22.1 env vars reference)
- Add docs/development/runtime/C_CORE_ABI.md
- Update de-rust-roadmap.md with Phase 22.x details
Tools:
- Add tools/hakorune_emit_mir.sh (Hako-first MIR emission wrapper)
- Add tools/tlv_roundtrip_smoke.sh placeholder
- Improve ny_mir_builder.sh with better backend selection
Known issues (to be fixed):
- Parser infinite loop in static method parameter parsing
- Stage-B output contamination with "RC: 0" (needs NYASH_JSON_ONLY=1)
- phase2211/using_ssot_hako_parity_canary_vm.sh fork bomb (needs recursion guard)
Next steps: Fix parser infinite loop + Stage-B quiet mode for green tests
This commit is contained in:
37
docs/development/runtime/C_CORE_ABI.md
Normal file
37
docs/development/runtime/C_CORE_ABI.md
Normal file
@ -0,0 +1,37 @@
|
||||
# C Core ABI (Design Stage) — Phase 22.2
|
||||
|
||||
Status: design-stage shim; defaults OFF; behavior unchanged.
|
||||
|
||||
Purpose
|
||||
- Define a minimal, stable C ABI boundary to enable future replacement of selected Rust runtime paths when Hakorune is compiled to native EXE via LLVM.
|
||||
- Keep Rust path authoritative while stubbing C calls behind env+feature gates; ON/OFF parity must hold.
|
||||
|
||||
Conventions
|
||||
- Encoding: UTF‑8, null-terminated (const char*). No ownership transfer.
|
||||
- Return: `int` (0 = success; negative values reserved for future detailed errors).
|
||||
- Threading: functions must be reentrant; stateful access goes via (type_id, instance_id).
|
||||
|
||||
Functions (initial)
|
||||
- `int ny_core_probe_invoke(const char* target, const char* method, int32_t argc)`
|
||||
- No-op probe for diagnostics; safe to call for any target/method pair.
|
||||
- `int ny_core_map_set(int32_t type_id, uint32_t instance_id, const char* key, const char* val)`
|
||||
- Design stub for MapBox.set. Current implementation is no-op; Rust path performs the actual mutation.
|
||||
|
||||
Gates & Features
|
||||
- Build: `cargo build --release -p nyash-rust --features c-core`
|
||||
- Env:
|
||||
- `HAKO_C_CORE_ENABLE=1` — enable c-core probe routing
|
||||
- `HAKO_C_CORE_TARGETS=MapBox.set,ArrayBox.push` — limit targets (default: MapBox.set)
|
||||
- Tags: `[c-core:invoke:<Box>.<method>]`
|
||||
|
||||
Call Sites (Rust)
|
||||
- PluginLoaderV2 (enabled): `src/runtime/plugin_loader_v2/enabled/ffi_bridge.rs`
|
||||
- When gated ON + targeted, call C shim then continue with the original Rust path (parity preserved).
|
||||
|
||||
Validation
|
||||
- Parity canaries compare ON/OFF outputs (and rc) for MapBox.set; later for ArrayBox.push/get/size.
|
||||
- Failure/unavailable paths must fall back immediately to the Rust path.
|
||||
|
||||
Roadmap
|
||||
- Expand ArrayBox (push → get → size) with the same staged approach.
|
||||
- Formalize error codes and minimal state API only after parity is stable.
|
||||
@ -10,41 +10,56 @@ Purpose: reduce Rust surface (non‑plugin) while keeping correctness and revers
|
||||
- Acceptance: `cargo build --release` (default features) remains green; quick smokes green.
|
||||
- Revert: `git mv archive/rust-llvm-backend/llvm src/backend/`.
|
||||
|
||||
### Phase 1 — Quick Wins (1–2 months)
|
||||
- hv1_inline → Hako parity (already functionally covered; keep as perf path).
|
||||
- MIR interpreter parity check; route Primary to Hako VM.
|
||||
- TLV codec → C shim (FFI) with thin Rust wrapper.
|
||||
- LLVM wrapper → Hako/C harness (Python stays primary until Hako IR is ready).
|
||||
### Phase 1 — Parser/MIR Hako‑first(22.0)
|
||||
- Make Hako the primary for Parser/MIR; Rust builder becomes fallback.
|
||||
- Verify quick canaries green under registry; keep hv1 inline parity.
|
||||
|
||||
### Phase 2 — TLV C shim & Resolver SSOT(22.1)
|
||||
- TLV codec to C shim (+ Rust FFI); Resolver/Using SSOT in Hako shared by runner/analyzer.
|
||||
|
||||
Deliverables & Tests
|
||||
- hv1_inline: parity canaries = phase2037/flow + phase2170/state; add `HAKO_VERIFY_DISABLE_INLINE` opt-out (optional).
|
||||
- TLV C shim: round‑trip tests (encode→decode) on representative payloads; FFI error mapping spec.
|
||||
- MIR interpreter: keep as diagnostic path; parity sample set (const/binop/compare/branch/jump/ret/phi/mir_call minimal).
|
||||
- LLVM wrapper: unify CLI entry; ensure `NYASH_LLVM_USE_HARNESS=1` path stays green.
|
||||
- 22.0: registry builder default ON; hv1直列 green; Core/Interpreter is diagnostic.
|
||||
- 22.1: TLV round‑trip smokes; Using SSOT parity between runner/analyzer.
|
||||
|
||||
### Phase 2 — Core Thinning (2–4 months)
|
||||
- Plugin loader thin C wrapper (dlopen/dlsym), unify host ABI.
|
||||
- Basic boxes (Array/Map/File) small C core (handle‑based), keep Rust shim.
|
||||
- Resolver/Using: SSOT in Hako; runner uses shared policy.
|
||||
### Phase 3 — Core Thinning I(22.2, 2–4 months)
|
||||
- Plugin loader thin C wrapper (dlopen/dlsym) and basic boxes C core; Rust shim remains.
|
||||
|
||||
SSOT for Using/Resolver (summary)
|
||||
- Resolution order: modules (nyash.toml) → relative path inference → not found (warn) with verbose details.
|
||||
- Analyzer/HakoCheck follows the same order; runner shares policy helpers. No path‑literal using in strict profiles.
|
||||
|
||||
### Phase 3 — Long‑haul (3–6 months)
|
||||
### Phase 4 — Long‑haul(22.3, 3–6 months)
|
||||
- Python llvmlite → Hako IR builder + C ABI.
|
||||
- Parser/MIR builder fully Hako‑first; Rust becomes fallback.
|
||||
- NyKernel minimal C runtime (BoxCall dispatcher + collections + file).
|
||||
|
||||
### Phase 21.10 — LLVM Line Unification (SSOT + crate probe)
|
||||
- SSOT builder (`tools/ny_mir_builder.sh`) selects backend by env; crate path opt‑in.
|
||||
- Add crate S3 canaries (ternary/map/print); defaults unchanged.
|
||||
|
||||
### Phase 21.11 — Flip default to crate (ny-llvmc)
|
||||
- Make crate default when available; llvmlite becomes opt‑in.
|
||||
- S3 reps run via crate in quick; legacy remains available.
|
||||
|
||||
### Phase 21.12 — Hako Native LLVM Builder (bootstrap)
|
||||
- Experimental native (Hako→LLVM C API) path for minimal EXE.
|
||||
- Behind `NYASH_LLVM_BACKEND=native` toggle; no default impact.
|
||||
|
||||
### Phase 21.13 — llvmlite deprecation (default off)
|
||||
- Remove llvmlite from auto paths; keep explicit toggle + optional CI job.
|
||||
|
||||
### Phase 21.14 — Optimization & Perf Harness
|
||||
- Perf harness + PHI invariants; optimize hot paths; publish numbers.
|
||||
|
||||
## Principles
|
||||
- Guard everything by env/features; defaults unchanged.
|
||||
- Keep changes reversible (small diffs, RESTORE docs, fallbacks).
|
||||
- Test gates: quick smokes + representative hv1/hakovm parity.
|
||||
|
||||
## Today (suggested)
|
||||
1) Stage Phase‑0 move as a script (not auto‑run) + RESTORE.md.
|
||||
2) Add phase docs (docs/private/roadmap/phases/phase-21.9/PLAN.md).
|
||||
3) Keep CI/dev instructions intact (no build break when features=none).
|
||||
1) Lock 22.0 (Parser/MIR Hako‑first) — builder registryを既定ON、quickが緑。
|
||||
2) Prepare 22.1 (TLV C shim & Resolver SSOT) — I/F草案と最小スモーク。
|
||||
3) LLVM統一(21.10–21.14)は並行で準備、切替は22.x完了後に本格実施。
|
||||
|
||||
## Test Strategy (gates)
|
||||
- Quick: tools/smokes/v2/profiles/quick/core/* (phase2037 flow, phase2170 state) — green.
|
||||
|
||||
Reference in New Issue
Block a user