System/ReleaseNotes/J902

From J Wiki
Jump to: navigation, search

J902 beta development started in Dec 2019, and 902-beta-a was released 14 May 2020.

Changes to the J engine

  • Windows releases built with Visual Studio 2019 clang compiler. Previous releases were built with VS2013 and MS compiler.

Summary of Changes to the J Language in the release

  • Incompatible language change - Fold family: to make the execution match the right-to-left orientation of J, in the Fold primitives (u F.: v etc) v is executed first, then u.
  • Incompatible language change - m@.v: m@.v is now defined to have infinite rank. Its implementation is like the other partitioning modifiers:
    • v is applied at infinite rank
    • the rank of the result of v indicates the rank at which verbs in m are applied
    • cells being submitted to the same verb may be collected into a list of such cells and submitted to the verb in one execution
  • Language extension - semiduals: x u&.:(a:`v) y is equivalent to v^:_1 x u v y . That is, it is like x u&.:v y except that v is applied only to y . Similarly, x u&.:(v`a:) y is equivalent to v^:_1 (v x) u y . Forms with &. are also supported, with the verb having ranks taken from the verb that is applied to the argument.

Unreleased work in progress

  • Incompatible language change - support for legacy modifiers dropped: previously, adverbs and conjunctions that did not refer to the names u, v, m, or n were given special treatment: x and y were assigned with the values of u and v. This was to support an early version the language. This special treatment is withdrawn. During the beta, modifiers that would have been given the special treatment will fail with nonce error; after the release, they will be allowed again.

beta-d (the current release)

  • special code for x +//. y, x <.//. y, x >.//. y, and x (+/%#)/. y, except for + when y is integer
  • special code for x </. y
  • special code for x (</. i.@#) y rewritten, faster
  • base64 optimization using ssse3,avx2,neon and OpenMP

beta-c

  • x u/. y code to find cells rewritten, faster
  • x #/. y, x ({.,#)/. y, and x (#,{.)/. y rewritten, faster
  • </\ y, <:/\ y, >/\ y, >:/\ y, +:/\ y, and *:/\ y faster when cell-rank > 1
  • avx/avx2 emulation to enable running codes written for AVX and AVX2
    • 64-bit x86_64 avx and non-avx cpu using sse2/sse3 instructions
    • arm64 cpu using neon asimd instructions
  • SLEEF function library extended to 32-bit x86, 64-bit x86_64 and arm64. Only 32-bit Raspberry and armv7 Android platforms do not support SLEEF.

beta-b

  • x E. y and allied compounds on boolean and literal arguments rewritten, much faster (x I.@E. y about 40x faster) (AVX2 only)
  • 3!:1 (create binary representation) recoded to use less space
  • 3!:3 (create hex representation) recoded to use less space
  • SLEEF function library used for elementary math functions, 2-3x faster (AVX and AVX2 only)
  • x #/. y rewritten, 2x faster
  • x (#,{.)/. y and x ({.,#)/. y rewritten, 3x faster
  • x ^@:p. y special code for boolean, integer, and floating-point types (AVX and AVX2 only)
  • i.-family improved when searching integer lists (AVX2 only)
  • x -: y recoded (AVX2 only), 4-10x faster for integers, 8-15x faster for floats

beta-a

  • Incompatible language change - Fold family: to make the execution match the right-to-left orientation of J, in the Fold primitives (u F.: v etc) v is executed first, then u.
  • Language extension - semiduals: x u&.:(a:`v) y is equivalent to v^:_1 x u v y . That is, it is like x u&.:v y except that v is applied only to y . Similarly, x u&.:(v`a:) y is equivalent to v^:_1 (v x) u y . Forms with &. are also supported, with the verb having ranks taken from the verb that is applied to the argument.
  • Incompatible language change - m@.v: m@.v is now defined to have infinite rank. Its implementation is like the other partitioning modifiers:
    • v is applied at infinite rank
    • the rank of the result of v indicates the rank at which verbs in m are applied
    • cells being submitted to the same verb may be collected into a list of such cells and submitted to the verb in one execution
  • u^:n now gives domain error if n is empty. Same for u^:v when v produces empty.
  • Improvement to x = y and x ~: y on character data (AVX2 only)
  • 256-bit instructions used for floating-point x * y and x % y (AVX2 only)
  • 256-bit instructions used for integer x + y and x - y (AVX2 only)
  • 256-bit instructions used for integer x <. y and x >. y (AVX2 only)
  • [x] u^:v y recoded to guarantee no reexecution of u
  • word formation (;: y) rewritten for speed

Changes to the base system

Changes to the Qt IDE