Programming Language

Nocter

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

Nocter v0.68.0 Release Notes

Nocter v0.68.0 improves native executable size and runtime through one target-independent Machine optimization boundary. It changes neither Nocter source-language syntax nor the public standard library. Every ordinary and compiler-generated function now reaches the native target through the same optimized immutable program model.

One Optimized Machine Program

Machine bodies now have one lifecycle: complete mutable draft, target-independent optimization, immutable freeze, and dataflow construction. Ordinary source bodies, generated destruction, and erased-callable adapters all use that path. ARM64 sees only the frozen result, so it cannot retain stale liveness or repeat source-level and target-independent decisions.

The optimizer owns one conservative legality model. It folds closed Boolean operations and control flow, removes unreachable blocks and the complete closure of unused identities, and removes a value only when its Machine operation is proven both non-observable and non-trapping. Calls, ownership transitions, cleanup, recoverable failure, allocation, blocking work, suspension, cancellation, and unresolved safety checks remain barriers.

Storage, Aggregate, and Safety Proofs

Exact same-block stack stores can forward a later whole-object load until a call, indirect access, block edge, type mismatch, or representation mismatch ends the proof. Unobserved local stack storage and redundant drop-flag writes then disappear through the same dense pruning authority. Readonly borrow weakening retains its semantic type while sharing proven physical storage, so ARM64 emits no representation-preserving copy.

Lane-complete small aggregates are constructed directly in their result registers. Partial lanes retain zero-initialized stack staging. A single pre-frame plan is consumed by frame placement and instruction selection, including cycle-safe parallel copies.

Constant fixed indexes now carry one Machine-owned disposition: proven in bounds, proven trap, or runtime check required. ARM64 consumes that proof without repeating range analysis. In-range fixed indexes form direct offsets, known failures remain unconditional bounds traps, and dynamic or view-bounded indexes retain runtime checks. Exact projected stack addresses become removable only after checked offset, extent, and alignment proofs.

Measured Native Results

A new external benchmark runner builds and validates seven complete public applications through the ordinary installed compiler. It records compiler, installed-home, source, deterministic input, host, executable, and sample-order identity rather than entering a compiler-private path.

On the final retained-candidate comparison against v0.67.0 on an Apple M1, four executable images became 3.67–6.16% smaller and three were unchanged. Runtime medians for the five computation-bearing workloads improved by 6.22–14.06%. Process-pipeline and bounded-service workloads remained within 0.85% because external I/O and deliberate waits dominate them. These figures describe that controlled host and input set; they are not universal performance guarantees.

Compatibility and Non-goals

v0.68.0 preserves the v0.67.0 language and standard-library surface. It does not add optimization attributes, profile-guided optimization, a JIT, LLVM integration, unsafe check removal, or another native target. Compilation and editor queries do not run the native optimizer unless they actually construct a native MachineProgram.

Release Qualification

Release-content commit 8b14736dffecbc15d2afc83061a253e1e98da3d4 passed the complete compiler, native, LSP, documentation, example, installed-home, deterministic packaging, and artifact-integrity gates. Two independent builds produced byte-identical archives and recursively identical installed homes. The retained 9,561,026-byte nocter-v0.68.0-arm64-darwin.tar.gz archive has SHA-256 36c26be4910a07bc7cb36ffbec30c36d4280f8d1a18a72da40d1775ecbc3a775. Publication must reuse that exact archive without rebuilding it.