Skip to content

Nocter v0.18.0

Latest

Choose a tag to compare

@rvo-jp rvo-jp released this 28 Aug 01:16
· 1 commit to main since this release

Nocter v0.18.0 Release Notes

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

Nocter v0.18.0 makes type construction, builtin declarations, generic requirements, and interface
implementation more direct. It also replaces rollback-oriented compiler mutation with immutable
semantic generations, improving editor recovery without changing runtime representation or ABI.

The only implemented host and native target remains arm64-darwin.

Construction Surfaces

construct no longer has a default member. Structural Type { ... } construction is governed
only by representation and field visibility. Named factories and typed literals remain explicit
members:

construct String {
    pub literal ""(text: &str): Self
    pub func empty(): Self
}

An empty construct declaration is invalid. Hover on a nominal type presents that type rather than
appending a synthesized list of construction members; each factory or literal has its own ordinary
source-backed hover and navigation identity.

Source-Declared Builtins and Primitives

Named compiler-represented types now have ordinary declarations in the standard library:

pub primitive type str
primitive func str_len_raw(text: &str): usize

The compiler resolves each builtin declaration once from the selected toolchain package. Type
checking, inherent methods, completion, hover, and navigation consume that same identity instead of
recovering builtin ownership from a spelling or module path. Primitive functions use the same
modifier order as ordinary functions.

Interface Implementation and Generic Requirements

instance is now the sole owner of behavior attached to an existing type. The standalone
conform declaration has been removed. A bodyless impl member records interface implementation
and its associated-type bindings:

instance ValuesIter<T> {
    impl Iterator { .Item = T }

    method &+self.next(): T? {
        // ...
    }
}

Generic angle brackets contain generic arguments only. Associated bindings use braces and a
leading dot. Interface requirements use impl, while callable values remain ordinary callable
types:

func consume<T>(value: T): void where T impl Iterator { .Item = &str }
let callback: func(i32): String

Each checked interface implementation freezes its required methods to exact inherent callables.
Selection does not depend on source order, instance-fragment order, or declaration order.

Compiler and Editor Reliability

Compiler semantic state is now immutable between accepted generations. Type interning,
copyability, and closure construction use explicit branch-local transactions: success commits a
new authority, while failure discards the branch or retains an isolated recovery authority. Editor
queries cannot mutate accepted compilation output or exchange type identities between unrelated
branches.

Workspace analysis freezes one topology decision per source revision. Source projection remains an
editor and diagnostic product and cannot influence checked semantics. Package-root facts,
frontend bindings, CLI installation routing, and semantic query capability are each owned by one
explicit contract rather than reconstructed by downstream consumers.

Compatibility

This release intentionally has no compatibility parser or fallback for the removed forms:

  • remove default from construct members;
  • replace primitive Name with primitive type Name and primitive callable declarations with
    primitive func;
  • move standalone conform declarations into instance as bodyless impl members;
  • replace colon-based interface constraints with impl constraints;
  • replace associated bindings in angle brackets with { .Name = Type };
  • use callable types directly instead of treating func(...) as an interface requirement.

The release does not add dynamic interface values, erased callable objects, interface inheritance,
runtime generic dictionaries, another native target, or new practical standard-library APIs.

Qualified Candidate

The v0.18.0 release candidate was qualified from commit
4490dcd411215ae43b196dbde71f9b1afbec2ae7. Two independent optimized builds produced
byte-identical archives and installed homes. The ARM64 Darwin archive is 7,498,219 bytes with
SHA-256 534e4ea5231923877ee76cdadeb070a4c11f881dc09ecb517b037af49a17abf6.

Two clean locked workspace test runs each reported 1,350 passed, 0 failed, and 1 ignored. Clean
warnings-denied Clippy, formatting, manifest, documentation, public-HTTPS dependency acquisition,
fresh-install CLI, native execution, standard-library, and LSP checks also passed.