Nocter v0.33.0 Release Notes
Nocter v0.33.0 adds structural tuples as one complete language feature. Tuple values, tuple types, numeric projection, local destructuring, ownership, destruction, native layout, formatting, and semantic editor behavior now share the same positional product model. The only implemented host and native target remains arm64-darwin.
Structural Tuple Values
Tuple values and types contain at least two elements:
let pair: (String, i32) = (String "north", 7)
let name = &pair.0
let (moved_name, count) = move pair
Elements evaluate from left to right. Numeric projections are compile-time positions, not dynamic indexes. Projected places support the same read, write, borrow, move, and partial-move rules as named structural fields. Local binding patterns recurse through nested tuples and may discard an element with _.
Tuple identity is structural and ordered. Each concrete layout is computed once by the target layout store, including element padding and final tail padding. Owned elements are destroyed in reverse order, while moved elements are excluded by the checked cleanup plan.
Borrowed Text Splitting
std/str now exposes:
pub noalloc method &self.split_once(separator: &str): (&str, &str)? from self
The method returns two borrowed views around the first separator occurrence without allocating. An empty separator produces an empty prefix and the complete input as the suffix. The public tuple example demonstrates returned products, projection mutation, rvalue projection, destructuring, discard patterns, and owned cleanup.
Tooling
The formatter has one canonical tuple list policy for values, types, and local patterns. Hover and semantic highlighting cover the exact numeric projection token. Completion offers only valid positions from the checked receiver shape, including syntax-recovery cases. Numeric positions are occurrences rather than declarations, so definition requests do not invent synthetic fields.
Compatibility and Non-goals
This release deliberately excludes empty and one-element tuples, named tuple elements, tuple structs, dynamic numeric indexing, tuple expansion, variadic tuples, and tuple patterns outside local bindings. Tuples do not synthesize operators, coercions, hashing, formatting, or interface implementations. Named records remain the intended representation when element names carry domain meaning.
Candidate Qualification
Release-content commit 9fedd9a4be12d748f055da777436295021a4466a passed two independent complete locked workspace and warnings-denied Clippy runs, no-default-features checking, deterministic documentation, formatter and repository checks, explicit public-HTTPS acquisition, byte-identical optimized packaging, fresh installed-home execution of every public example, tuple-specific native behavior, framed LSP requests, home immutability, and compiler and standard-library tamper rejection.
The retained local archive is 8,342,442 bytes and has SHA-256 ca2c41bfdb96f955e24ad2603cbbfd6e4d7a1b425daf95927a79e1e44d5fdef4. Publication reuses that qualified archive without rebuilding it.