Programming Language

Nocter

A self-contained systems language built around simplicity, encapsulation, and foolproof design.

/releases/v0.51.0.md

Nocter v0.51.0 Release Notes

Nocter v0.51.0 gives callable execution behavior one explicit, time-aware semantic model. Authored guarantees, inferred implementation facts, immediate invocation, deferred future drive, and destruction are now distinct concepts with one owner each. The compiler no longer needs later stages to reconstruct whether execution may allocate or synchronously wait.

This is an architectural release. Existing noalloc, blocking, async, and future T source syntax is preserved, while their implementation contracts become stricter and easier to extend without introducing parallel effect systems.

One Execution-Fact Authority

Final checking computes allocation and synchronous-wait facts through one monotonic relation graph. The graph covers functions, methods, closures, selected calls, interface dispatch, and implicit destruction. Recursive call groups reach one order-independent least fixed point rather than being classified from declaration order or conservative lookup defaults.

Authored guarantees remain promises visible to callers. Inferred facts describe one closed implementation and are used only to validate those promises. An inferred allocation-free body cannot silently add noalloc to its public source contract, and editor presentation renders only the authored guarantee.

Immediate and Deferred Execution

Calling an asynchronous function constructs an owning future T; it does not execute the deferred body at the call site. Checked calls now retain this distinction directly. Invocation-time future construction, later drive, cancellation, and destruction remain separate execution scopes through target selection and lowering.

Consumers use the checked execution plan instead of inspecting future T, declaration fields, or generated operations to rediscover asynchronous behavior. Provenance and loan analysis receive the exact result identity for the selected scope from that same plan.

Primitive and Destruction Contracts

Runtime primitives expose typed allocation, synchronous-wait, produced-computation, and hidden- context facts. One exhaustive runtime profile assigns the complete facts for every closed primitive role. Adding a primitive without classifying it is a compilation error; it cannot accidentally inherit allocation-free or nonblocking behavior.

Target validation compares authored primitive declarations with these runtime-owned facts once. Machine and native stages consume the selected role and context plans without maintaining another primitive classifier.

Implicit cleanup uses ownership-selected destruction dependencies in the same execution relation as ordinary calls. Unknown or missing semantic identities are integrity failures rather than permission to publish a permissive execution fact.

Compiler and Editor Boundaries

Declaration lowering owns the sole syntax-to-guarantee projection for declaration headers and structural callable types. CheckedProgram publishes the sealed execution fact table; analysis, target, MIR, machine, native, and editor code cannot rerun body effect analysis.

Hover, completion, diagnostics, and other semantic editor features continue to use the same checked program as command-line compilation. They present canonical authored contracts and do not infer source modifiers from implementation details.

Compatibility and Non-goals

No public language syntax or standard-library API changed in v0.51.0. Programs accepted by v0.50.0 do not need source migration for this release.

This release does not add realtime, noabort, const func, general effect-list syntax, or new targets. Those features must build on the unified execution model rather than introduce an independent classifier.

Release Qualification

Release-content commit c9f3b6bf367619c6ba009e99dbda255b16629fc1 passed the complete disposable compiler gate. Two independent optimized builds produced byte-identical archives and recursively identical installed homes. The retained archive is 9,077,529 bytes with SHA-256 396c8cf0fe39b2d94a519e14c4c5cce13b9d3571d2fc2e7cb99568ef8373f727 and contains exactly 307 standard-library files. A fresh extraction passed version and installation diagnosis, locked/offline package workflows, native build and execution, every public example, the complete asynchronous file-report success and cleanup contracts, framed LSP analysis, immutability checks, and compiler and standard-library tamper rejection. The published release reused this exact retained archive without rebuilding it.