Programming Language

Nocter

A self-contained systems language built around simplicity, encapsulation, and foolproof design.

/releases/v0.17.0.md

Nocter v0.17.0 Release Notes

Download nocter-v0.17.0-arm64-darwin.tar.gz

Nocter v0.17.0 makes local file-processing applications practical, gives physical source layout a single meaning, and reconstructs the standard library around readable public contracts.

The only implemented host and native target remains arm64-darwin.

Package and Source Layout

A package now has one root: an index.nct containing #package. The same file declares the package and defines its root module. The separate nocter.nct manifest and its overlapping entry rules have been removed.

Every .nct file physically below a module root belongs to that module until a descendant index.nct starts a child module. Physical membership does not make declarations mutually visible. The new see ./implementation.nct declaration grants direct, directional visibility between exact sources in the same module. It replaces include; visibility is not transitive and never creates a namespace or loads a source.

Module roots remain the public contract. Nontrivial bodies may live in ordinary sources joined by reciprocal see declarations, so index.nct can describe the complete public API without exposing private representations or implementation helpers.

Practical Filesystem APIs

The new std/fs module provides whole-file operations and portable metadata:

use std/fs

let text = fs.read_to_string("input.txt")?
fs.write_text("copy.txt", &text)?
let details = fs.metadata("copy.txt")?
if details.is_file() {
    fs.rename("copy.txt", "complete.txt")?
}

read, read_to_string, write, and write_text compose the existing File, Reader, and Writer contracts. metadata, exists, remove_file, and rename expose portable behavior without leaking syscall numbers, errno values, or Darwin layouts into public APIs. Borrowed paths reject embedded NUL before a target call, and filesystem failures continue to use the built-in error channel.

Standard-Library Structure

Standard module roots now contain user-visible contracts without implementation bodies. Borrowed UTF-8 search, ranges, and iterators belong to std/str; std/string owns allocated storage, construction, mutation, and UTF-8 validation. Pointer internals, allocation internals, OS facts, path encoding, and I/O error policy have separate package-internal owners.

These boundaries do not add synthetic compiler APIs. Hover, navigation, completion, checking, and native compilation consume ordinary source declarations from the same standard package.

Editor Analysis

The editor retains the deepest trustworthy semantic information from the current source generation. An unrelated declaration or body error no longer erases valid hover, navigation, or completion facts. Rejected construction, instance, conformance, and destruction declarations stay out of global dispatch while independent body-local semantics remain available.

The compiler now represents these recovery capabilities with distinct types. No editor feature can turn a rejected declaration graph into a successful compilation or reuse semantics from an older generation.

Compatibility

This release intentionally removes the old nocter.nct package declaration and include spelling. Migrate package directives into the root index.nct, remove entry-file indirection, and replace each source visibility edge with see.

The release does not add directory traversal, networking, concurrency, asynchronous I/O, runtime interface objects, user-defined failure payloads, or another native target.

Qualification

The release-content commit is 2c2c01d6879984c3dc856a1b1989f31d19870a35. Two independent locked workspace test runs passed with 1,255 tests passed and 1 ignored in each run. Strict Clippy, formatting, public-HTTPS package acquisition, manifest validation, generated documentation, and repository-integrity checks also passed.

Independent optimized builds produced byte-identical archives and recursively identical installed homes. The qualified nocter-v0.17.0-arm64-darwin.tar.gz is 7,242,633 bytes and has SHA-256 7933950c520367e3af21ee19121069aee73815f0ba56691c063786fd530b499c. A fresh extraction passed version, doctor, help, initialization, locked and offline checking, native test, deterministic package graph, native run, explicit build and execution, and framed language-server checks without mutating the installed home.