Programming Language

Nocter

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

/releases/v0.6.0.md

Nocter v0.6.0 Release Notes

Nocter v0.6.0 makes callable allocation and storage-origin contracts explicit, checkable, and consistent across source, generic APIs, the standard library, and editor tooling. It distinguishes storage newly allocated into a result from storage retained from an existing value without exposing the compiler's ambient allocation context as source syntax.

Download nocter-v0.6.0-arm64-darwin.tar.gz

Result Contracts

alloc describes newly allocated storage retained by a result. from independently describes an existing receiver, parameter, allocator, or static origin retained by that result:

func len(text: &str): usize
alloc func copy(text: &str): String
func view(text: &String): &str from text
alloc func copy_with(allocator: &+Allocator, text: &str): String from allocator

Temporary allocation does not require alloc when no allocated storage survives in the result. Conversely, absence of alloc is not an execution-time allocation guarantee. noalloc and realtime are reserved for future independent contracts.

The compiler validates body-backed contracts from returned values rather than trusting their written modifiers. Recursive calls, optional and fallible branches, aggregate fields, closures, generic specialization, interface defaults, mutable owners, and ownership transfer preserve the same allocation and origin facts.

Standard Library and Iteration

  • Every callable in all 23 distributed standard-library modules participates in one automated contract audit.
  • String, Vec<T>, process, I/O, typed-literal, iterator, and allocator APIs use canonical alloc and from contracts.
  • Generic iterator advancement retains allocation and source-origin upper bounds through adapters, callbacks, collection for, and consuming ownership transfer.
  • Empty collection storage remains neutral until first growth selects an allocation domain.

Editor and Diagnostics

Hover, completion, signature help, construction surfaces, diagnostics, and code actions render one normalized source declaration. They no longer display compiler-only phrases such as inferred storage origins or execution allocation effects. A missing alloc contract identifies a concrete returned expression or call and edits only its owning declaration.

Source Changes

The removed from current spelling has no compatibility parser. Use alloc when a result may retain newly allocated storage, and add from name only when it also retains storage from a named receiver, parameter, allocator, or static origin.

Qualification

The release passes 2,277 compiler-library tests, 296 build tests, 449 run tests, 24 framed LSP tests, 18 package tests, 11 native-test tests, 208 distributed-home tests, public examples, the source corpus, formatting, and warnings-denied Clippy. The optimized archive passes doctor and a fresh package's locked/offline check, native test, graph, run, explicit build, and direct Mach-O execution without repository configuration.

Explicit Limits

The supported host and target remain arm64-darwin. noalloc, realtime, source-level lifetime parameters, runtime interface dispatch, async, concurrency, registries, workspace membership, and a stable cross-version ABI are not part of v0.6.0.