Release Notes J9.5

From J Wiki
Jump to navigation Jump to search

>> << Pri JfC LJ Phr Dic Voc !: Rel NuVoc wd Help 


Work on J9.5 started in March 2023. J9.5.0-beta1 was released 20230423.

Changes to the J engine

Summary of Changes to the J Language in the release

  • new primitive: u m. n performs the operation u(mod n), i. e. using modular arithmetic. n and any arguments to the derived verb must be tolerantly integral or extended integer; results will be integer or extended integer; u must be one of + - * % ^ %. (-/ . *). The derived verb has only dyadic valence except for (% m. n) and (%. m. n) which are bivalent.
  • domain of x ;: y expanded: new actions added.
  • New foreign: ([x] 15!:18 y) creates a block with value y but with the data area aligned to a cacheline boundary
  • Language extension: (x { y) where x is a boxed numeric array now allows >x to have any rank. Each 1-cell of >x is the index list of a cell of y
  • Incompatible language restriction: In (x m} y), m must be an atom.
    For compatibility with previous versions of J, the deprecated forms (<"0 numeric-array)} and (<"1 numeric-array)} are still supported (see below)
  • Incompatible language change: the inverse of m&{ is removed. If you need this inverse, use the inverse of m&C. instead.
  • Language extension: u&.v y now accepts certain noninvertible v that can be assigned a notional inverse for a given y. Details here; notable is u&.(m&{) y which modifies m{y, in place if possible.


unreleased work in progress

  • none yet

J9.5.0-beta9 (the current beta)

  • Language extension: u&.v y now accepts certain noninvertible v that can be assigned a notional inverse for a given y. Details here; notable is u&.(m&{) y which modifies m{y, in place if possible.

J9.5.0-beta8

  • complex division rewritten, faster and not giving NaN error when dividing by _j_
  • complex arithmetic (+ - * %) supported by AVX2 instructions
  • Incompatible language change: the inverse of m&{ is removed. If you need this inverse, use the inverse of m&C. instead. This change is in anticipation of defining u&.(m&{) y to modify specified cells of y.

J9.5.0-beta7

  • fix bug introduced in beta-4

J9.5.0-beta6

  • (<<<x) { y rewritten again, faster and less memory
  • x m} y fast paths added when m selects a single cell and y is a direct type

J9.5.0-beta5

  • New foreign: ([x] 15!:18 y) creates a block with value y but with the data area aligned to a cacheline boundary
  • Language extension: (x { y) where x is a boxed numeric array now allows >x to have any rank. Each 1-cell of >x is the index list of a cell of y
  • Incompatible language restriction: In (x m} y), m must be an atom.
    For compatibility with previous versions of J, the deprecated forms (<"0 numeric-array)} and (<"1 numeric-array)} are still supported (see below)

Discussion: (x m} y) where m contained multiple boxes was slow, sometimes very slow. Moreover the boxes in m were required to select regions of the same shape, making the apparent generality of boxed m illusory. Restricting boxed m makes all the forms faster. The supported multibox forms are deprecated and may be removed in a future version. You can update your code to use an atomic box as follows:

  • x (<"0 numeric-array)} y should be replaced with x (<<numeric-array)} y
  • x (<"1 numeric-array)} y should be replaced with x (<numeric-array)} y (or x numeric-array} y if you know that numeric-array has rank > 1)

If you have other multibox forms and need help rewriting them, send a message to the beta forum. To see a warning when a deprecated form is executed, use 9!:55.
J9.5.0-beta4

  • x { y recoded. Multidimensional indexing is faster, much faster for rank>2; virtual blocks are used more often; x overwritten in place where possible; complementary indexes faster and less space
  • x m} y now supports doubly-boxed selectors with an efficient path
  • q: y recoded for 64-bit, faster

J9.5.0-beta3

  • #@> y supported by special code
  • improvements to inverses containing constant functions

J9.5.0-beta2

  • x m} y now has Integrated Rank Support. x m}"n y, formerly deprecated, is now recommended.
  • domain of x ;: y expanded: new actions added. This code was contributed by Danil Osipchuk.
  • 0 % m. n 0 is 0
  • -/ . * m. n calculates modular determinant. This code was contributed by Cliff Reiter.
  • complementary indexing (triple-boxed selectors) faster

J9.5.0-beta1

  • 0!:n (used by the load and script verbs) discards the first line of a file if the first two characters in the line are #!
  • x integer_atom&|@^ y recoded, about 2x faster
  • special code for (x -@{`[`]} y (also with @:), which changes the sign of the addressed cells of y, when y is floating-point. Supports inplacing.
  • new primitive: u m. n performs the operation u(mod n), i. e. using modular arithmetic. n and any arguments to the derived verb must be tolerantly integral or extended integer; results will be integer or extended integer; u must be one of + - * % ^ %.. The derived verb has only dyadic valence except for (% m. n) and (%. m. n) which are bivalent.

    The code for %. m. n was contributed by Cliff Reiter.

Changes to the base system

Changes to the Qt IDE

  • Jqt on Windows and macOS now uses Qt 6.5.3

>> << Pri JfC LJ Phr Dic Voc !: Rel NuVoc wd Help S