Skip to content

Nocter v0.7.0

Choose a tag to compare

@rvo-jp rvo-jp released this 07 Aug 16:55
· 22 commits to main since this release

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.