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

  • x E. y and allied compounds on boolean and literal arguments rewritten, much faster (x I.@E. y about 40x faster) (AVX2 only)

beta-a (the current 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.
  • 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

Changes to the base system

Changes to the Qt IDE