Channel stable
-
changed:
stable head
2.0.0→2.0.2
stable: Artifacts
-
changed:
Artifact crate size
2377858 bytes→2394884 bytes
Releases
- added: Release 2.0.2stable, available, dated 2026-10-12 by its publisher
- added: Release 2.0.1stable, available, dated 2026-10-12 by its publisher
Publisher's notes for 2.0.2 stable
A natively lowered `@dream/intern` lookup no longer reads a slot table the pool has freed, and the `@dream/data` definitions say what a span's `kind` is.
Fixed
- Interning a key a pool already held, through the binder, while the pool sat at its load limit (12, 24, 48 ... identities) grew the slot table before looking the key up, and did not tell native code the table had moved, because the pool's length had not changed. Until the next new key, a lowered
pool:findorpool:internon an annotateddream_intern_Poolread the freed table: wrong tokens,nilfor a key the pool held. A pool now looks a key up first and grows only to add one, so a key it holds moves nothing. Unannotated pools were never affected. - The
@dream/datadefinitions gavegather,scatterandaddakind: dream_data_Kindparameter, the union of receiver classes, where the runtime takes the layout string every other span takes; and they typed a span'skindas the eight bare kinds, so the documented strided form ("f32@16+12") was a type error under--!strict. A span'skindis now adream_data_Layout,dream_data_ElementKind | string, in every signature, and the strict-script gate that checks the definitions against the runtime covers@dream/data, which it had left out. data.fill's description said the value converts asbuffer.write<kind>converts. It is written as every data-plane write is: a number, truncated toward zero and wrapped to the width, saturating first beyond 2^63. The description says so now; the behaviour is unchanged.
Migration
Nothing to change. A pool annotated dream_intern_Pool that also receives keys through unannotated code was the exposed case, and is correct after an upgrade. A strict script that cast a strided layout to pass it to @dream/data can drop the cast.
Written by the publisher and shown verbatim, rendered through a sanitizer.
Publisher's notes for 2.0.1 stable
A sink or slice statement may open a function body, and the `@dream/luau` definitions declare the record pattern nodes the tree has carried since 2.0.0.
Fixed
- A statement that begins with a sink or a slice (
into(out)[for x in xs => x],grid[2:3][1][1] = 5) failed to compile as the first statement of a function body, withExpected identifier when parsing expression, got ';': the lowering separated it from a statement that was not there. A body's first statement now gets no separator, whatever the header ends with, and where a return type ends is decided by Luau's parser, not estimated. - The
@dream/luaudefinitions did not declareStatLocalPattern,PatternRecord,PatternFieldorPatternIdentifier, and typedExprFunction.argsandComprehensionGenerator.bindingsas lists ofdream_luau_Localalthough a record pattern can stand in either. They are declared now,dream_luau_StatLocalPatternis a member ofdream_luau_Stat, and a slot that may hold a pattern is adream_luau_Binding,dream_luau_Local | dream_luau_PatternRecord.
Migration
A strict script that reads name off an element of ExprFunction.args or of a generator's bindings refines it by kind first, "Local" or "PatternRecord". Nothing changes at run time.
Written by the publisher and shown verbatim, rendered through a sanitizer.