Repository navigation
✨ Features
- indexed times, (times [i n] body...) (#827)
- add generation-2 compressed columns
- add q-style F32 literals (#911)
- add nanosecond timespan values (#917)
🐛 Bug fixes
- drop a late _POSIX_C_SOURCE define in test_link.c (#774)
- validate CLI integers and cap worker count (#793)
- reject arguments to snapshot and sync (#795)
- finalize owned programs and guard serialization (#797)
- reject arguments to read-only introspection calls (#798)
- run tasks past the ring in further rounds of the same grain (#805)
- unsigned key spans, numeric F64 composite order, F32 key test (#806)
- parted STR/LIST group merge; composite keys at full symbol width (#807)
- parted avg/var over nulls, binary-agg second operand, keyless emit, merge by position (#815)
- print an uncaught raise's value, rendered lazily and bounded (#811)
- implement multi-branch if in both evaluators (#812)
- abort cancelled batch interns before commit (#825)
- sort, take, format and serialize parted tables in place (#826)
- free the superseded generation at reopen instead of retiring it (#832)
- at keeps a typed vector's type for any integer index (#829)
- comparisons and and/or/not work element-wise on a LIST (#830)
- dyadic min/max give the operands' promoted type; LIST results typed (#831)
- release distinct error values on failure (#834)
- skip memory flag value in .sys.args (#835)
- preserve signed zero in constant pool (#836)
- reverse tables and dictionaries (#837)
- parted where/take/group fixes; column-free aggregate sources (#833)
- amend a dotted target in place when its dict chain is sole-owned (#839)
- sort nullable min groups after aggregation (#843)
- avoid raw-sum ranking for affine top-N (#844)
- map, fold and scan box a typed vector one element at a time (#840)
- reject local targets before global writes (#846)
- select clang by default and test clang 23 in CI (#845)
- a cancelled splayed write publishes nothing (#860)
- affine sum bias counts the non-null rows (#861)
- LIST cells keep inner nulls and GUIDs, table/dict cells compare by value (#863)
- eval-level grouping over parted tables, by-dict aliases and LIST keys (#862)
- print a null symbol as ', not null (#872)
- take rows from a parted table handle (#867)
- materialize a lazy result inside the timed span (#868)
- free nested containers without recursing per level (#874)
- rebuild the build-info objects when the version or date changes (#875)
- keep a DATE or TIME atom within 32 bits, as its vector cells are (#879)
- read a time literal's fraction as a decimal fraction of a second (#885)
- never follow a link when removing what the store cleans up (#878)
- apply a parsed float's sign through its bits, not FP negation (#887)
- decline unary numeric DAG ops on types their builtins reject (#891)
- break top-N ties on first source row (#892)
- strlen sum/avg skip the empty string on every route (#888)
- sorted, taken and parted routes honour a lambda local that hides a column (#889)
- free the count-distinct where-sample chunk list once (#899)
- parse F32 and GUID nulls and align F32 casting and printing (#901)
- finalize parallel null flags only after workers join (#903)
- preserve WHERE predicate row domains (#908)
- return ordinary BOOL and U8 values for null inputs (#913)
- decline temporal div and mod in the select DAG (#906)
- isolate whole-row reader input domains (#916)
- decline mixed symbol equality operands (#928)
- a null atom gives a typed null (#931)
- a zero divisor gives a null in fused arithmetic (#932)
- keep the F64 type of a whole-number float bias in sum and avg (#941)
- use 32-bit TIME in sortedness shortcut (#939)
- reject non-atom results in flat STR casts (#927)
- handle delimiters longer than split input (#953)
- restrict float promotion to I64/F64 atoms (#965)
- return B8 for symbol prior comparisons (#967)
- promote both integer atom subtraction operands (#979)
- distinguish dyadic minmax from reductions (#980)
- compute TIMESPAN medians through rank kernels (#982)
⚡ Performance
- reuse already ordered select input (#847)
- use asof index for null-free symbol keys (#848)
- answer a dotted name's flat global lookup from a slot filter (#870)
- build adjacency lists by counting sort instead of sorting all edges (#886)
- count and scatter edges on the pool when building a CSR (#895)
- keep integer rounding in the select DAG (#896)
- batch staged SYM strlen accumulation (#910)
- take split WHERE rows without a full gather (#907)
- avoid double rounding bulk growth payloads (#925)
- keep sizing off reserved-capacity single appends (#938)
- rank symbols before parallel sortedness checks (#937)
- avoid repeated parted metadata walks (#936)
- retain left columns for identity output mappings (#943)
- skip speculative hashing for minimum chained tables (#942)
- size the default pool from the CPUs the process may run on (#944)
- index global binding writes by symbol (#955)
- memory bounds on small machines, wide dense grouping, compressed-column range reads, trusted own files, per-column symbol files (#964)
📚 Documentation
- document embedding as a static library (#783)
- name resolution in queries; take cycles (#817)
- document every .sys.mem key (#890)
- explain filter domain barriers and static ranking (#909)
- describe sequential callbacks and kernel parallelism (#949)
🔧 Maintenance & internal
- test(app): cover CLI argument errors (#799)
- build: scope section GC flags to static library (#804)
- test(heap): measure discarded spill pages against the dirty ones (#857)
- test: pool read-ahead and pty master-close tests hold on older kernels (#873)
- test(heap): check the spill discard where a punch cancels no writes (#894)
- test(mem): replace caller-heap fallback peak proxy with scoped oracles (#915)
- test(opt): exercise subset invariance on copied row subsets (#914)
Full changelog: v2.11.5...v3.0.1