compliance checklist
α1α1 compliance checklist
Core Language
- No exceptions or implicit panics
-
constby default;varonly when necessary - Explicit
inoutfor by-reference mutation - Boolean conditions are explicit (
== true,!= false) - Explicit number casts (
u32(x), not implicit) - No optional chaining; handle
T?viamatchor explicit checks - Single equality operator
==(no===) - No implicit type coercion
Type System
- Strict nominal typing (no accidental structural compatibility)
- No
anytype; useunknownwith explicit narrowing - Explicit variance annotations (
in/out) where needed - Conditional types non-distributive by default
- Literal type preservation with
const
Functions
-
functionkeyword for all functions (named, anonymous, inline) - No arrow syntax (
=>) - No
fnshorthand - Function signatures always explicit (params, return, error, effects)
Effects
- Functions declare
effects [...]when performing side effects - Public/ABI exports explicitly declare effects
- Effect subset rule enforced: called effects ⊆ caller effects
- Async suspension only with appropriate effects (
net,io,time) - Effect polymorphism via spread syntax (
...)
Errors
- Standalone
errortypes declared outside domains - Domains as unions of error types
-
Pick/Omitfor precise error subsets -
error Eclause on fallible functions - Public exports explicitly declare error domain
-
ok/erronly used in functions witherror E - Error values carry context frames
- Propagation uses
check/ensure/map_error
Polymorphism
- No
role/trait/protocolkeywords - No
implblocks - No method syntax (
x.method()) - No
selfkeyword - Operations defined as record types
- Implementations as namespaced constants (
Type.impl) - Explicit parameter passing for polymorphism
Capabilities
- Capability parameters marked with
cap - Capabilities passed explicitly (no ambient authority)
-
fseffect requiresFscapability -
neteffect requiresNetcapability -
timeeffect requiresClockcapability -
rngeffect requiresRngcapability
Memory
- Regions explicitly created and disposed
-
defer region.dispose()for cleanup - Views carry region ID
- No reading uninitialized memory
- Mutable views have exclusive access
- Region transfer is explicit (
view.move,view.copy)
Packages
-
deps.fefor dependencies (CLI-editable) -
build.fefor complex build logic (optional) - Content addresses computed by tooling
-
ferrule.lockcommitted for reproducibility - Package capabilities declared and enforced
Generics
- Explicit variance (
in/out) - Const generics for type-level values
- Conditional types with
infer - Non-distributive by default
- Variadic generics (
...Ts)
Style
- Types use
PascalCase - Variables/functions use
camelCase - Avoid deep nesting; use early returns
- Comments add value; no filler comments
- Input validation at boundaries
- No hardcoded secrets
Tooling
-
deps.feis valid -
ferrule.lockis up to date - All compiler errors resolved
- All warnings addressed or explicitly allowed
- Tests pass in deterministic mode
Summary Table
| Feature | Status in α1 |
|---|---|
| Core syntax | Stabilizing |
| Type system (nominal) | Stabilizing |
| Effect system | Stabilizing |
| Region/view | Stabilizing |
| Generics (advanced) | Feature-gated |
| C ABI | Stable |
| WASM components | Feature-gated |
| Inline assembly | Feature-gated |