Nocter v0.22.0 Release Notes
Download nocter-v0.22.0-arm64-darwin.tar.gz
Nocter v0.22.0 adds a strict, owning JSON foundation implemented as ordinary standard-library source. It provides exact JSON numbers, whole-text parsing, compact String generation, and direct Writer output without adding compiler-known JSON behavior. The only implemented host and native target remains arm64-darwin.
JSON Values and Numbers
std/json.Value represents null, booleans, exact numbers, owning UTF-8 strings, ordered arrays, and unordered objects. Arrays use Vec<Value> and objects use Map<String, Value> without exposing either representation through the JSON contract.
Number validates and retains the exact source token instead of converting through binary floating point. -0, fraction spelling, exponent marker case, and explicit exponent signs survive a parse/generate round trip. Exact i64 and u64 projection is available when the mathematical value is integral and in range.
Strict Parsing
parse uses the current allocation context, while try_parse routes owned values, decoded names, error detail, containers, and parser state through an explicit recoverable allocator. Successful values and recoverable errors do not borrow the input or capture an unrelated current region.
The parser accepts one complete RFC 8259 JSON text, decodes all string escapes and UTF-16 surrogate pairs, rejects non-JSON extensions and byte order marks, and rejects duplicate object names after escape decoding. An explicit owning stack handles nested arrays and objects without a fixed parser depth limit or recursive parser calls.
Compact Generation and Writer Output
stringify and try_stringify produce one compact JSON String. write and try_write stream the same spelling to any io.Writer without constructing a complete intermediate String. One traversal and one escaping engine own both destinations, so punctuation, exact Number tokens, Unicode, and control escapes cannot diverge between the two APIs.
Object order remains unspecified because JSON objects use representation-neutral Map semantics. This release does not add pretty printing, sorted or canonical objects, floating-point conversion, streaming input, reflection, or serialization derivation.
Practical Integration
The json-normalize example combines process arguments, UTF-8 filesystem input, strict parsing, Writer generation, and public error reporting. Native process and editor qualification cover valid nested input, malformed input, usage failure, hover, completion, signature help, navigation, and diagnostics without exposing parser or traversal internals.
Standard-Library Stabilization
Vec, String, Map, and Set now share the stable std.mem.capacity_overflow error identity. Ordinary Vec insertion separates bounds termination from allocation termination through a private allocation-only core. Formatting and single-item iteration delegate generic value copying and replacement to focused package-internal pointer helpers rather than reconstructing raw operations at each call site.
Public collection, text, memory, formatting, I/O, path, and process contracts also carry expanded documentation for language-server hover. The standard dependency graph continues to reject every new unreviewed cross-module dependency.
Compatibility
v0.22.0 retains the v0.21.0 language, package, ownership, Map, and Set contracts. The JSON API is a new standard module; it introduces no compatibility alias, new syntax, compiler primitive, ABI, runtime library dependency, or second target.
Qualified Candidate
The v0.22.0 candidate was qualified from commit da3bae295a85bfafa874f77601f248760ea7de42. Two independent optimized builds produced byte-identical archives and installed homes. The ARM64 Darwin archive is 8,183,692 bytes with SHA-256 0c2de4ec772241de26800edf9612a078ff1e1e75bfc00cd9d39db8b24be32083.
Two clean locked workspace test runs each reported 1,453 passed, zero failed, and one ignored public-HTTPS test, which passed separately. Warnings-denied Clippy, formatting, manifest validation, documentation generation, deterministic packaging, fresh-install CLI and native execution, and installed standard-library LSP checks passed.