Skip to content

Nocter v0.17.0

Latest

Choose a tag to compare

@rvo-jp rvo-jp released this 25 Aug 12:45
· 1 commit to main since this release

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.