Every entry here is a decision, not an oversight: a boundary the compiler enforces loudly today, together with the spelling that works now and the release line on which the boundary moves. When a limitation is lifted, its entry leaves this page in the same release.

Language

A stream element is a plain value

A stream carries any scalar or plain record — stream of Quote walks a record through a pull chain whole. Two boundaries remain, both loud. An element whose payload reaches the heap (a string, a dynamic array, a pointer anywhere in its layout) is refused with analyzer error 5375: an element crosses the suspension as one complete store of its declared size, and a heap payload’s ownership across that store is the open question. And a record element on a task-fed ring is refused with error 5455 — the ring carries one word per value in this delivery. Emit heap-carrying data through parallel plain streams, or assemble it on the consumer’s side. Both boundaries are on the 7.x line.

A generic function does not admit a nested subprogram

A function or procedure declared inside a generic function is refused with analyzer error 5424. A specialization clones the generic’s body once per type argument, and a nested subprogram would demand a second specialization authored inside the first. Declare the helper beside the generic function and pass what it needs.

Sort is unstable

Sort is heapsort: equal elements do not keep their relative order. When a report must group by one key and preserve an earlier order inside the group, sort by a compound key instead. A stable variant is on the release-8 line.

Unicode case mapping is one-to-one

Upper and Lower map each code point to exactly one code point: ß stays ß rather than becoming SS, and the Greek final sigma is not selected by position. The one-to-many and positional rules are on the release-8 line.

Build and run

Debug builds walk s[i] loops quadratically under utf-8

Under the utf-8 encoding, a hand-written while loop that indexes s[i] re-measures the string’s prefix on every access in a debug build — O(N²) for the whole walk. The taught idiom is free of this on every tier:

for c in s do

Release builds optimize the indexed walk; the debug behaviour is the cost of keeping that tier’s code shaped exactly like the source.

A deadline does not cancel a typed file transfer

ScopeDeadline cancels network operations and POSIX-road file calls, but a typed file transfer (read/write on a file of T) runs to completion once started; the compiler warns at every such site inside a deadline-armed scope. Keep bulk typed transfers outside deadline-armed scopes, or use the POSIX road where cancellation matters.

Tooling and platforms

The language server synchronizes whole documents

The LSP resynchronizes the full document on change rather than applying deltas, and diagnostics recompute on save rather than while typing. On the file sizes Mica units take in practice, neither is observable; both are on the release-7 adoption line.

On Darwin/ARM64 the compiler cross-compiles both Linux targets, but linking is not available — the binutils integration is bound to Linux hosts. Linux containers on macOS build and run everything, and the container image is the supported macOS road today. macOS as a full host is the headline of release 8.

JSON and process spawning have no library surface yet

Both are named non-goals of the 6.x line, planned as release-7 citizens: a JSON library with its own design pass, and a curated Run("cmd") surface over the raw fork/exec contracts that exist today.