J: Difference between revisions

Jump to navigation Jump to search
3,707 bytes added ,  17 February
m
Fix infobox 9.5 release date (must have been a beta version)
m (ASCII category)
m (Fix infobox 9.5 release date (must have been a beta version))
(11 intermediate revisions by 3 users not shown)
Line 9: Line 9:
| released              = 1990
| released              = 1990
| developer              = [[Jsoftware]] ([[Ken Iverson]], [[Roger Hui]])
| developer              = [[Jsoftware]] ([[Ken Iverson]], [[Roger Hui]])
| latest release version = J902-b / 2021-02-18
| latest release version = J9.5 / 2023-12-20
| influenced by          = [[SAX]], [[Rationalized APL]]
| influenced by          = [[SAX]], [[Rationalized APL]]
| influenced            = [[Dyalog APL]], [[NARS2000]], [[I]], [[BQN]]
| influenced            = [[Dyalog APL]], [[NARS2000]], [[I]], [[BQN]]
Line 21: Line 21:
| download              = [https://code.jsoftware.com/wiki/System/Installation System/Installation]
| download              = [https://code.jsoftware.com/wiki/System/Installation System/Installation]
| documentation          = [https://www.jsoftware.com/help/dictionary/contents.htm Dictionary], [https://code.jsoftware.com/wiki/NuVoc NuVoc]
| documentation          = [https://www.jsoftware.com/help/dictionary/contents.htm Dictionary], [https://code.jsoftware.com/wiki/NuVoc NuVoc]
| run online            = [https://joebo.github.io/j-emscripten/ Emscripten]
| run online            = [https://joebo.github.io/j-emscripten/ Emscripten], [https://jsoftware.github.io/j-playground/bin/html/ J playground]
}}
}}
'''J''' is an array language loosely following the [[SHARP APL]] tradition which uses [[wikipedia:ASCII|ASCII]] characters for primitive functionality and builds in [[leading axis theory]] and [[tacit programming]] as foundational design principles. J discards backwards compatibility with older APLs in order to simplify and regularize its syntax, redesign primitives to work on leading axes, and disentangle [[reduction]] from [[scan]]s and [[windowed reduction]]s (yielding the [[Prefix operator|prefix]] and [[infix operator]]s). However, J concepts such as [[function train]]s and the [[Indices]] function have been adopted by later APLs such as [[NARS2000]], [[Dyalog APL]], and [[dzaima/APL]]. J breaks the APL convention of writing primitives with a single glyph: instead, they are spelled with a single ASCII character possibly followed by one or two periods (<source lang=j inline>.</source>) or colons (<source lang=j inline>:</source>). It is also notable for its use of terms from English grammar to describe the language. For example, [[function]]s are called "verbs" while arrays are called "nouns".
'''J''' is an array language loosely following the [[SHARP APL]] tradition which uses [[wikipedia:ASCII|ASCII]] characters for primitive functionality and builds in [[leading axis theory]] and [[tacit programming]] as foundational design principles. J discards backwards compatibility with older APLs in order to simplify and regularize its syntax, redesign primitives to work on leading axes, and disentangle [[reduction]] from [[scan]]s and [[windowed reduction]]s (yielding the [[Prefix operator|prefix]] and [[infix operator]]s). However, J concepts such as [[function train]]s and the [[Indices]] function have been adopted by later APLs such as [[NARS2000]], [[Dyalog APL]], and [[dzaima/APL]]. J breaks the APL convention of writing primitives with a single glyph: instead, they are spelled with a single ASCII character possibly followed by one or two periods (<syntaxhighlight lang=j inline>.</syntaxhighlight>) or colons (<syntaxhighlight lang=j inline>:</syntaxhighlight>). It is also notable for its use of terms from English grammar to describe the language. For example, [[function]]s are called "verbs" while arrays are called "nouns".


== History ==
== History ==
Line 36: Line 36:
Iverson's phrase "the latest thinking in APL" refers to two major breakthroughs made that decade: the invention of the [[Rank operator]] by [[Arthur Whitney]] in 1982 and subsequent development of [[leading axis theory]], and the invention of [[function train]]s by Iverson and [[Eugene McDonnell]] in 1988.
Iverson's phrase "the latest thinking in APL" refers to two major breakthroughs made that decade: the invention of the [[Rank operator]] by [[Arthur Whitney]] in 1982 and subsequent development of [[leading axis theory]], and the invention of [[function train]]s by Iverson and [[Eugene McDonnell]] in 1988.


In the summer of 1989 Whitney visited Iverson, who discussed with Whitney his plans for a new array language. Whitney wrote a one-page prototype for the language in a single afternoon using [[wikipedia:C (programming language)|C]]. Iverson shared the program with [[Roger Hui]], who began working on J on August 27 and quickly produced a more complete prototype.<ref name="personal"/><ref>[[Roger Hui|Hui, Roger]]. [https://code.jsoftware.com/wiki/Essays/Incunabulum "Incunabulum"]. From ''An Implementation of J'', Appendix A: Incunabulum, 1992-01-27.</ref><ref name>McIntyre, Donald. [https://web.archive.org/web/20060410225556/http://elliscave.com/APL_J/rogerhui.htm "A Tribute to Roger Hui, presented at APL96"]. 1996.</ref> The name "J", chosen by Hui when saving the first source code file, is meaningless: in ''An Implementation of J'', Hui remarks "Why 'J'? It is easy to type."<ref>[[Roger Hui|Hui, Roger]]. [https://sblom.github.io/openj-core/ioj.htm ''An Implementation of J''] ([http://www.jsoftware.com/books/pdf/aioj.pdf pdf]), Preface. 1992-01-27.</ref> J was first presented by Hui and Iverson, including a live demo, at a meeting of the Toronto APLSIG in February 1990.<ref name="remembering">[[Roger Hui|Hui, Roger]]. [http://keiapl.org/rhui/remember.htm "Remembering Ken Iverson"]. 2004-11.</ref>
In the summer of 1989 Whitney visited Iverson, who discussed with Whitney his plans for a new array language. Whitney wrote a one-page prototype for the language in a single afternoon using [[wikipedia:C (programming language)|C]]. Iverson shared the program with [[Roger Hui]], who began working on J on August 27 and quickly produced a more complete prototype.<ref name="personal"/><ref>[[Roger Hui|Hui, Roger]]. [https://code.jsoftware.com/wiki/Essays/Incunabulum "Incunabulum"]. From ''An Implementation of J'', Appendix A: Incunabulum, 1992-01-27.</ref><ref name>McIntyre, Donald. [https://web.archive.org/web/20060410225556/http://elliscave.com/APL_J/rogerhui.htm "A Tribute to Roger Hui, presented at APL96"]. 1996.</ref> The name "J", chosen by Hui when saving the first source code file,<ref>[[Roger Hui]] and [[Morten Kromberg]]. [https://dl.acm.org/doi/abs/10.1145/3386319 ''APL since 1978'']. §10.2 What's in a Name?. ACM [[HOPL]] IV. 2020-06.</ref> is meaningless: in ''An Implementation of J'', Hui remarks "Why 'J'? It is easy to type."<ref>[[Roger Hui|Hui, Roger]]. [https://sblom.github.io/openj-core/ioj.htm ''An Implementation of J''] ([http://www.jsoftware.com/books/pdf/aioj.pdf pdf]), Preface. 1992-01-27.</ref> J was first presented by Hui and Iverson, including a live demo, at a meeting of the Toronto APLSIG in February 1990.<ref name="remembering">[[Roger Hui|Hui, Roger]]. [http://keiapl.org/rhui/remember.htm "Remembering Ken Iverson"]. 2004-11.</ref>


In 1990 Hui and Iverson joined Iverson Software Inc. (now [[Jsoftware]]), which had been founded that year by [[Eric Iverson]] to sell a [[SHARP APL]] product. Eric converted his SHARP [[session]] to use with J as Hui continued on the core language's implementation. The J language, including Eric's session environment, was first released at [[APL90]] in Copenhagen August 1990.<ref name="remembering"/>
In 1990 Hui and Iverson joined Iverson Software Inc. (now [[Jsoftware]]), which had been founded that year by [[Eric Iverson]] to sell a [[SHARP APL]] product. Eric converted his SHARP [[session]] to use with J as Hui continued on the core language's implementation. The J language, including Eric's session environment, was first released at [[APL90]] in Copenhagen August 1990.<ref name="remembering"/>
Line 42: Line 42:
== Versions ==
== Versions ==


J has used two numbering systems. Releases prior to 1994 used a single decimal and the naming scheme "Version X.Y", while those after used two decimals and are called "Release X.YY", or "JXYY" as in "J807".
J has used multiple numbering systems. Releases prior to 1994 used a single decimal and the naming scheme "Version X.Y", while those after used two decimals and are called "Release X.YY", or "JXYY" as in "J807". Since version 9.4, or "J9.4", they again remove the leading zero and use a third decimal to indicate revisions within a version (as in "9.4.2"; revision 0 indicates beta or pre-release revisions).


{|class=wikitable
{|class=wikitable
Line 53: Line 53:
| 2.8  || 1990-11-15 ||
| 2.8  || 1990-11-15 ||
|-
|-
| 2.9  || 1991-02-15 || Monadic <source lang=j inline>+:</source> (double), <source lang=j inline>-:</source> (halve), <source lang=j inline>*:</source> (square), dyadic <source lang=j inline>":</source> ([[Format]]), constant functions <source lang=j inline>0:</source> and <source lang=j inline>1:</source>
| 2.9  || 1991-02-15 || Monadic <syntaxhighlight lang=j inline>+:</syntaxhighlight> (double), <syntaxhighlight lang=j inline>-:</syntaxhighlight> (halve), <syntaxhighlight lang=j inline>*:</syntaxhighlight> (square), dyadic <syntaxhighlight lang=j inline>":</syntaxhighlight> ([[Format]]), constant functions <syntaxhighlight lang=j inline>0:</syntaxhighlight> and <syntaxhighlight lang=j inline>1:</syntaxhighlight>
|-
|-
| 3.0  || 1991-03-17 || Changes to spellings, [[Reverse]] with [[Variant]] to specify [[fill]]
| 3.0  || 1991-03-17 || Changes to spellings, [[Reverse]] with [[Variant]] to specify [[fill]]
|-
|-
| 3.1  || 1991-05-17 || [[Determinant]] (<source lang=j inline>.</source>)
| 3.1  || 1991-05-17 || [[Determinant]] (<syntaxhighlight lang=j inline>.</syntaxhighlight>)
|-
|-
| 3.2  || 1991-06-02 || <source lang=j inline>,.</source> for ravel items (like [[Table]]) and append lists, <source lang=j inline>;</source> for [[Raze]] and [[Link]], <source lang=j inline>@.</source> for agenda, non-[[close composition]]s
| 3.2  || 1991-06-02 || <syntaxhighlight lang=j inline>,.</syntaxhighlight> for ravel items (like [[Table]]) and append lists, <syntaxhighlight lang=j inline>;</syntaxhighlight> for [[Raze]] and [[Link]], <syntaxhighlight lang=j inline>@.</syntaxhighlight> for agenda, non-[[close composition]]s
|-
|-
| 3.3  || 1991-06-25 || Dyadic <source lang=j inline>,.</source> changed to append items, more types of trains
| 3.3  || 1991-06-25 || Dyadic <syntaxhighlight lang=j inline>,.</syntaxhighlight> changed to append items, more types of trains
|-
|-
| 3.4  || 1991-07-15 || <source lang=j inline>NB.</source> for comments
| 3.4  || 1991-07-15 || <syntaxhighlight lang=j inline>NB.</syntaxhighlight> for comments
|-
|-
| 4.0  || 1991-11-23 || Monadic <source lang=j inline>+.</source> and <source lang=j inline>*.</source> for complex components and phase/magnitude with <source lang=j inline>j.</source> and <source lang=j inline>r.</source> to recombine, <source lang=j inline>^:_</source> for power limit
| 4.0  || 1991-11-23 || Monadic <syntaxhighlight lang=j inline>+.</syntaxhighlight> and <syntaxhighlight lang=j inline>*.</syntaxhighlight> for complex components and phase/magnitude with <syntaxhighlight lang=j inline>j.</syntaxhighlight> and <syntaxhighlight lang=j inline>r.</syntaxhighlight> to recombine, <syntaxhighlight lang=j inline>^:_</syntaxhighlight> for power limit
|-
|-
| 4.1  || 1992-02-02 || <source lang=j inline>^!.p</source> for rising/falling factorials
| 4.1  || 1992-02-02 || <syntaxhighlight lang=j inline>^!.p</syntaxhighlight> for rising/falling factorials
|-
|-
| 4.2  || 1992-03-19 ||
| 4.2  || 1992-03-19 ||
Line 73: Line 73:
| 5.0  || 1992-06-22 || [[Variant]] to specify [[comparison tolerance]] and [[fill]] for [[Take]]
| 5.0  || 1992-06-22 || [[Variant]] to specify [[comparison tolerance]] and [[fill]] for [[Take]]
|-
|-
| 5.1  || 1992-07-28 || <source lang=j inline>f.</source> to expand a tacit function containing names, constant functions <source lang=j inline>2:</source> to <source lang=j inline>9:</source>
| 5.1  || 1992-07-28 || <syntaxhighlight lang=j inline>f.</syntaxhighlight> to expand a tacit function containing names, constant functions <syntaxhighlight lang=j inline>2:</syntaxhighlight> to <syntaxhighlight lang=j inline>9:</syntaxhighlight>
|-
|-
| 5.1a || 1992-08-11 ||
| 5.1a || 1992-08-11 ||
|-
|-
| 6.0  || 1992-10-24 || Error handling with <source lang=j inline>::</source>, additional [[system function]]s
| 6.0  || 1992-10-24 || Error handling with <syntaxhighlight lang=j inline>::</syntaxhighlight>, additional [[system function]]s
|-
|-
| 6.1  || 1992-11-26 || Amend operator <source lang=j inline>}</source>
| 6.1  || 1992-11-26 || [[Amend]] operator <syntaxhighlight lang=j inline>}</syntaxhighlight>
|-
|-
| 6.2  || 1992-12-20 || Derivative operator <source lang=j inline>D.</source>
| 6.2  || 1992-12-20 || Derivative operator <syntaxhighlight lang=j inline>D.</syntaxhighlight>
|-
|-
| 7.0  || 1993-11-14 || [[wikipedia:Taylor series|Taylor series]] operators <source lang=j inline>t.</source> and <source lang=j inline>T.</source>
| 7.0  || 1993-11-14 || [[wikipedia:Taylor series|Taylor series]] operators <syntaxhighlight lang=j inline>t.</syntaxhighlight> and <syntaxhighlight lang=j inline>T.</syntaxhighlight>
|}
|}


Line 95: Line 95:
| 2.04 || 1994-11-28 ||
| 2.04 || 1994-11-28 ||
|-
|-
| 2.05 || 1995-02-26 || Additional [[inverse]]s, [[primitive array]] <source lang=j inline>a:</source> ("ace")
| 2.05 || 1995-02-26 || Additional [[inverse]]s, [[primitive array]] <syntaxhighlight lang=j inline>a:</syntaxhighlight> ("ace")
|-
|-
| 2.06 || 1995-05-30 || More [[inverse]]s, hypergeometric operator <source lang=j inline>H.</source>, and prime functions <source lang=j inline>p.</source>, <source lang=j inline>p:</source>, and <source lang=j inline>q:</source>
| 2.06 || 1995-05-30 || More [[inverse]]s, hypergeometric operator <syntaxhighlight lang=j inline>H.</syntaxhighlight>, and prime functions <syntaxhighlight lang=j inline>p.</syntaxhighlight>, <syntaxhighlight lang=j inline>p:</syntaxhighlight>, and <syntaxhighlight lang=j inline>q:</syntaxhighlight>
|-
|-
| 3.01 || 1996-01-16 || Repeatable [[Roll]]/[[Deal]] <source lang=j inline>?.</source>, [[Depth]] <source lang=j inline>L.</source> and [[Depth operator]] <source lang=j inline>L:</source>, [[total array ordering]]
| 3.01 || 1996-01-16 || Repeatable [[Roll]]/[[Deal]] <syntaxhighlight lang=j inline>?.</syntaxhighlight>, [[Depth]] <syntaxhighlight lang=j inline>L.</syntaxhighlight> and [[Depth operator]] <syntaxhighlight lang=j inline>L:</syntaxhighlight>, [[total array ordering]]
|-
|-
| 3.02 || 1996-06-24 || [[Pick]] variant <source lang=j inline>{::</source>, [[extended precision]] types
| 3.02 || 1996-06-24 || [[Pick]] variant <syntaxhighlight lang=j inline>{::</syntaxhighlight>, [[extended precision]] types
|-
|-
| 3.03 || 1996-12-13 || [[Multiple assignment]] using a string target
| 3.03 || 1996-12-13 || [[Multiple assignment]] using a string target
|-
|-
| 3.04 || 1997-05-19 || More operators with gerund operands, <source lang=j inline>for.</source> and <source lang=j inline>select.</source> [[control structure]]s
| 3.04 || 1997-05-19 || More operators with gerund operands, <syntaxhighlight lang=j inline>for.</syntaxhighlight> and <syntaxhighlight lang=j inline>select.</syntaxhighlight> [[control structure]]s
|-
|-
| 3.05 || 1997-09-27 || Extended dyad <source lang=j inline>q:</source> ([[Factor]]) to take a negative left argument
| 3.05 || 1997-09-27 || Extended dyad <syntaxhighlight lang=j inline>q:</syntaxhighlight> ([[Factor]]) to take a negative left argument
|-
|-
| 4.01 || 1998-03-22 || [[Find]] (<source lang=j inline>E.</source>) and [[Index of Last]] (<source lang=j inline>i:</source>)
| 4.01 || 1998-03-22 || [[Find]] (<syntaxhighlight lang=j inline>E.</syntaxhighlight>) and [[Index of Last]] (<syntaxhighlight lang=j inline>i:</syntaxhighlight>)
|-
|-
| 4.02 || 1998-11-07 || Symmetric range monad (<source lang=j inline>i:</source>), infinite left arguments to [[Take]]
| 4.02 || 1998-11-07 || Symmetric range monad (<syntaxhighlight lang=j inline>i:</syntaxhighlight>), infinite left arguments to [[Take]]
|-
|-
| 4.03 || 1999-04-21 ||
| 4.03 || 1999-04-21 ||
Line 119: Line 119:
| 4.05 || 2000-09-05 || [[Comparison tolerance]] for [[Key]]
| 4.05 || 2000-09-05 || [[Comparison tolerance]] for [[Key]]
|-
|-
| 4.06 || 2001-05-09 || <source lang=j inline>assert.</source> and <source lang=j inline>throw.</source>, Symbols (<source lang=j inline>s:</source>) and Unicode (<source lang=j inline>u:</source>), multiple axes in [[Cut]] operator
| 4.06 || 2001-05-09 || <syntaxhighlight lang=j inline>assert.</syntaxhighlight> and <syntaxhighlight lang=j inline>throw.</syntaxhighlight>, Symbols (<syntaxhighlight lang=j inline>s:</syntaxhighlight>) and Unicode (<syntaxhighlight lang=j inline>u:</syntaxhighlight>), multiple axes in [[Cut]] operator
|-
|-
| 5.01 || 2002-09-10 || Non-[[Close composition|close]] [[Under]] <source lang=j inline>&.:</source>, Bitwise Operations (<source lang=j inline>b.</source>), Polynomial Derivative (<source lang=j inline>p..</source>), Head (<source lang=j inline>{.</source>) and Tail (<source lang=j inline>{:</source>) allow [[empty]] arguments
| 5.01 || 2002-09-10 || Non-[[Close composition|close]] [[Under]] <syntaxhighlight lang=j inline>&.:</syntaxhighlight>, Bitwise Operations (<syntaxhighlight lang=j inline>b.</syntaxhighlight>), Polynomial Derivative (<syntaxhighlight lang=j inline>p..</syntaxhighlight>), Head (<syntaxhighlight lang=j inline>{.</syntaxhighlight>) and Tail (<syntaxhighlight lang=j inline>{:</syntaxhighlight>) allow [[empty]] arguments
|-
|-
| 5.02 || 2003-05-21 ||
| 5.02 || 2003-05-21 ||
|-
|-
| 5.03 || 2004-03-19 || [[Indices]] (<source lang=j inline>I.</source>), Sequential Machine (<source lang=j inline>;:</source>)
| 5.03 || 2004-03-19 || [[Indices]] (<syntaxhighlight lang=j inline>I.</syntaxhighlight>), Sequential Machine (<syntaxhighlight lang=j inline>;:</syntaxhighlight>)
|-
|-
| 5.04 || 2005-03-18 || J64 (64-bit version) introduced, boxed right argument for [[Power operator]], [[scalar extension]] for left argument of [[Cut]] (<source lang=j inline>;.</source>)
| 5.04 || 2005-03-18 || J64 (64-bit version) introduced, boxed right argument for [[Power operator]], [[scalar extension]] for left argument of [[Cut]] (<syntaxhighlight lang=j inline>;.</syntaxhighlight>)
|-
|-
| 6.01 || 2006-07-21 || Noun left arguments in trains (<source lang=j inline>N0 V1 V2</source>), dots removed from explicit argument names (<source lang=j inline>y.</source> to <source lang=j inline>y</source>, etc.), [[Interval Index]] (<source lang=j inline>I.</source>)
| 6.01 || 2006-07-21 || Noun left arguments in trains (<syntaxhighlight lang=j inline>N0 V1 V2</syntaxhighlight>), dots removed from explicit argument names (<syntaxhighlight lang=j inline>y.</syntaxhighlight> to <syntaxhighlight lang=j inline>y</syntaxhighlight>, etc.), [[Interval Index]] (<syntaxhighlight lang=j inline>I.</syntaxhighlight>)
|-
|-
| 6.02 || 2008-02-29 || [[Index Of]] (<source lang=j inline>i.</source>) extended to allow unmatched cell shapes, Memoize adverb (<source lang=j inline>M.</source>)
| 6.02 || 2008-02-29 || [[Index Of]] (<syntaxhighlight lang=j inline>i.</syntaxhighlight>) extended to allow unmatched cell shapes, Memoize adverb (<syntaxhighlight lang=j inline>M.</syntaxhighlight>)
|-
|-
| 7.01 || 2010-08-05 || GTK IDE
| 7.01 || 2010-08-05 || GTK IDE
Line 139: Line 139:
| 8.01 || 2014-02    || Qt IDE
| 8.01 || 2014-02    || Qt IDE
|-
|-
| 8.02 || 2014-08-02 || Qt IDE improved
| [https://code.jsoftware.com/wiki/System/ReleaseNotes/J802 8.02] || 2014-08-02 || Qt IDE improved
|-
|-
| 8.03 || 2014-12-09 || Native read/write of jpeg and png images
| [https://code.jsoftware.com/wiki/System/ReleaseNotes/J803 8.03] || 2014-12-09 || Native read/write of jpeg and png images
|-
|-
| 8.04 || 2016-01-04 ||
| [https://code.jsoftware.com/wiki/System/ReleaseNotes/J804 8.04] || 2016-01-04 ||
|-
|-
| 8.05 || 2016-12-19 || Improved UTF-8 handling, memory allocator rewritten with more in-place argument usage
| [https://code.jsoftware.com/wiki/System/ReleaseNotes/J805 8.05] || 2016-12-19 || Improved UTF-8 handling, memory allocator rewritten with more in-place argument usage
|-
|-
| 8.06 || 2017-11-12 || Allow array right operands to [[Atop]] and Adverse (<source lang=j inline>::</source>), treating as constant functions, improved [[Vector instructions|vector instruction]] usage
| [https://code.jsoftware.com/wiki/System/ReleaseNotes/J806 8.06] || 2017-11-12 || Allow array right operands to [[Atop]] and Adverse (<syntaxhighlight lang=j inline>::</syntaxhighlight>), treating as constant functions, improved [[Vector instructions|vector instruction]] usage
|-
|-
| 8.07 || 2018-10-08 || Removed support for dot-style explicit arguments (e.g. <source lang=j inline>y.</source>)
| [https://code.jsoftware.com/wiki/System/ReleaseNotes/J807 8.07] || 2018-10-08 || Removed support for dot-style explicit arguments (e.g. <syntaxhighlight lang=j inline>y.</syntaxhighlight>)
|-
|-
| 9.01 || 2019-12-15 || Iteration primitives <source lang=j inline>F..</source>, <source lang=j inline>F.:</source>, <source lang=j inline>F.</source>, <source lang=j inline>F:.</source>, <source lang=j inline>F::</source>, <source lang=j inline>F:</source>; Remove calculus operators <source lang=j inline>d.</source>, <source lang=j inline>D.</source>, <source lang=j inline>D:</source>, <source lang=j inline>t.</source>, <source lang=j inline>t:</source>, <source lang=j inline>T.</source>, <source lang=j inline>..</source>, <source lang=j inline>.:</source>; <source lang=j inline>gerund"r</source>
| [https://code.jsoftware.com/wiki/System/ReleaseNotes/J901 9.01] || 2019-12-15 || Iteration primitives <syntaxhighlight lang=j inline>F..</syntaxhighlight>, <syntaxhighlight lang=j inline>F.:</syntaxhighlight>, <syntaxhighlight lang=j inline>F.</syntaxhighlight>, <syntaxhighlight lang=j inline>F:.</syntaxhighlight>, <syntaxhighlight lang=j inline>F::</syntaxhighlight>, <syntaxhighlight lang=j inline>F:</syntaxhighlight>; Remove calculus operators <syntaxhighlight lang=j inline>d.</syntaxhighlight>, <syntaxhighlight lang=j inline>D.</syntaxhighlight>, <syntaxhighlight lang=j inline>D:</syntaxhighlight>, <syntaxhighlight lang=j inline>t.</syntaxhighlight>, <syntaxhighlight lang=j inline>t:</syntaxhighlight>, <syntaxhighlight lang=j inline>T.</syntaxhighlight>, <syntaxhighlight lang=j inline>..</syntaxhighlight>, <syntaxhighlight lang=j inline>.:</syntaxhighlight>; <syntaxhighlight lang=j inline>gerund"r</syntaxhighlight>
|-
|-
| 9.02 || 2020-12-13 || "Direct definition" syntax for explicit functions, special semidual form <source lang=j inline>u&.:(a:`v)</source> added, minor incompatible changes
| [https://code.jsoftware.com/wiki/System/ReleaseNotes/J902 9.02] || 2020-12-13 || "Direct definition" syntax for explicit functions, special semidual form <syntaxhighlight lang=j inline>u&.:(a:`v)</syntaxhighlight> added, minor incompatible changes
|-
|-
| 9.03 || In beta    || Foreigns to enable nameref caching, Kahan summation with `+/!.0`
| [https://code.jsoftware.com/wiki/System/ReleaseNotes/J903 9.03] || 2021-12-17 || Modifier trains and other combinations, foreigns to enable nameref caching, Kahan summation with <syntaxhighlight lang=j inline>+/!.0</syntaxhighlight><ref>[[Array Cast]] episode 18: [https://www.arraycast.com/episodes/episode18-henry-rich-presents-j903 Henry Rich presents J903]</ref>
|-
| [https://code.jsoftware.com/wiki/System/ReleaseNotes/J9.4 9.4] || 2023-03-01 || Threading using <syntaxhighlight lang=j inline>T.</syntaxhighlight> and <syntaxhighlight lang=j inline>t.</syntaxhighlight>,<ref>[[Array Cast]] episode 48: [https://www.arraycast.com/episodes/episode48-henry-rich Henry Rich Reveals J with Threads J9.4]</ref> [[Key]]-like <syntaxhighlight lang=j inline>/..</syntaxhighlight>, reimplementation of exact integers and rationals with [[wikipedia:GNU Multiple Precision Arithmetic Library|GMP]]<ref>[[Array Cast]] episode 59: [https://www.arraycast.com/episodes/episode59-raul-miller Raul Miller - Precision]</ref>
|-
| [https://code.jsoftware.com/wiki/System/ReleaseNotes/J9.5 9.5] || 2023-12-20 || Modular arithmetic (<syntaxhighlight lang=j inline>m.</syntaxhighlight>), changes and restrictions to [[Select]] (<syntaxhighlight lang=j inline>{</syntaxhighlight>) and [[Amend]] (<syntaxhighlight lang=j inline>}</syntaxhighlight>), limited [[structural Under]] support<ref>[[Array Cast]] episode 73: [https://www.arraycast.com/episodes/episode73-j95 Henry Rich and the Release of J9.5]</ref>
|}
|}


Line 161: Line 165:


<references />
<references />
{{APL dialects}}[[Category:Array languages]][[Category:Flat array languages]][[Category:Leading axis languages]][[Category:Languages with tacit programming]][[Category:ASCII languages]]
{{APL dialects}}[[Category:Flat array languages]][[Category:Leading axis languages]][[Category:Languages with tacit programming]][[Category:ASCII languages]]

Navigation menu