Skip to content

Nocter v0.33.0

Latest

Choose a tag to compare

@rvo-jp rvo-jp released this 03 Sep 22:52
· 1 commit to main since this release

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.