Nocter v0.9.0 Release Notes
Download nocter-v0.9.0-arm64-darwin.tar.gz
Nocter v0.9.0 makes borrowed text and collection behavior source-owned, adds practical whole-stream
I/O and borrowed text operations, and removes inferred result-origin noise from ordinary APIs.
Practical Stream I/O
Every Reader now shares source-defined read_to_end and read_to_string methods. They preserve
partial reads, reject impossible byte counts, propagate the first read failure, and validate UTF-8
only after the complete stream has been collected. Writer.write_text shares the corresponding
UTF-8 byte adapter. File, buffered I/O, and user-defined implementations use the same interface
defaults without concrete forwarding methods.
Result-Origin Elision
An unambiguous result origin no longer needs a written from clause. The compiler derives zero or
one caller-managed origin from the resolved declaration and validates function bodies against that
contract. A declaration whose storage-bearing result could retain more than one external input
still names the choice explicitly:
func view(text: &String): &str
func choose(left: &str, right: &str, first: bool): &str from left | right
The formatter and language server preserve authored notation. They do not insert inferred clauses
into hover, completion, or signature help.
Borrowed Text Operations
Borrowed str values support validated range projection, prefix and suffix removal, lazy splitting,
and line iteration. split_views yields borrowed components without allocation and retains both the
source text and separator. lines handles LF and CRLF terminators without synthesizing a trailing
empty line. Source provenance remains attached through optional results, iterators, adapters, and
receiver coercion.
Source-Owned View Methods
str and [T] now own their observation methods in std/str and std/slice. String and Vec<T>
reach those methods through their declared one-step borrow coercions:
let text = String "Nocter"
let text_length = text.len()
let values = Vec [1, 2, 3]
let first = values.get(0)
The old public String and Vec<T> forwarding helpers for view, view_mut, len, is_empty,
iteration, and element projection are removed. Explicit borrowed views use as, such as
(&text) as &str or (&values) as &[i32].
The compiler recognizes only four private representation primitives by resolved identity. Method
typing, ownership, lowering, hover, completion, signature help, definition, references, rename,
and semantic tokens use the selected source declaration rather than a public member name or a
synthetic owning-type method.
Compatibility and Limits
Code importing a removed owning-view forwarding function must use a method, expected-type coercion,
or explicit as expression. Construction, mutation, capacity management, ownership transfer, and
stable std/string text-operation imports remain available.
This release does not add Unicode scalar or grapheme APIs, lifetime parameters, transitive or owned
coercions, async I/O, recoverable collection allocation, dynamic dispatch, another target, or a
stable cross-version ABI. The supported host and target remain arm64-darwin.
Qualification
The v0.9.0 candidate passed clean and incremental complete repository verification, with 3,391
tests per run plus formatting, documentation generation, and warnings-denied Clippy. The local
arm64-darwin archive is 3,375,819 bytes with SHA-256
c11f7ea65f49a8061156e47af7621b46b2f86329d464a067a5efc036eecb0cf8.
Two independently created archives had equivalent extracted content. A fresh extraction without
environment configuration passed package creation, locked/offline check and native test,
deterministic graph generation, run, explicit build, direct Mach-O execution, and the complete LSP
initialize, initialized, shutdown, and exit lifecycle.