- Update phase indicator to Phase 15 (Self-Hosting) - Update documentation links to Phase 15 resources - Reflect completion of R1-R5 tasks and ongoing work - Fix CURRENT_TASK.md location to root directory Co-Authored-By: Claude <noreply@anthropic.com>
3.2 KiB
3.2 KiB
Phase 15 — Box Stacking Roadmap (Living)
This roadmap is a living checklist to advance Phase 15 with small, safe boxes. Update continuously as we progress.
Now (ready/green)
- v0 Ny parser (Ny→JSON IR v0) with wrappers (Unix/Windows)
- Runner JSON v0 bridge (
--ny-parser-pipe) → MIR → MIR-Interp - E2E + roundtrip practical recipes (Windows/Unix)
- Docs path unify (phase-15 under roadmap tree)
- Direct bridge (design + skeleton; feature-gated)
- AOT P2 stubs (CraneliftAotBox/LinkerBox) + RUN smoke wiring
Next (small boxes)
- Ny config loader (Ny-only)
- FileBox + TOMLBox to read
nyash.toml→ Map (env/tasks/plugins/box_types) - Deliver as
apps/std/ny-config.nyashwith simple API:read_root(),load_toml(),get_env()/get_tasks()
- FileBox + TOMLBox to read
- Ny script plugins enumeration
- Add
[ny_plugins]tonyash.tomlfor pure Nyash plugins - Runner opt-in hook:
NYASH_LOAD_NY_PLUGINS=1/--load-ny-pluginsto include/register in order
- Add
- Direct bridge (v0) rollout
--parser ny/NYASH_USE_NY_PARSER=1routes to in-proc bridge (subset: return/int/+ - * /, parens)- Keep JSON as debug dump (
NYASH_DUMP_JSON_IR=1) - Expand smokes + parity checks with rust path
- AOT P2 (stub→first run)
- Emit
.obj/.o→ link → run; measure time/size; log instructions
- Emit
Later (incremental)
- v1 Ny parser (let/if/call) behind
NYASH_JSON_IR_VERSION=1 - JSON v1 bridge → MirBuilder (back-compat v0)
- 12.7 sugars normalized patterns in bridge (?. / ?? / range)
- E2E CI-lite matrix (no LLVM) for v0/v1/bridge roundtrip
- Ny script plugin examples under
apps/plugins-scripts/
Operational switches
- Parser path:
--parser {rust|ny}orNYASH_USE_NY_PARSER=1 - JSON dump:
NYASH_DUMP_JSON_IR=1 - Load Ny plugins:
NYASH_LOAD_NY_PLUGINS=1/--load-ny-plugins - AOT smoke:
CLIF_SMOKE_RUN=1
Recipes / Smokes
- JSON v0 bridge:
tools/ny_parser_bridge_smoke.sh/tools/ny_parser_bridge_smoke.ps1 - E2E roundtrip:
tools/ny_roundtrip_smoke.sh/tools/ny_roundtrip_smoke.ps1
Stop criteria (Phase 15)
- v0 E2E green (parser pipe + direct bridge)
- v1 minimal samples pass via JSON bridge
- AOT P2: emit→link→run stable for constant/arith
- Docs/recipes usable on Windows/Unix
Notes
- JSON is a temporary, safe boundary. We will keep it for observability even after the in-proc bridge is default.
- Favor smallest viable steps; do not couple large refactors with new features.
Ny Plugins → Namespace (Plan)
- Phase A (minimal): Add a shared
NyModulesregistry (env.modules.{set,get}).- Map file path → namespace (project‑relative, separators →
., trim extension). - R5 hook: if a Ny plugin returns an exports map/static box, register it under the derived namespace.
- Guard: reject reserved prefixes (e.g.,
nyashstd.*,system.*).
- Map file path → namespace (project‑relative, separators →
- Phase B (scope): Optionally run
[ny_plugins]in a shared Interpreter to share static definitions.- Flag:
NYASH_NY_PLUGINS_SHARED=0to keep isolated execution. - Logs:
[ny_plugins] <ns>: REGISTERED | FAIL(reason).
- Flag:
- Phase C (language bridge): Resolve
using foo.barviaNyModules, then fallback to file/package resolver (nyash.link).- Keep IDE‑friendly fully qualified access; integrate with future
nyash_modules/.
- Keep IDE‑friendly fully qualified access; integrate with future