Nocter v0.21.0 Release Notes
Download nocter-v0.21.0-arm64-darwin.tar.gz
Nocter v0.21.0 adds representation-neutral Map<K, V> and Set<T>, keyed mapping literals, and the
interface prerequisites needed to express their contracts in ordinary Nocter source. It also
unifies command-line and editor analysis around one revision-bound semantic computation. The only
implemented host and native target remains arm64-darwin.
Map and Set
Map<K, V> and Set<T> are the standard unordered associative collections. Both are available
from the prelude. Their public contracts do not expose the private hash-table representation,
bucket layout, probing strategy, seed, or hash algorithm, and there are no parallel HashMap or
HashSet aliases.
Map supports insertion, replacement, optional lookup, indexing, removal, readonly and readwrite
iteration, and ownership transfer. Set supports insertion, membership, removal, readonly
iteration, and ownership transfer. Exact-size iterators report their remaining item count. Map
keys remain readonly during iteration, and Set deliberately has no readwrite iterator.
Mapping Literals and Hashing
Keyed argument packs generalize literal arguments without flattening keys and values into unrelated
sequences. Mapping literals use the ordinary source-declared literal mechanism:
let counts = Map [
String "apple": 3,
String "orange": 2,
]
std/hash.Hash requires coherent equality and writes through an opaque HashState. Hash output
and unordered iteration order are process-local implementation details, not stable serialized data.
Map and Set are not themselves hashable in this release.
Interface Prerequisites
An interface may require another interface, operator, coercion, index operation, expansion, or
callable shape. A generic bound receives those consequences from the interface contract instead of
repeating them at every use site. Associated type bindings use the canonical dotted form, such as
impl Iterator { .Item = T }.
The compiler retains exact capability evidence for transitive prerequisites, validates cycles and
implementation proofs, and uses the same evidence for dispatch, ownership, provenance, and editor
presentation.
Dependency Exact Selections
Exact dependency selections now live in the dependency record that owns the source intent. Git
dependencies accept commit, archive dependencies accept sha256, and path dependencies accept
neither. The former top-level #lock directive is rejected rather than retained as compatibility
syntax.
Generated selections insert only the missing field, preserve surrounding source layout, and verify
the acquired package content before it enters the resolved graph. Locked and offline operations
continue to use the same command-line policy.
Unified Compiler and Editor Analysis
CLI and LSP requests now consume one revision-pinned semantic query graph. Declaration, body,
recovery, and finalization decisions are computed once and exposed through explicit capabilities;
editor features cannot select a different compiler phase or reconstruct missing semantic results.
Revision ownership rejects stale or foreign source products, and historical editor computations are
collected under a bounded retention policy.
Practical Qualification
The examples/line-frequency package uses public file, string, Map, Set, process, and formatting
APIs to count matching and distinct lines. Native integration and editor tests cover collisions,
replacement, removal, growth, allocation failure, move-only cleanup, borrowed and owning iteration,
diagnostics, hover, completion, signature help, navigation, and formatting without exposing the
private table.
Compatibility
v0.21.0 intentionally removes the top-level #lock package directive. It does not add another
native target, stable unordered iteration, ordered maps, heterogeneous lookup, custom hashers,
entry handles, mapping spread, dynamic interface values, or compatibility aliases for the private
storage strategy.
Qualified Candidate
The v0.21.0 candidate was qualified from commit
df0cf643c51e109fa80fe793d15f67668c82d2d4. Two independent optimized builds produced
byte-identical archives and installed homes. The ARM64 Darwin archive is 8,170,000 bytes with
SHA-256 3648737369b23086c7e70a91b59998c6f25402818b8bfb21a76bd6e2fcca62e8.
Two clean locked workspace test runs each reported 1,445 passed, zero failed, and one ignored.
Warnings-denied Clippy, formatting, manifest validation, documentation generation, public-HTTPS
dependency acquisition, deterministic packaging, fresh-install CLI, native execution,
standard-library, and LSP checks passed.