pyvm: split op handlers into ops_core/ops_box/ops_ctrl; add ops_flow + intrinsic; delegate vm.py without behavior change
net-plugin: modularize constants (consts.rs) and sockets (sockets.rs); remove legacy commented socket code; fix unused imports mir: move instruction unit tests to tests/mir_instruction_unit.rs (file lean-up); no semantic changes runner/pyvm: ensure using pre-strip; misc docs updates Build: cargo build ok; legacy cfg warnings remain as before
This commit is contained in:
23
docs/architecture/phi-and-ssa.md
Normal file
23
docs/architecture/phi-and-ssa.md
Normal file
@ -0,0 +1,23 @@
|
||||
# PHI and SSA in Nyash
|
||||
|
||||
Overview
|
||||
- Nyash lowers high-level control flow (If/Loop/Match) to MIR and backends that rely on SSA form.
|
||||
- We prioritize IR hygiene and observability while keeping runtime cost at zero.
|
||||
|
||||
Design points
|
||||
- PHI hygiene: no empty PHIs; PHIs at block head only.
|
||||
- JoinResult hint: when both branches assign the same variable, we emit a MIR hint for diagnostics.
|
||||
- Loop carriers: loops may expose a carrier observation (≤ N variables, where N is unconstrained by design; smokes emphasize common cases).
|
||||
|
||||
Normalization
|
||||
- If: may optionally wrap into LoopForm under a conservative gate (dev only). Semantics remain unchanged.
|
||||
- Match: scrutinee evaluated once, guard fused; normalized to nested If‑chain in macro/core pass.
|
||||
|
||||
Testing
|
||||
- LLVM smokes: fixed small cases ensure no empty PHIs and head placement.
|
||||
- MIR smokes: trace `scope|join|loop` to validate shaping without peeking into IR details.
|
||||
|
||||
Roadmap
|
||||
- Remove text-level sanitization once finalize‑PHI is trustworthy across Loop/If/Match.
|
||||
- Expand goldens to cover nested joins and multi‑carrier loops while keeping CI light.
|
||||
|
||||
Reference in New Issue
Block a user