Nocter v0.25.0
Nocter v0.25.0 Release Notes
Download nocter-v0.25.0-arm64-darwin.tar.gz
Nocter v0.25.0 introduces source-visible no-allocation contracts and strengthens the compiler
ownership boundaries that preserve semantic results for CLI and editor queries. The only
implemented host and native target remains arm64-darwin.
No-allocation Contracts
noalloc is an optional callable guarantee. It states that no execution path can request new
storage from a Nocter allocator:
pub noalloc func byte_count(text: &str): usize {
return text.len()
}
instance str {
pub noalloc method &self.len(): usize
}
The same modifier applies to construction functions, literals, methods, operators, coercions,
interface requirements and defaults, primitive functions, callable types, and drop. An unqualified
callable remains valid and exports no allocation guarantee; it does not assert that allocation
occurs.
The guarantee is independent of result provenance and the hidden allocation-context ABI lane. It
does not promise absence of deallocation, traps, blocking, system calls, recoverable failures, or
other side effects.
Transitive Proof
The compiler proves noalloc from checked semantic operations rather than names or target
instructions. One program-wide least fixed point follows direct calls, callbacks, closures,
interface selection, coercions, operators, literals, implicit destruction, recursive components,
generic substitutions, and opaque witnesses. Trusted primitive metadata and one selected standard
allocation-request role close operations whose implementations cross the language boundary.
Unknown abstract callees remain conservative. A callable value or interface requirement must carry
noalloc before another public contract can rely on it. A proven no-allocation callable may erase
its guarantee when converted to an unqualified callable type, but the guarantee cannot be
reconstructed later from the hidden value.
Standard Library and Tooling
Stable allocation-free standard APIs publish noalloc only where the guarantee is intended as a
long-term contract. Generic APIs do not claim it when user-selected operators or destruction can
allocate. Primitive declarations are accepted only when the compiler's closed registry certifies
the same effect.
Formatting, hover, signature help, completion, navigation, code actions, and normalized declaration
presentation retain authored guarantees. Tooling does not synthesize inferred noalloc syntax.
Compiler and Editor Reliability
Semantic query products now preserve typed failures and exact source ownership across checking,
session, projection, target, and workspace boundaries. Recovery does not replace an earlier cause
with a generic missing-result error. Target validation consumes checked semantics without source
projection, and exact body analysis receives one checking-owned source input rather than
independently pairable source facts.
Compatibility
Existing unqualified callables remain source-compatible. Adding noalloc creates an enforced API
contract, so a declaration is rejected when direct or transitive behavior may allocate. Public
contract and private implementation declarations must carry the same guarantee. No compatibility
alias, inferred source modifier, or alternate alloc spelling is provided.
v0.25.0 retains the v0.24.0 module, ownership, standard-library, native ABI, package-integrity, and
distribution boundaries. It does not add alloc, notrap, noblock, nosuspend, realtime, a
general effect list, floating point, a second target, or persistent compiler caches.
Candidate Qualification
Release-content commit 321d171a02bcf2e818bf8a805631872ebbdbdfe1 passed two independent
locked workspace test runs, each with 1,501 passed, zero failed, and one ignored public-HTTPS test.
The HTTPS Git acquisition test passed separately, and warnings-denied all-target Clippy passed in
both clean external targets.
Two independent optimized package builds produced byte-identical archives and recursively
identical installed homes. The retained archive is 8,260,880 bytes with SHA-256
c1f0f5e0709b5b2c63ae6a2cee47a2c7926c340dc48c5be9d86c1e83b38036c9. Fresh extraction passed
the complete CLI, all public examples, native execution, and framed LSP matrix without changing the
installed home. Changing either the compiler or standard-library content was rejected before
analysis.