# Release Notes J9.5

>> << 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**: new actions added.`x ;: y`expanded**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`and*numeric-array*)}`(<"1`are still supported (see below)*numeric-array*)}**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`and*numeric-array*)}`(<"1`are still supported (see below)*numeric-array*)}

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`should be replaced with*numeric-array*)} y`x (<<`*numeric-array*)} y`x (<"1`should be replaced with*numeric-array*)} y`x (<`(or*numeric-array*)} y`x`if you know that*numeric-array*} yhas rank > 1)*numeric-array*

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**: new actions added. This code was contributed by Danil Osipchuk.`x ;: y`expanded`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