Nocter v0.7.0 Release Notes
Nocter v0.7.0 simplifies public storage contracts. Allocation performed by an implementation and fresh storage retained by a result are compiler-owned facts. Source declarations use from only when a caller must track storage retained from a receiver, parameter, typed-literal element pack, allocator capability, or static origin.
Source Contract
The result allocation modifier from v0.6.0 is removed:
func copy(text: &str): String
func view(text: &String): &str from text
func copy_with(allocator: &+Allocator, text: &str): String from allocator
Absence of from means that a result retains no caller-managed external origin. It does not promise allocation-free execution. alloc remains an ordinary identifier, including std/mem.alloc.
Public bodies are checked against this contract. Functions, methods, construction functions, literals, interface defaults, and conformance members cannot hide receiver or parameter storage in a result. Interface implementations may narrow an external-origin contract to fresh or static storage, but cannot introduce an origin absent from the interface.
Typed Literals and Collections
A typed sequence literal can name its element pack when returned elements retain caller-managed storage:
construct Vec<T> {
pub default literal [](...items: T): Self from items {
// ...
}
}
The pack remains compiler-owned and cannot escape as a value. from items maps its declaration identity to the fixed and spread elements supplied at each literal expression. Standard Vec<T> copying, iterator construction, removal, and pop operations now state their element-storage origins explicitly.
Editor and Compiler Behavior
Hover, completion, signature help, construction surfaces, semantic tokens, diagnostics, and source edits render the accepted source declaration. They do not expose fresh-result markers, ambient allocation context, or inferred allocation prose. Obsolete modifier syntax receives a focused parser diagnostic without entering the AST or formatter.
Migrating from v0.6.0
Remove result alloc wherever it precedes a callable declaration or structural callable type:
// v0.6.0
alloc func copy(text: &str): String
alloc &+func(Input): Output
// v0.7.0
func copy(text: &str): String
&+func(Input): Output
Keep valid from clauses. Add from items to a public sequence literal whose result retains storage carried by its elements. No compatibility AST or formatter mode accepts the old modifier.
Distribution Boundary
The supported host and target remain arm64-darwin. The release is a self-contained .nocter/ directory containing the compiler, metadata, licenses, and standard-library source.
noalloc, realtime, async, named lifetime parameters, runtime interface dispatch, additional targets, and a stable cross-version ABI are not part of v0.7.0.
Qualification
The release passes clean and incremental complete repository verification. Each run passes 3,284 tests across compiler libraries, CLI build and run paths, formatter and LSP protocols, packages, native tests, the distributed installed home, public examples, and the source corpus. Formatting, documentation generation, and warnings-denied Clippy also pass.
The qualified arm64-darwin archive is 3,285,691 bytes with SHA-256 080160481adbcb0b7f64ab87903b05814aad13fc16207dcc9602e655675f2d78. A fresh extraction without environment configuration passes doctor, package initialization, locked/offline check and a native test, deterministic JSON graph generation, run, explicit build, direct Mach-O execution, and the LSP lifecycle.