Changes

This page lists language and Standard Library behavior changes since April 2026 and identifies the pages that state each current behavior.

Listed: a program that compiles, fails or runs differently; a name added, removed or renamed; a new option or platform. Each entry gives the day of the change, its source (the compiler or the library), and the pages that state the current behavior. Not listed: changes without visible effect (refactoring, build files, tests, comments), or repairs of generated code unless a documented rule changed. Newest first.

Covers the compiler up to 2026-07-30 and the library up to 2026-09-02.

September 2026

Date Source Change Pages
2026-09-02 Library macos/posix gains getpid. posix

August 2026

Date Source Change Pages
2026-08-24 Library linux/linux gains flock with LOCK_SH, LOCK_EX, LOCK_NB and LOCK_UN; linux/posix gains getpid, the variadic open, pause and the flags O_CREAT, O_RDWR and O_CLOEXEC. linux, posix
2026-08-18 Library linux/sync: a context parked in a read, a write or an accept wakes when the socket reports an error or a hangup (EPOLLERR, EPOLLHUP); idle registrations no longer fire repeatedly. sync, TcpAcceptor, TcpConnection
2026-08-12 Library The root module unicode is renamed unicodeTools; the name unicode now denotes only windows/unicode. unicodeTools, windows/unicode
2026-08-11 Library Json: a pair of \uXXXX escapes forming a UTF-16 surrogate pair is parsed as one code point and written back as a pair, and a lone surrogate makes parsing fail; the whole positive Int64 range parses (before, positive integers greater than 140737488355327 failed to parse). A new root module unicode supplies the UTF-16 code-unit and surrogate-pair helpers (renamed unicodeTools on 2026-08-12). Json, unicodeTools
2026-08-04 Library windows/kernel32 gains the FILETIME structure. kernel32

July 2026

Date Source Change Pages
2026-07-17 Library macos/socket gains addrinfo, getaddrinfo and freeaddrinfo. socket
2026-07-15 Library The Linux layouts that depend on the processor (epoll_event, ucontext_t) move to linux/x86_64, linux/arm64 and linux/i386; linux/linux and linux/posix reach them through the linux/architecture symlink, which tiny pull (2.2.0 or later) creates on x86_64 and arm64 and which is created by hand on i386. The symlink replaces the LINUX_AARCH64 definition; the dependent layout names such as stack_t are no longer exported by linux/posix but by the selected linux/architecture/Ucontext module, while ucontext_t remains. linux, posix
2026-07-14 Library The sync backends behave alike on Linux, macOS and Windows: in DEBUG builds TcpAcceptor.accept requires a mutable Ref to the acceptor (@acceptor.accept), and overlapping accepts on one acceptor, reads on one connection or writes on one connection fail an assertion (one read and one write may overlap); a negative sleepFor duration is invalid; sleepUntil with a time already passed waits zero seconds; Linux fiber stacks gain lower and upper guard regions, macOS stacks the upper one, and a size given by SL_FIBER_STACK_SIZE must be a positive multiple of 64 KiB on Linux and of 16 KiB on macOS. sync, TcpAcceptor, TcpConnection
2026-07-14 Library linux/sync no longer treats an immediately successful native connect as an error. On Windows, an accept in flight is finalized even after a cancellation request: a successful finalization returns the accepted connection, and if the finalization fails while the context is canceled, the incomplete connection is closed and the result is "canceled"; listeners set SO_EXCLUSIVEADDRUSE and use a backlog of 128. sync, TcpAcceptor, TcpConnection
2026-07-14 Library windows/kernel32 replaces CreateFiber with CreateFiberEx (separate commit and reserve sizes, a flags argument); linux/posix gains mmap, mprotect, MAP_ANONYMOUS, MAP_PRIVATE, MAP_STACK, PROT_NONE, PROT_READ and PROT_WRITE; windows/ws2_32 gains SO_EXCLUSIVEADDRUSE. kernel32, posix, ws2_32
2026-07-08 Library windows/sync: a read canceled before it resumes consumes no payload bytes; an immediately successful AcceptEx or ConnectEx is not itself an error (the completion checks and the setup still run); accepted and outgoing sockets are put in non-blocking mode. TcpAcceptor, TcpConnection
2026-07-07 Library macOS backend: macos/Process, macos/posix, macos/socket, macos/runningTime, macos/macos (kqueue declarations) and macos/sync (a kqueue-based scheduler with the TCP wrappers). Linux arm64: the ucontext_t and epoll_event layouts, selected with -D LINUX_AARCH64=TRUE until 2026-07-15, so the Linux sync backend builds on that processor. macos, Process, posix, socket, runningTime, sync, TcpAcceptor, TcpConnection, linux

May 2026

Date Source Change Pages
2026-05-17 Compiler fieldIsPrivate reports whether a Dict field is private; a formatted Dict schema (schemaName, printStack) marks a private field with private. fieldIsPrivate, private, printStack notation
2026-05-16 Library algorithm: tuple iteration with makeTupleIter and a known initial offset reads Ref items through ordinal access and no longer indexes past the tuple when checking for the end (an unknown initial offset over a tuple of Ref items is still incorrect, see the page). algorithm
2026-05-14 Library linux/sync fiber stacks are 64 KiB by default and SL_FIBER_STACK_SIZE selects another size (macOS from 2026-07-07, Windows from 2026-07-14). sync
2026-05-13 Compiler LLVM debug metadata is no longer emitted by default: the option -debug enables it without changing DEBUG; -ndebug disables both; giving both options is an error. Compiler, DEBUG, Diagnostics
2026-05-12 Compiler * folds a known left zero factor even when the other operand is unknown; for Whole schemas, MIN x > folds to FALSE when MIN is the known minimum of the schema, and x 1 mod folds to zero (>, mod). *, >, mod
2026-05-09 Compiler A call of a variadic Code carries its fixed parameter types followed by ... in the LLVM output, so an indirect call of a variadic foreign function passes its extra arguments correctly (before, the call treated every argument as a fixed parameter). codeRef, importFunction

April 2026

Date Source Change Pages
2026-04-30 Compiler The options -callDepthLimit (default 1024, before 256) and -staticLoopLengthLimit (default 256, before 128) set the compile-time limits; the older spellings -recursion_depth_limit and -static_loop_length_limit take effect too (their arguments were ignored before). Compiler, Diagnostics
2026-04-27 Compiler / and mod with a known dividend that is the minimum of a signed Whole schema and a known divisor -1 are invalid (previously this caused a crash during compilation). The LLVM output includes the code generated while module-level destructors run (before, that code could be missing). /, mod, Diagnostics, Compiler
2026-04-24 Compiler private marks the next field of a Dict as private: source-text member selection from outside the Dict (.NAME, .@NAME, .!NAME) is invalid, while ordinal access, schema queries and callField still reach the field; privacy is part of the Dict schema, so two schemas that differ only in the privacy of a field are not same. dynamic makes a Text unknown (before, the Text stayed known). INIT and DIE must leave the data stack as they found it; a change of its size is an error. schemaName rejects a static Text SCHEMA_NAME field whose value is NIL; a Text option of a Code signature must be non-NIL. PRE captures a non-Meta managed stack item through a Ref rather than an owning copy, so the item is not destroyed a second time. private, dynamic, manuallyInitVariable, manuallyDestroyVariable, schemaName, codeRef, Nodes, Diagnostics
2026-04-19 Compiler The parser stops at the first error with a specific message (invalid UTF-8, an unbalanced or unexpected delimiter, an invalid escape, name or number, or whitespace where none is allowed); the Grammar and Diagnostics pages document these parser forms. Grammar, Formatting, Diagnostics: Parse errors
2026-04-18 Compiler exportFunction and importFunction are valid only at module level (Can only be called at the module level). A Code Block must consume every declared input (Block does not consume all input values). A PRE predicate must yield a known Cond (Predicate did not return a known Cond). use works inside a module-level destructor. exportFunction, importFunction, use, Nodes, Diagnostics
2026-04-17 Compiler A static field mentioned inside a Code body stays a compile-time value instead of being captured as a run-time local. A local moved into an output, an array or a Struct is not destroyed again. A mention that reaches a destroyed local is an error (Local variable has gone out of scope). Nodes, Concepts, Diagnostics
2026-04-14 Compiler The fields of a Struct are destroyed in reverse declaration order. A managed stack item captured by a Block remains owned by its original scope; the captured view is not destroyed separately. Nodes, Concepts
2026-04-13 Compiler attribute attaches a known Text specifier to the next known Text constant in the LLVM output; a duplicate or an unused specifier is an error. attribute, Diagnostics
2026-04-11 Compiler A known NIL Text is invalid as an operand of &, as the callable of call or ucall, as the name given to callField, def, exportFunction, importFunction or importVariable, as the module descriptor of use, as the specifier of attribute and as the message of printCompilerMessage or raiseStaticError. Diagnostics, &, call, use