Repository navigation
v2.11.0
✨ Features
- add a
whilespecial form - add
timesandfold-while - WSAPoll event loop for Windows
- optional deadline on .ipc.send; close the connection on expiry (#589) (#658)
- add native Parquet queries and native imports (#657)
- publish splayed replacements atomically (#649)
- export the build's commit as ray_git_commit() (#666)
🐛 Bug fixes
- bound the tied groups the radix top-N selection keeps
- validate launcher and timeit integer arguments
- reject a flag as another flag's value, and unknown options
- release the input table of window, sort and limit unconditionally
- the reduction case owns its input too
- Winsock errno mapping, exclusive bind and IPC on Windows
- Windows platform layer (file mapping, pools, crash report, paths)
- REPL, profiler and system builtins build and work on Windows
- readable REPL prompt and CPU name in the banner on Windows
- render i64 at full width, not through 32-bit long
- format the banner with snprintf instead of macro string splicing
- hand workers their freed blocks back at the end of every dispatch (#621)
- reject trailing payload bytes (#622)
- a projection sees the projections before it (#620)
- report arity errors for extra arguments (#616)
- admit the typed kernel for text columns, which it never reached (#607)
- mapped index regions — bounds-checked children, never released on drop
- zone min/max tell all-null from the non-null counts; empty tables keep the planner
- reject arguments to gc (#615)
- a STR view keeps only the bytes it points at (#631)
- reject arguments to purge (#638)
- reject invalid persisted graph ids (#642)
- reject arguments to roll (#639)
- hash int cells through f64 when a set meets a float probe (#646)
- admit the typed kernel unless both sides carry a null (#644)
- integer mean divides the exact 128-bit sum; mapped index tail unmapped after drop (#648)
- reject arguments to close (#637)
- never do work or error handling inside assert(); test the suite with NDEBUG (#653)
- ray_execute and index attach never return NULL (#655)
- detect half-open outbound connections with TCP keepalive (#589) (#656)
- reject graph handles (#651)
- write private staging leaves without the live-table writer (#667)
- unlink a direct block's spill file once it is mapped (#665)
- vector conditions, mixed branch types and one-element scalars (#668)
- print every column and row of a table (#659)
- keep a temporal column's type through a compiled xbar (#669) (#670)
- literals and scalars read as columns, scalar where:, and update where: new columns (#676)
- keep SYM columns typed through the eval fallback; eval fallback for update new columns and update by: (#690)
- int-vs-float compare, compiled not/if kernels, fallback aggregates, cgroup RAM budget (#695)
- temporal if null, scalar selects under where:/take:, non-BOOL where: predicates (#696)
- mixed temporal compares, narrow-lane casts, fallback not/cast, count literals (#697)
- journal single writer, failed first write cleanup, parted partition column, renameat2, narrow nil? (#699)
- a failed first write cleans a table directory that was there before it (#702)
- ray_journal_open releases the lock when open_append rejects the base (#701)
- preserve layer topology during build and load (#680)
- a select of aggregates and scalars over them is one row (#706)
- group by a computed key beside distinct aggregates and row expressions (#708)
⚡ Performance
- skip per-cell key null tests on provably null-free columns
- wake only the workers a dispatch can keep busy
- one column kernel for the direct builtin and the executor, one row pass (#623)
- shared-node memo, STR descriptor views, fused top-k on nullable like, bulk derived key, parallel dense grouping (#626)
- whole-table count/min/max/sum/avg from chunk-zone metadata
- avoid rewriting copied text nulls during concat (#641)
- 32 registers per fused expression; nulls produced mid-program, narrow scratch (#636)
- filtered positional take stops early; sort by an unprojected column (#634)
- partitioned dense accumulate; derived-key grouping over the column's distinct values (#633)
- parallel splayed load, batched symfile interning, parallel hash index build (#632)
- fused top-k prunes chunks by zone extrema and visits the best chunks first (#643)
- unordered take aggregates only the groups it returns (#661)
- exact-offset radix grouping, per-value programs for derived string keys, parallel STR if (#682)
- review follow-ups to #682 (radix chunks on every worker, no second branch evaluation in STR if) (#683)
- build splayed column indexes while streaming, no second pass (#704)
- per-worker ticket ranges with stealing, private domains for derived keys, table-stack grouping (#705)
- per-group slices from the selection, histograms sized by the workers (#709)
📚 Documentation
- Windows build instructions and platform status
- merge master back into dev after each release
🔧 Maintenance & internal
- test(lang): pin the refcount of a table across window, sort and limit queries
- build: Windows (MSYS2 CLANG64/MINGW64) toolchain in the Makefile
- test: run the suite on Windows
- bench: build the micro-benchmarks on Windows, record a Windows/Linux check
- bench: record the recent perf benches on Windows vs Linux
- test(regress): drop the 24 GB til from the i64 width probe
- v2.9.1 (#625) (#629)
- test(store): portable in-place sed in splayed_zone_aggs
- test(agg): pin the LLC in dense_cache_bound so the route is runner-independent (#647)
- ci(cppcheck): analyse one pinned configuration instead of up to twelve (#654)
- test: isolate load_home from inherited RAYFORCE_HOME (#671)
Full changelog: v2.10.0...v2.11.0