# 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*)}

** unreleased work in progress **

- none yet

** J9.5.0-beta7 (the current beta) **

- 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

- since beta5, Jqt on windows now uses Qt 6.5.2