J: Difference between revisions

Jump to navigation Jump to search
720 bytes added ,  22:12, 10 September 2022
m
Text replacement - "</source>" to "</syntaxhighlight>"
m (Text replacement - "<source" to "<syntaxhighlight")
m (Text replacement - "</source>" to "</syntaxhighlight>")
Line 23: Line 23:
| run online            = [https://joebo.github.io/j-emscripten/ Emscripten], [https://jsoftware.github.io/j-playground/bin/html/ J playground]
| 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 (<syntaxhighlight lang=j inline>.</source>) or colons (<syntaxhighlight 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 53: Line 53:
| 2.8  || 1990-11-15 ||
| 2.8  || 1990-11-15 ||
|-
|-
| 2.9  || 1991-02-15 || Monadic <syntaxhighlight lang=j inline>+:</source> (double), <syntaxhighlight lang=j inline>-:</source> (halve), <syntaxhighlight lang=j inline>*:</source> (square), dyadic <syntaxhighlight lang=j inline>":</source> ([[Format]]), constant functions <syntaxhighlight lang=j inline>0:</source> and <syntaxhighlight 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]] (<syntaxhighlight lang=j inline>.</source>)
| 3.1  || 1991-05-17 || [[Determinant]] (<syntaxhighlight lang=j inline>.</syntaxhighlight>)
|-
|-
| 3.2  || 1991-06-02 || <syntaxhighlight lang=j inline>,.</source> for ravel items (like [[Table]]) and append lists, <syntaxhighlight lang=j inline>;</source> for [[Raze]] and [[Link]], <syntaxhighlight 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 <syntaxhighlight 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 || <syntaxhighlight 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 <syntaxhighlight lang=j inline>+.</source> and <syntaxhighlight lang=j inline>*.</source> for complex components and phase/magnitude with <syntaxhighlight lang=j inline>j.</source> and <syntaxhighlight lang=j inline>r.</source> to recombine, <syntaxhighlight 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 || <syntaxhighlight 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 || <syntaxhighlight lang=j inline>f.</source> to expand a tacit function containing names, constant functions <syntaxhighlight lang=j inline>2:</source> to <syntaxhighlight 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 <syntaxhighlight 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 <syntaxhighlight lang=j inline>}</source>
| 6.1  || 1992-11-26 || [[Amend]] operator <syntaxhighlight lang=j inline>}</syntaxhighlight>
|-
|-
| 6.2  || 1992-12-20 || Derivative operator <syntaxhighlight 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 <syntaxhighlight lang=j inline>t.</source> and <syntaxhighlight 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]] <syntaxhighlight 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 <syntaxhighlight lang=j inline>H.</source>, and prime functions <syntaxhighlight lang=j inline>p.</source>, <syntaxhighlight lang=j inline>p:</source>, and <syntaxhighlight 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]] <syntaxhighlight lang=j inline>?.</source>, [[Depth]] <syntaxhighlight lang=j inline>L.</source> and [[Depth operator]] <syntaxhighlight 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 <syntaxhighlight 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, <syntaxhighlight lang=j inline>for.</source> and <syntaxhighlight 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 <syntaxhighlight 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]] (<syntaxhighlight lang=j inline>E.</source>) and [[Index of Last]] (<syntaxhighlight 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 (<syntaxhighlight 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 || <syntaxhighlight lang=j inline>assert.</source> and <syntaxhighlight lang=j inline>throw.</source>, Symbols (<syntaxhighlight lang=j inline>s:</source>) and Unicode (<syntaxhighlight 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]] <syntaxhighlight lang=j inline>&.:</source>, Bitwise Operations (<syntaxhighlight lang=j inline>b.</source>), Polynomial Derivative (<syntaxhighlight lang=j inline>p..</source>), Head (<syntaxhighlight lang=j inline>{.</source>) and Tail (<syntaxhighlight 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]] (<syntaxhighlight lang=j inline>I.</source>), Sequential Machine (<syntaxhighlight 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]] (<syntaxhighlight 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 (<syntaxhighlight lang=j inline>N0 V1 V2</source>), dots removed from explicit argument names (<syntaxhighlight lang=j inline>y.</source> to <syntaxhighlight lang=j inline>y</source>, etc.), [[Interval Index]] (<syntaxhighlight 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]] (<syntaxhighlight lang=j inline>i.</source>) extended to allow unmatched cell shapes, Memoize adverb (<syntaxhighlight 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 147: Line 147:
| 8.05 || 2016-12-19 || Improved UTF-8 handling, memory allocator rewritten with more in-place argument usage
| 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>::</source>), treating as constant functions, improved [[Vector instructions|vector instruction]] 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
|-
|-
| 8.07 || 2018-10-08 || Removed support for dot-style explicit arguments (e.g. <syntaxhighlight lang=j inline>y.</source>)
| 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..</source>, <syntaxhighlight lang=j inline>F.:</source>, <syntaxhighlight lang=j inline>F.</source>, <syntaxhighlight lang=j inline>F:.</source>, <syntaxhighlight lang=j inline>F::</source>, <syntaxhighlight lang=j inline>F:</source>; Remove calculus operators <syntaxhighlight lang=j inline>d.</source>, <syntaxhighlight lang=j inline>D.</source>, <syntaxhighlight lang=j inline>D:</source>, <syntaxhighlight lang=j inline>t.</source>, <syntaxhighlight lang=j inline>t:</source>, <syntaxhighlight lang=j inline>T.</source>, <syntaxhighlight lang=j inline>..</source>, <syntaxhighlight lang=j inline>.:</source>; <syntaxhighlight lang=j inline>gerund"r</source>
| 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)</source> added, minor incompatible changes
| 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</source>
| 9.03 || 2021-12-17 || Modifier trains and other combinations, foreigns to enable nameref caching, Kahan summation with <syntaxhighlight lang=j inline>+/!.0</syntaxhighlight>
|}
|}


Navigation menu