Programming Language

Nocter

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

/releases/v0.36.0.md

Nocter v0.36.0 Release Notes

Nocter v0.36.0 adds a practical UTC wall-clock foundation. Programs can observe the system clock, convert instants to validated calendar values, parse and generate a strict RFC 3339 profile, and read filesystem modification times through one shared SystemTime type. The only implemented host and native target remains arm64-darwin.

Wall-clock Instants

SystemTime.now observes the current wall clock as normalized signed Unix seconds plus nanoseconds. Unlike monotonic Instant, a SystemTime can represent the Unix epoch, dates before the epoch, persistent timestamps, and interoperable text values:

let observed = SystemTime.now()?
let seconds = observed.unix_seconds()
let nanoseconds = observed.subsecond_nanoseconds()

Construction validates the nanosecond range and maintains one canonical representation. Wall-clock observation uses a target-private standard-library adapter over the existing generic Darwin syscall boundary; calendar policy is not embedded in the compiler or backend.

Validated UTC Calendar

UtcDateTime represents a proleptic-Gregorian UTC date and time from year 0000 through 9999. Construction rejects invalid component combinations, including non-leap February 29, and conversion to or from SystemTime preserves nanoseconds:

let calendar = UtcDateTime.new(2026, 9, 6, 12, 30, 0, 0)?
let instant = calendar.to_system_time()
let round_trip = UtcDateTime.from_system_time(&instant)?

One private standard-library implementation owns conversion in both directions. Filesystem and text APIs reuse that authority rather than maintaining alternate calendar calculations.

Strict RFC 3339 Interchange

SystemTime.parse_rfc3339 accepts uppercase T and Z or a numeric minute offset, with zero to nine fractional digits. Accepted offsets normalize to UTC. Generation emits uppercase UTC text, omits a zero fractional field, and otherwise emits exactly nine digits:

let instant = SystemTime.parse_rfc3339("2026-09-06T21:30:00+09:00")?
let canonical = instant.to_rfc3339()?

The profile rejects leap seconds, lowercase separators, unknown -00:00 offsets, malformed fractions, and values outside the supported UTC year range. Ordinary and recoverable allocation entry points share the same parser and generator.

Filesystem Integration and Example

fs.Metadata.modified returns the file modification time as SystemTime, so filesystem values use the same validation, calendar conversion, and RFC 3339 generation as direct observations. The wall-clock package example observes the current time, inspects a file, converts both instants to UTC, and prints canonical text using only public APIs.

Tooling and Architecture

Hover, completion, signature help, definition, and implementation navigation follow the checked SystemTime, UtcDateTime, RFC 3339, and metadata declarations. The LSP consumes existing semantic products and does not parse source text to reconstruct these relationships.

Target-specific timeval and timeout layouts now have one owner under std/internal/time. std/internal/os/darwin retains only syscall numbers, stat offsets, errno facts, and generic syscall primitives.

Compatibility and Non-goals

This release does not add local time zones, daylight-saving rules, locale formatting, leap-second preservation, async timers, scheduling, noblock, or realtime. Existing monotonic Duration and Instant behavior is unchanged.

Candidate Qualification

Release-content commit 19030048ef6f83d7524176c0f32b4180d894ede2 passed two independent complete compiler gates, the explicit public-HTTPS dependency-acquisition test, and two independent optimized package builds. The resulting archives and installed homes were identical. Fresh extraction passed the installed CLI, all public examples and process contracts, native execution, framed LSP analysis, installed-home immutability, and compiler and standard-library tamper rejection.

The nocter-v0.36.0-arm64-darwin.tar.gz release is the exact retained qualified archive. It is 8,524,535 bytes with SHA-256 22c2769aa6e96513a13eae3505c671e8657bbdf142abb24035b6b86dc83c1521; publication did not rebuild it.