Nocter v0.56.0 Release Notes
Nocter v0.56.0 introduces one value-provenance contract for results, inputs, receivers, and local annotations, then uses it to provide synchronous and asynchronous lending APIs. The standard library applies that contract to reusable scan windows and HTTP query decoding so callers can keep data borrowed until they deliberately cross an ownership boundary.
One Value-Provenance Contract
from now describes where any annotated value may borrow its storage or lifetime from. It may appear on callable results, parameters, method receivers, and annotated local bindings. For example, a parameter may be constrained by another parameter, and a receiver may state the owner whose storage it observes. from static remains the explicit independent-storage form.
Callable headers reserve the receiver and every parameter before resolving these clauses, so forward references do not depend on source order. Structural callable identity stores parameter positions rather than source spellings, and compatibility includes both input constraints and result provenance.
Checked Containment
Calls must prove that every constrained argument is derived from the named source arguments. Bodies use the same containment relation for results, assignments, and local initializers. Direct calls, interface dispatch, closures, erased callables, aliases, and generic substitution all consume the same normalized contract instead of reconstructing it from source text.
This remains a value-centered alternative to named lifetime parameters. v0.56.0 does not introduce abstract outlives predicates, movable direct self-references, or variant-dependent public provenance.
Lending Iteration
LendingIterator and AsyncLendingIterator may return an associated item whose provenance is tied to the active receiver call. The yielded item cannot remain live across the next mutable advance. The rule applies through generic for and for await iteration, including mutation exclusion and asynchronous suspension.
Owning Iterator and AsyncIterator remain the appropriate contracts when each item must outlive the iterator or be retained independently.
Zero-Copy Standard APIs
std/scan provides allocation-free byte and UTF-8 cursors together with borrowed windows. ByteWindows and LineWindows reuse one owned buffer and lend each initialized result, while ByteChunks and Lines remain the independently owned alternatives.
HTTP query decoding now borrows unescaped name and value text directly from the retained request target. Percent-decoded text may use iterator-owned scratch storage. Applications call to_owned only at an explicit retention boundary; the practical HTTP service consumes query parameters without inserting a hidden copy or a second decoder.
Editor Support
Formatting, hover, signatures, navigation, semantic highlighting, diagnostics, and inlay hints project authored provenance contracts from checked semantic identities. Structural callable presentation uses stable positional parameter names and keeps input-only, result-only, combined, static, and pack-input contracts distinct. Editor protocol tests verify exact token classes and definition ranges rather than accepting merely nonempty responses.
Compatibility and Non-goals
Existing result from clauses retain their meaning. Code may add input, receiver, or local clauses where the compiler must enforce a borrowing relationship. Retaining a lent value requires an explicit ownership conversion; lending APIs do not silently allocate.
This release does not add named lifetime or origin parameters, abstract outlives predicates, general generic associated types, variant-dependent public provenance, direct movable self-references, or in-place operations that change an owner's provenance set.
Release Qualification
Release-content commit 57b138f8777a0a3362dcf6c5a98a8dbd504f6a15 passed the complete disposable compiler gate. Two independent optimized builds produced byte-identical archives and recursively identical installed homes. The retained archive is 9,308,709 bytes with SHA-256 d96f56474292b8b9f51240b1b8fcbcbff1aca18a51703224bd61b6d29927ecbd and contains exactly 328 standard-library files. A fresh extraction passed version and installation diagnosis, locked/offline package workflows, native build and execution, every public example, the lending HTTP application, interactive LSP analysis and edit recovery, immutability checks, and compiler and standard-library tamper rejection. The published release reused this exact retained archive without rebuilding it.