System/ReleaseNotes/J806
From J Wiki
< System
J806 release of xx xxx 2017
Contents
Changes to the base system
The Windows J engine is updated to J8.06
New features:
- u@n (where n is a noun) is now allowed, and executes u on the value of n, ignoring any arguments (equivalent to u@(n"_))
- u :: n (where n is a noun) is now allowed, and gives the result n if u fails (equivalent to u :: (n"_))
Performance improvements (timings taken on 64-bit Windows):
- (x -: y) coded to be a bit faster for boxed arrays
- (x -:!.0 y) coded significantly faster on floating/complex arrays by avoiding code to replace -0 with +0
- (x +/ . * y) coded using block tiling with BLAS micro kernels which take advantage of SIMD instructions (if supported by the user's CPU).
- (x +/ . * y) executes on multi-cores (if OpenMP is available) to perform parallel calculations.
- The i.-family has been recoded to use improved algorithms and AVX/NEON instructions
- During x {:: y, any selection in which x is a numeric atom and y is a list of boxes is handled by special code
- Arrays with a large number of boxes are greatly improved. Assigning such an array to a name no longer requires visiting every leaf.
- x m} y and x , y operate in-place if possible when x and y are boxed (they have long been in-place for non-boxed types)
- The no-change cases 0 }. y, 1 # y, and 0 |. y execute instantly
- Nested dyadic ranks, for example x u"0 0"1 _ y or x u"0/ y, are handled with a single looping structure rather than a nested one that required copying the data twice
- Monadic and dyadic ranks run a bit faster after a rewrite primarily intended as a bug fix
- u"n, when u returns a boxed result, is a bit faster by saving one copying of the boxing