Programming Language

Nocter

A self-contained systems language built around simplicity, encapsulation, and foolproof design.

/releases/v0.14.0.md

Nocter v0.14.0 Release Notes

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

Nocter v0.14.0 replaces the compiler with a specification-first implementation. The new compiler was built from the normative language, standard-library, CLI, editor, ABI, and target contracts without consulting or behavior-matching the previous implementation. It retains one public language across checking, native builds, execution, tests, and editor analysis.

Closed Compiler Boundaries

Each compilation stage now consumes only the immutable contract exported by its predecessor:

  • source and syntax own normalized text, tokens, lossless trees, and source ranges;
  • declaration lowering owns semantic identities, namespaces, generic requirements, public contracts, and source projection;
  • checking owns typed bodies, dispatch, ownership, loans, provenance, regions, outcomes, and cleanup;
  • target construction owns the validated toolchain snapshot and reachable concrete program;
  • MIR owns explicit control flow and storage without resolver or syntax access;
  • the machine program owns layouts, ABI decisions, primitives, linkage, and validated dataflow;
  • ARM64 lowering and Mach-O writing consume only target-owned operations and fixups.

Executable storage, runtime contracts, source overrides, editor document versions, and semantic presentation are separate authorities. Backend crates cannot reopen checking or reconstruct source meaning, and editor features cannot infer semantics from rendered text.

Complete Native Language Path

The compiler accepts the complete current grammar and checks modules, visibility, generics, interfaces, associated types, opaque results, construction, instances, conformances, operators, coercions, closures, iteration, outcomes, ownership, regions, destruction, and source-defined literals through one typed program boundary.

Reachable functions, closures, drops, tests, literal packs, iterator expansions, and opaque witnesses specialize into deterministic MIR. The ARM64 macOS backend directly emits a signed Mach-O image without an external assembler, linker, SDK, or runtime library. Native qualification covers allocation contexts, regions, cleanup, process state, syscalls, I/O, indirect values, views, packs, iteration, destruction, checked indexing, and public examples.

Packages and Commands

Package discovery, dependency resolution, exact authored locks, acquisition, and installed package state have distinct owners. nocter fetch is the only command allowed to acquire dependencies and commit lock or store changes.

nocter init creates nocter.nct, root index.nct, and tests/unit/index.nct only after all owned paths pass preflight. A later write failure rolls back every path it created without removing unrelated content. Executable and library templates both pass the public check and native test paths.

nocter graph uses the ordinary exact resolver but has no acquisition or mutation authority. Its stable human projection and nocter.package_graph JSON v1 envelope expose sorted packages, source kinds, exact locks, and resolved package identities.

Diagnostics and Language Server

Source-backed diagnostics retain semantic subjects until a separate source index projects exact primary and related ranges. Command JSON, editor diagnostics, hover, completion, semantic tokens, definition, references, rename, signature help, inlay hints, and code actions consume shared typed presentation contracts rather than parsing display strings or repeating compiler decisions.

The language server owns document generations independently from compiler source overrides, selects initialized workspace roots deterministically, and implements framed initialize, initialized, shutdown, and exit behavior using the release identity from the installed home.

Compatibility and Scope

The v0.14.0 compatibility boundary is the published specification, not undocumented behavior or diagnostic wording from the replaced compiler. Unsupported language and runtime forms are rejected before machine-code emission. The only implemented host and native target remains arm64-darwin; reserved targets remain recognized but not implemented.

Qualification

The qualified arm64-darwin archive is 6,933,923 bytes with SHA-256 f0ce9d0f14e69fca33340aca85574f254e2e457a68299eaeb6a81f7f3e366bd7. It was generated twice from release-content commit a59d4e387eff45c4975b38c771597688417ae4d6; both compressed archives and both extracted homes were identical.

A fresh extraction without environment configuration passed release identity and installation diagnosis, package initialization, locked/offline check and native test, deterministic JSON graph, run, explicit build, direct Mach-O execution, and the complete framed LSP lifecycle. The installed home remained byte-identical throughout the smoke matrix. The published release contains exactly that qualified archive.