Nocter v0.22.0
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.