From J Wiki
Jump to navigation Jump to search

J806 release 12 November 2017

Changes to the base system

The JE 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"_))
  • [x] 128!:6 y - see latest Dictionary for documentation on support for Secure Hash Algorithms
  • u d. _1 now knows how to integrate more cases of m&^ and ^&n, with some bugs fixed (contribution from Jon Hough)

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

Changes to the Qt IDE

The Qt IDE version is 1.6.2, and is built with Qt 5.6 on Windows and OSX, and with Qt 5.3 on Linux.


  • add svgview control using QSvgRenderer, see Help|Studio|Qt Demos|svg
  • add browser control using QTextBrowser, see Help|Studio|Qt Demos|browser
  • add websocket and opengl support to the slim build
  • user QTextEdit control for Term. This replaces QPlainTextEdit, and enables html output to Term, e.g.

   A=: '<html><span style="color:red;font-style:italic">hello there</span></html>'
   wd 'sm html *',A
hello there