Freeze the vertical-slice subset #79

Open
opened 2026-10-04 02:37:21 +00:00 by jacksonopp · 0 comments
Owner

Design/risk issue, same shape as #69/#76 - decide this before writing any codegen.

Explicitly freeze what's in and out of the vertical slice, so later steps have a fixed target:

In:

  • Int/Bool literals, arithmetic/comparison ops
  • let/var bindings and reassignment
  • if/else as a value-producing expression
  • non-generic fn definitions and calls

Out, explicitly unreachable from this subset (not just "unused"):

  • fail(Reason)/?/where fails
  • the effect system
  • generics
  • structs/enums/arrays/maps/strings
  • loops
  • concurrency (sync/race/rush/branch/spawn)

The "explicitly unreachable" framing matters: the point of this milestone is to not need rework once Step 3/4 land, so nothing in the slice should quietly assume semantics (e.g. "this function can't fail") that later steps will contradict.

Also decide:

  • The entry-point convention (fn main() -> Int? something else?)
  • How output is observed - process exit code, a minimal print builtin calling back into a tiny Rust runtime function, or both

This issue blocks every other issue in the milestone.

Design/risk issue, same shape as #69/#76 - decide this before writing any codegen. Explicitly freeze what's in and out of the vertical slice, so later steps have a fixed target: **In:** - `Int`/`Bool` literals, arithmetic/comparison ops - `let`/`var` bindings and reassignment - `if`/`else` as a value-producing expression - non-generic `fn` definitions and calls **Out, explicitly unreachable from this subset** (not just "unused"): - `fail(Reason)`/`?`/`where fails` - the effect system - generics - structs/enums/arrays/maps/strings - loops - concurrency (`sync`/`race`/`rush`/`branch`/`spawn`) The "explicitly unreachable" framing matters: the point of this milestone is to not need rework once Step 3/4 land, so nothing in the slice should quietly assume semantics (e.g. "this function can't fail") that later steps will contradict. Also decide: - The entry-point convention (`fn main() -> Int`? something else?) - How output is observed - process exit code, a minimal `print` builtin calling back into a tiny Rust runtime function, or both This issue blocks every other issue in the milestone.
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jacksonopp/twill#79
No description provided.