Skip to content

Nocter v0.14.0

Choose a tag to compare

@rvo-jp rvo-jp released this 23 Aug 01:06
· 59 commits to main since this release

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.