Nocter v0.26.0 Release Notes
Download nocter-v0.26.0-arm64-darwin.tar.gz
Nocter v0.26.0 adds normalized durations, monotonic elapsed-time measurement, and blocking sleep. The only implemented host and native target remains arm64-darwin.
Normalized Durations
std/time.Duration represents a non-negative span as normalized whole seconds and subsecond nanoseconds:
use std/time.Duration
let delay = Duration.from_milliseconds(250)
let seconds = delay.whole_seconds()
let nanoseconds = delay.subsecond_nanoseconds()
Constructors accept the complete u64 input domain without intermediate overflow. checked_add returns absence when the normalized result is unrepresentable, and checked_sub returns absence when its argument is greater than the receiver. Equality and strict ordering compare the mathematical duration rather than its private representation.
Monotonic Elapsed Time
Instant observes one process monotonic-clock domain without exposing hardware ticks or target frequency:
use std/time.Instant
let start = Instant.now()
let elapsed = start.elapsed()
Successive observations do not move backward. Elapsed measurement handles one complete wrapping counter cycle, and every implemented target must make that cycle longer than one hundred years. Conversion rounds down to the greatest representable nanosecond value not later than the measured counter delta.
Blocking Sleep
The time namespace provides one blocking wait:
use std/time
use std/time.Duration
let delay = Duration.from_milliseconds(10)
time.sleep(&delay)?
A positive wait is rounded upward to the target wait resolution so it cannot become a zero wait. Large waits are split into target-representable chunks. Interruptions are retried from a freshly measured monotonic remainder; other target failures return std.time.sleep_failed.
All public duration, instant, and sleep operations publish noalloc. For sleep, this guarantees only the absence of Nocter allocator requests: the call blocks the current thread and may perform target operations.
Tooling and Runtime Reliability
Formatting, hover, completion, navigation, installed-standard checking, native tests, and the public elapsed-time example consume the same source-backed std/time contracts. The ARM64 backend orders each monotonic-counter observation instead of emitting a speculative bare register read.
The compiler-bundled standard declaration layout now has one physical profile authority shared by production compilation and physical-standard qualification. Session and backend semantic layers do not rediscover roles from standard-library paths or names.
Compatibility and Non-goals
v0.26.0 adds standard-library APIs and target primitives without adding language syntax or changing existing source forms. It retains the v0.25.0 module, ownership, noalloc, native ABI, package-integrity, and distribution boundaries.
This release does not add wall-clock time, Unix timestamps, calendar dates, time zones, time parsing or formatting, async timers, scheduler integration, noblock, realtime, floating point, a second target, or persistent compiler caches.
Candidate Qualification
The qualified release-content commit is 9ff855385a992def6d38a4d4f6b639f976c7bd24. Two independent locked workspace runs each passed 1,507 tests with zero failures and one explicitly ignored network test; the network test passed when run explicitly. Warnings-denied all-target Clippy also passed in both independent targets.
Two clean optimized package builds produced the same 8,266,313-byte archive. Its SHA-256 is a8898d54ca578a7bb9980d330fa48067df798a832a882ab1e047e17356833700. A fresh extraction passed version, doctor, initialization, locked/offline package operations, every public example, deterministic graph generation, native run and build, framed LSP analysis, installed-home immutability, and compiler and standard-library tamper rejection.