Programming Language

Nocter

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

/development/milestones/v0.34.0.md

v0.34.0: Unicode Scalar Text Foundation

Status: published and externally audited (2026-09-04). v0.34.0 adds one coherent Unicode-scalar capability across literals, constants, ownership, native representation, borrowed UTF-8 iteration, owned-string mutation, formatting, hashing, and semantic tooling.

The candidate public contract is spec/34-unicode-scalars.md. The cross-crate representation boundary is development/docs/unicode-scalar-design.md.

Phase 0: Contract and Authority Design

Status: complete. Phase 0 fixes scalar validity, literal syntax, representation, standard APIs, UTF-8 ownership, tooling behavior, diagnostics, and non-goals before implementation. It also found that the existing b'…' syntax had lexer and parser support but no checker branch. The adopted design closes byte and character literals through one syntax-owned decoded-literal contract instead of reproducing that split pipeline.

Phase 1: Scalar Language and Native Product

Status: complete.

Add char to the closed built-in vocabulary, standard profile, type store, constant representation, checking, constant evaluation, MIR, runtime type closure, machine layout, ABI, and ARM64 selection. Implement syntax-owned character and byte decoding, exact lexical diagnostics, standard source declarations, and checked package-internal conversion primitives. Qualify literals, constants, arguments, returns, aggregates, tuples, optionals, equality, ordering, and malformed-source recovery.

Phase 2: Shared UTF-8 Decode and Borrowed Iteration

Status: complete.

Replace validation's private byte-classification loop with one package-internal decode-step authority. Add Chars, str.chars, and str.char_count; prove allocation freedom, exact scalar order, byte-boundary progress, borrowed provenance, iterator integration, and invariant handling.

Phase 3: Owned Text, Formatting, and Hashing

Status: complete.

Add transactional String.push and try_push, char classification and code-point observation, Format, and Hash. The encoder, allocation publication point, equality class, and scalar identity must each remain singular.

Phase 4: Tooling and Practical Integration

Status: complete.

Complete formatter, tokens/AST JSON, highlighting, hover, completion, navigation, inlay hints, recovery, public examples, and installed-standard-source behavior. No editor-specific quote parser or UTF-8 decoder is permitted.

Phase 5: Qualification and Release Preparation

Status: complete. The first candidate was invalidated by corrective source-generation, Unicode-authority, and verification-cache changes. Release-content commit b876301201105e061000e2d48c8d18246d11814d passed the complete gate and produced a replacement candidate. Publication and external asset evidence are frozen in the release audit.

Run complete workspace, warnings-denied Clippy, no-default-features, formatter, documentation, public-HTTPS, example, native, LSP, reproducible-package, fresh-home, immutability, and tamper gates. Review for duplicate literal decoding, Unicode validation, scalar identity, layout, ABI, or presentation authority before preparing a release candidate. The exact evidence belongs to the Phase 5 review and release-preparation record.

Performance Gate

Record process-cold check, representative Unicode iteration, and repeated LSP body-edit baselines. The milestone must not regress ordinary compilation to obtain scalar support, but performance measurement remains qualification evidence rather than a second runtime contract.

The original candidate changed median process-cold check from 0.83 s to 0.84 s against v0.33.0 and median repeated body-edit analysis from 23,294.533 ms to 23,352.154 ms per 100 sequential edits. These 1.2% and 0.25% changes were within measurement noise. A native six-million-scalar mixed-width iteration workload completed with a 0.49 s median wall time. These measurements remain historical development evidence; the corrective candidate does not claim a new stable timing contract.

Non-goals

Unicode property tables, case mapping, normalization, grapheme segmentation, display width, locale-sensitive behavior, scalar indexing, floating point, another target, and persistent compiler caches remain outside v0.34.0.