J: Difference between revisions

Jump to navigation Jump to search
2,129 bytes added ,  17 February
m
Fix infobox 9.5 release date (must have been a beta version)
m (Text replacement - "</source>" to "</syntaxhighlight>")
m (Fix infobox 9.5 release date (must have been a beta version))
(4 intermediate revisions by the same user 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 = j903 / 2021-12-17
| 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 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 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 (<syntaxhighlight lang=j inline>::</syntaxhighlight>), 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. <syntaxhighlight lang=j inline>y.</syntaxhighlight>)
| [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 <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>
| [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 <syntaxhighlight lang=j inline>u&.:(a:`v)</syntaxhighlight> 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 || 2021-12-17 || Modifier trains and other combinations, foreigns to enable nameref caching, Kahan summation with <syntaxhighlight lang=j inline>+/!.0</syntaxhighlight>
| [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