@@ -660,14 +660,16 @@ REIR adapter for capability-binding evidence
660660The following may be parsed and surfaced for review but are not executable lowering targets in v0.7:
661661
662662``` text
663- spawn (unstructured task creation)
664663public Future / Waker / task-handle surface
665- Rust-style open enum machinery beyond sealed RSScript sum types
666664general user FFI
667- advanced protocol/dynamic dispatch model (capability objects)
668- scoped views / slices
665+ advanced protocol/dynamic dispatch model (capability objects) → now in scope (§20.2)
666+ scoped views / slices → now in scope (§20.2)
669667```
670668
669+ (Unstructured ` spawn ` and Rust-style open enums were previously listed here; both
670+ are now firm non-goals, see §21 and §20.2 — ` spawn ` is still rejected with a
671+ stable diagnostic.)
672+
671673` async fn ` signatures are review-visible contracts. v0.7 admits an executable async
672674MVP: ` await ` appears inside an ` async fn ` at a statement boundary, inside an
673675` if ` /` loop ` /` match ` /` with ` body, or ** nested in an expression** — an ` await ` in a
@@ -3640,17 +3642,19 @@ short-circuit `&&`/`||`, which is only conditionally evaluated. Hoisting it woul
36403642force unconditional evaluation, so such an ` await ` stays rejected as a non-linear
36413643await (` RS0411 ` ).
36423644
3643- #### Dynamic dispatch (deferred, not admitted in v0.7 )
3645+ #### Dynamic dispatch (in scope §20.2; not yet implemented )
36443646
3645- RSScript v0.7 does not admit protocol-typed dynamic dispatch, trait objects, or
3646- protocol-typed values. The only implemented and specified protocol call form is
3647+ RSScript v0.7 does not yet implement protocol-typed dynamic dispatch, trait
3648+ objects, or protocol-typed values.
3649+ The only implemented and specified protocol call form is
36473650static, explicit ` Protocol.method(...) ` dispatch backed by an explicit generic
36483651bound or an explicit ` impl Protocol for Type ` declaration.
36493652
3650- Future protocol dynamic dispatch is a design target, not a v0.7 promise. It must
3651- go through feature admission again and must not be described as implemented,
3652- settled, or available to package contracts until syntax, checking, lowering,
3653- review evidence, and package metadata exist together.
3653+ Explicit, review-visible ` capability ` -bounded dispatch is now a ** committed
3654+ roadmap item** (§20.2-2, §20.1-G) — not Rust-style implicit ` dyn ` coercion, which
3655+ stays a non-goal (§21). Until it is built, it must not be described as
3656+ implemented, settled, or available to package contracts: syntax, checking,
3657+ lowering, review evidence, and package metadata must land together.
36543658
36553659Closed sets should still prefer sealed sum types with exhaustive match
36563660(section 20.1), which are strictly more reviewable. For open sets such as
@@ -5271,6 +5275,7 @@ A. Extended async surface beyond the v0.7 MVP
52715275 - must not expose Future / Pin / Poll / Waker to RSScript users (section 14.4).
52725276
52735277B. Cross-isolate message API with zero-copy transfer
5278+ - now in scope: committed roadmap (§20.2).
52745279 - explicit typed send/receive channels between isolates.
52755280 - cross-isolate payloads are owned/Copy data or values moved with take.
52765281 - take-based move across an isolate boundary is the no-shared-alias transfer
@@ -5279,6 +5284,7 @@ B. Cross-isolate message API with zero-copy transfer
52795284 - managed handles never cross isolates; only explicit messages do.
52805285
52815286C. Two-tier execution: dev interpreter + Rust-lowering AOT
5287+ - now in scope: committed roadmap (§20.2).
52825288 - a HIR-level interpreter for the managed subset for a fast edit-run loop,
52835289 since rustc compilation cost is poor for inner-loop iteration.
52845290 - the Rust-lowering path remains the production/AOT target.
@@ -5315,6 +5321,7 @@ F. Registry-level review-risk badges
53155321 signals to derive from compiler/package review evidence.
53165322
53175323G. Capability objects (explicit dynamic dispatch)
5324+ - now in scope: committed roadmap (§20.2).
53185325 - RSScript does not adopt Rust-style `dyn Trait` with vtable coercion.
53195326 - if dynamic dispatch is needed, it must use an explicit capability-bounded
53205327 form that is visible to review:
@@ -5344,6 +5351,7 @@ H. Stream<T> and await-for (async sequences)
53445351 or `Stream` combinators that hide allocation.
53455352
53465353I. Scoped views and slices (zero-copy borrowed regions)
5354+ - now in scope: committed roadmap (§20.2).
53475355 - for high-performance parsing, HTTP buffers, and binary protocols, RSScript
53485356 needs a "borrowed view" that avoids full-copy semantics:
53495357
@@ -5444,6 +5452,48 @@ positional records / conflicts with named-everything canonical style;
54445452implicit flow promotion any record-like form must use named fields
54455453```
54465454
5455+ ### 20.2 In scope: committed implementation roadmap
5456+
5457+ The following directions — previously deferred (§20.1) or listed as
5458+ review-visible-but-not-executable (§3.2) — are now ** committed in-scope work**
5459+ targeted for implementation, tracked as open items in ` docs/spec-todo.md ` . All
5460+ four are design-compatible: large, but they extend the model without reversing a
5461+ review-first tenet.
5462+
5463+ ``` text
5464+ 1. Scoped views / slices (zero-copy borrowed regions) — §20.1-I, §3.2.
5465+ Lexically-scoped borrowed views (`with Buffer.view(...) as bytes { ... }`, or
5466+ `view bytes = ...`) that cannot be retained, escape their scope, cross an
5467+ await, or enter managed graphs. No surface lifetimes. Design-compatible; large.
5468+
5469+ 2. Capability objects / explicit dynamic dispatch — §20.1-G, §3.2.
5470+ Review-visible `capability`-bounded dispatch (`store: read capability Store<T>`),
5471+ NOT Rust-style implicit `dyn` coercion (which stays a non-goal, §21). The review
5472+ map must flag every capability boundary. Design-compatible; large.
5473+
5474+ 3. Cross-isolate message API (zero-copy transfer) — §20.1-B.
5475+ Typed send/receive channels between isolates; payloads are Copy/owned data or
5476+ values moved with `take`; managed handles never cross. Depends on the isolate
5477+ model; design-compatible; large.
5478+
5479+ 4. Two-tier execution (dev interpreter + AOT) — §20.1-C.
5480+ The reg-VM and the Rust-lowering backend already run at parity; this commits to
5481+ the fast HIR-level dev loop as a first-class tier. Infrastructure, not new
5482+ surface — both tiers must keep identical semantics and diagnostics.
5483+ ```
5484+
5485+ These four override the corresponding "not adopted" / "not executable in v0.7"
5486+ notes in §3.2 and §20.1 for those features.
5487+
5488+ ** Removed, not deferred.** Unstructured ` spawn ` / public task handles and
5489+ Rust-style open enums were previously listed as future directions. They are
5490+ * deleted* from the roadmap, not merely deferred, because they contradict core
5491+ RSScript principles: ` spawn ` breaks the single-isolate, structured-concurrency
5492+ model (` task_group ` is the sanctioned form), and open enums break the sealed-sum
5493+ guarantees that make match-exhaustiveness and review-diffs sound. Both are stated
5494+ as firm non-goals (§21); the compiler continues to reject ` spawn ` with a stable
5495+ diagnostic.
5496+
54475497---
54485498
54495499## 21. Non-goals
@@ -5457,6 +5507,8 @@ LLVM backend
54575507JIT
54585508surface Rust lifetimes
54595509surface & / &mut
5510+ unstructured spawn / public task handles (breaks single-isolate structured concurrency; use task_group)
5511+ Rust-style open enums / open sum extension (breaks sealed-sum exhaustiveness + review diffs)
54605512Rust-style traits as source semantics
54615513associated types
54625514blanket impls
0 commit comments