CUE v0.18.0-rc.3 Released With Closedness Fixes And Performance Gains
The latest CUE release fixes evaluator regressions, adjusts closedness behavior, and improves performance for configurations with nested disjunctions.
CUE v0.18.0-rc.3 dropped on October 30, fixing evaluator regressions and adjusting closedness behavior to match the spec.
One breaking change alters how an ellipsis inside an embedding behaves. Previously, an ellipsis in s: {{#B, ...}, h: {i: 1}} opened h. Now it only opens the struct containing it, meaning a field added to h like s: h: extra: 1 triggers a "field not allowed" error. You can fix this by adding its own ellipsis, as in h: {i: 1, ...}, or by declaring the field directly.
The close builtin now returns any non-struct or non-list value unchanged instead of failing on scalars. Disjunctions passed to close retain scalar disjuncts while closing each struct disjunct. Closedness fixes also apply to fields opened with the spread operator, which close again when unified with #B (#4525), and fields added by spreads within definitions when selected through a regular field holding that definition (#4528). Top-level comprehensions in structs passed to close now correctly see fields unified from outside, though issue #4535 notes this might break configurations after cue mod upgrade.
Configurations with many nested disjunctions evaluate up to 9% faster and allocate up to 16% less memory.
