Programming Language

Nocter

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

/releases/v0.38.0.md

Nocter v0.38.0 Release Notes

Nocter v0.38.0 adds f32 and f64 as complete IEEE 754 language values and connects them to native execution, numeric text, formatting, interpolation, JSON, and editor tooling. The only implemented host and native target remains arm64-darwin.

Complete Floating-Point Values

Decimal literals support contextual f32 or f64 typing, explicit suffixes, exponent notation, and representable subnormals. Arithmetic, remainder, comparison, calls, returns, spills, aggregates, vectors, and compile-time constants preserve the selected width through native ARM64 execution. Integer-to-float and f32-to-f64 conversions are available only when lossless; rounding and narrowing use named checked operations.

Compile-time decimal conversion and constant arithmetic use a target-owned software IEEE evaluator rather than the compiler host's floating-point parser. The resulting exact bits pass through checked semantics and lowering unchanged. Machine owns stored layout and the independent general and floating argument, return, and spill classes.

Numeric Text and Representation APIs

std/num now provides exact bit conversion, classification, sign inspection, absolute value, directed rounding, ties-to-even rounding, checked conversion, and deterministic total comparison for floating values. Canonical infinity and NaN constants are available under the num module.

f32.parse and f64.parse accept one complete locale-independent decimal or canonical non-finite spelling and round the exact value once. try_parse reports temporary-allocation failure without changing invalid text or range loss from optional absence. For finite values, to_string and try_to_string emit the shortest decimal spelling that round-trips to the same width and exact IEEE representation, including the sign of zero. Interpolation and std/fmt.Format use the same generator; NaN formatting is canonical and does not serialize its payload.

Partial and Total Ordering

Ordinary floating equality and ordering follow IEEE comparison: both zero signs compare equal and every ordering comparison involving NaN is false. The named total_compare method is available when a deterministic representation order is required.

The new std/order.TotalOrder contract makes a generic API's stronger algebraic requirement explicit. Integer, character, and text types implement it; floating types deliberately do not. slice.sort now requires T impl TotalOrder, so a user-defined sortable type must explicitly promise that its == and < operations form a total order.

JSON and Tooling Integration

std/json.Number can be constructed from every finite f32 or f64 value and can project its retained exact token back to either width. Non-finite input and numeric range loss remain optional absence, while recoverable constructors report allocation failure separately. JSON keeps its exact decimal token as the representation authority rather than replacing it with an approximate float.

Hover, completion, signature help, definition, references, rename, semantic tokens, and inlay hints all obtain floating-point meaning from the ordinary checked program. Formatting preserves the authored literal spelling. The runnable floating-point.nct example crosses parsing, arithmetic, interpolation, JSON conversion, generation, native compilation, and execution.

Compatibility and Non-goals

v0.38.0 does not add implicit numeric promotion, decimal or arbitrary-precision public numeric types, C ABI floating interoperability, locale-dependent formatting, configurable rounding modes, transcendental functions, or another native target. Existing source that relied only on structural < for slice.sort must adopt the explicit TotalOrder contract.

Candidate Qualification

Release-content commit ae442a6ff01be5d35b73d69729e3fb25e30ddd6e 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.38.0-arm64-darwin.tar.gz release is the exact retained qualified archive. It is 8,580,014 bytes with SHA-256 52efedb66b9bf79bc7768de0a8050fbc0d9c0b9cd3ebe364f1bac79c8e05b9a3; publication did not rebuild it.