You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Effect-threaded async-boundary detection for the WasmGC CPS transform (generalise the structural-conservative recogniser) #234
The WasmGC CPS transform (#225, ADR-013) identifies the async boundary structurally — a let whose RHS calls a recognised async primitive from a hardcoded set (currently http_request_thenable). This was the owner-chosen scope for #225 PR3a (sound, contained, no frontend changes) over the principled alternative.
It is brittle: every new async stdlib primitive must be added to the recognised set, and the transform cannot see a function-defined Async callee at all. It is also a blocker for the fully transparent ADR-013 surface (author writes fetch, backend lowers) since that requires recognising anyAsync-effecting call, not a name list.
Proposed solution
Thread per-call effect-row information from the typecheck phase into codegen so the async boundary = the first call whose inferred/declared effect row ⊇ Async. This removes the hardcoded set and generalises to user-defined Async functions (also unblocks #225 PR3c Async→Async chaining at full generality).
Notes
One-way-door-ish: touches the resolve/typecheck→codegen interface (shared infra). Warrants its own ADR.
Until then the structural-conservative recogniser is the contract; extend the recognised set as a stopgap when new primitives land.
Activity
docs(http): #225 PR4 — joint-close #160 + #225 (ADR-013 delivery comp…
docs(http): #225 PR4 — joint-close #160 + #225 (ADR-013 delivery comp…
docs(adr): ADR-016 — effect-threaded async-boundary detection (#234 S…
docs(adr): renumber block-module ADR 016->017 (main merged a different …
docs(adr): ESC-01 — ADR-018 no raw/FFI escape, typed extern only (Refs …
docs(adr): ESC-04 — ADR-017 ReScript block-module disposition (Refs #262
docs(adr): ESC-04 — ADR-017 ReScript block-module disposition (Refs #262
feat(effect-sites): #234 S2a — shared call-site numbering (ADR-016) (#…
feat(typecheck): #234 S2b — build the per-call-site effect side-table (…
feat(codegen): #234 S3 — effect-threaded async-boundary detection (AD…
feat(tw-verify): #10 — enforce L13 module-isolation on emitted wasm (…
docs(adr): ADR-019 — compiler distribution: Releases + thin Deno/JSR …
feat(wasi): #180 ADR-015 S4a — clock_now_ms builtin (preview1 → wasi:…
feat(wasi): #180 ADR-015 S4b — env_count/arg_count + multi-import ind…
Merge origin/main into claude/upbeat-gauss-D5f72
docs(adr): CORE-02 / #234 / ADR-016 — truth ledger to "DELIVERED" (#336)