Changes in 3.3

Below is a summary of changes from v3.2. Commercially-licensed users may obtain the detailed change list / release notes from

Production release date



  • Many operations are now 10 times faster – performance of avg … by, avg for types G H, sum G, grouping by G H. Also distinct/find for G H.
  • +/ &/ |/ = < are 10-20x faster for GH, avg is a lot faster for GHIJ.
  • +/I will give 0Ni on overflow.
  • Faster and stricter JSON parser. It is approx 50-100x faster and can process Unicode.
  • `g attr can (again) be created in threads other than main thread. In v3.2, we removed the limit on number of concurrent vectors which can have `g attr, and a side-effect was that `g attr could be created on the main thread only. That restriction has now been removed.
  • Read-only eval of parse tree. The new keyword reval, backed by -24!, behaves similarly to eval (-6!), but evaluates the parse tree in read-only mode, as if the cmd line option -b were active for the duration of the reval call. This should prove useful for access control.
  • Improve performance of on-disk sort for un-cached splayed tables.
  • Allow processing of http://host:port/.json?query requests.
  • Columns of nested enumerated syms with key `sym now report as S in meta.
  • Splayed table count is now taken from first column in table. (Previously it was taken from the last column).
  • Distributed each will revert to local each if .z.pd is not defined.
  • Added .z.X, which provides the raw, unfiltered cmd line.
  • Added .Q.Xf to write empty nested files.
  • now handles columns that start with a numeric character.

Not upwardly compatible

  • reval is now a reserved word.
  • SSE-enabled builds (v64,l64,m64) now require SSE4.2
  • WebSocket open/close callbacks are now via .z.wo/.z.wc instead of .z.po/.z.pc.