# Highlights in 3.3

Below is a summary of changes from V3.3.

## Production release date

2015.06.01


## New

-   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.
-   `.Q.id` 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`.
