Difference between revisions of "J"
m 
m (Links to complex numbers) 

Line 4:  Line 4:  
 index origin = 0   index origin = 0  
 function styles = explicit, [[tacit]]   function styles = explicit, [[tacit]]  
−   numeric types = 64bit integer, complex float, [[extended integer]], [[rational]]  +   numeric types = 64bit integer, [[complex]] float, [[extended integer]], [[rational]] 
 unicode support = full; distinct byte and code point types   unicode support = full; distinct byte and code point types  
 released = 1990   released = 1990 
Latest revision as of 15:33, 24 January 2020
J is an array language loosely following the SHARP APL tradition which uses 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 scans and windowed reductions (yielding the prefix and infix operators). However, J concepts such as function trains 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 (.
) or colons (:
). It is also notable for its use of terms from English grammar to describe the language. For example, functions are called "verbs" while arrays are called "nouns".
History
J was initially designed primarily by Ken Iverson and Roger Hui, with input from Arthur Whitney and Eric Iverson. Ken had been considering a new language based on A Dictionary of APL but without the backwards compatibility constraints of APL and the custom character set (which was a major technical issue at the time). In "A Personal View of APL"^{[1]} he gives the following as the most important goals for a new language:
 Is available as “shareware”, and is inexpensive enough to be acquired by students as well as by schools
 Can be printed on standard printers
 Runs on a wide variety of computers
 Provides the simplicity and the generality of the latest thinking in APL
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 trains 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 onepage prototype for the language in a single afternoon using C. Iverson shared the program with Roger Hui, who began working on J on August 27 and quickly produced a more complete prototype.^{[1]}^{[2]}^{[3]} 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."^{[4]} J was first presented by Hui and Iverson, including a live demo, at a meeting of the Toronto APLSIG in February 1990.^{[5]}
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.^{[5]}
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".
Version  Date  Features 

2.0  19900809  (APL90) 
2.7  19901022  Rank with a function right operand, Under 
2.8  19901115  
2.9  19910215  Monadic +: (double), : (halve), *: (square), dyadic ": (Format), constant functions 0: and 1:

3.0  19910317  Changes to spellings, Reverse with Variant to specify fill 
3.1  19910517  Determinant (. )

3.2  19910602  ,. for ravel items (like Table) and append lists, ; for Raze and Link, @. for agenda, nonclose compositions

3.3  19910625  Dyadic ,. changed to append items, more types of trains

3.4  19910715  NB. for comments

4.0  19911123  Monadic +. and *. for complex components and phase/magnitude with j. and r. to recombine, ^:_ for power limit

4.1  19920202  ^!.p for rising/falling factorials

4.2  19920319  
5.0  19920622  Variant to specify comparison tolerance and fill for Take 
5.1  19920728  f. to expand a tacit function containing names, constant functions 2: to 9:

5.1a  19920811  
6.0  19921024  Error handling with :: , additional system functions

6.1  19921126  Amend operator }

6.2  19921220  Derivative operator D.

7.0  19931114  Taylor series operators t. and T.

Release  Date  Features 

2.01  19940901  Control structures, many additional system functions 
2.03  19940921  
2.04  19941128  
2.05  19950226  Additional inverses, primitive array a: ("ace")

2.06  19950530  More inverses, hypergeometric operator H. , and prime functions p. , p: , and q:

3.01  19960116  Repeatable Roll/Deal ?. , Depth L. and Depth operator L: , total array ordering

3.02  19960624  Pick variant {:: , extended precision types

3.03  19961213  Multiple assignment using a string target 
3.04  19970519  More operators with gerund operands, for. and select. control structures

3.05  19970927  Extended dyad q: (Factor) to take a negative left argument

4.01  19980322  Find (E. ) and Index of Last (i: )

4.02  19981107  Symmetric range monad (i: ), infinite left arguments to Take

4.03  19990421  
4.04  20000102  Sparse array support 
4.05  20000905  Comparison tolerance for Key 
4.06  20010509  assert. and throw. , Symbols (s: ) and Unicode (u: ), multiple axes in Cut operator

5.01  20020910  Nonclose Under &.: , Bitwise Operations (b. ), Polynomial Derivative (p.. ), Head ({. ) and Tail ({: ) allow empty arguments

5.02  20030521  
5.03  20040319  Indices (I. ), Sequential Machine (;: )

5.04  20050318  J64 (64bit version) introduced, boxed right argument for Power operator, scalar extension for left argument of Cut (;. )

6.01  20060721  Noun left arguments in trains (N0 V1 V2 ), dots removed from explicit argument names (y. to y , etc.), Interval Index (I. )

6.02  20080229  Index Of (i. ) extended to allow unmatched cell shapes, Memoize adverb (M. )

7.01  20100805  GTK IDE 
7.02  
8.01  201402  Qt IDE 
8.02  20140802  Qt IDE improved 
8.03  20141209  Native read/write of jpeg and png images 
8.04  20160104  
8.05  20161219  Improved UTF8 handling, memory allocator rewritten with more inplace argument usage 
8.06  20171112  Allow array right operands to Atop and Adverse (:: ), treating as constant functions, improved vector instruction usage

8.07  20181008  Removed support for dotstyle explicit arguments (e.g. y. )

9.01  20191215  Iteration primitives F.. , F.: , F. , F:. , F:: , F: ; Remove calculus operators d. , D. , D: , t. , t: , T. , .. , .: ; gerund"r

References
 ↑ ^{1.0} ^{1.1} Iverson, K.E. "A Personal View of APL". IBM Systems Journal, Volume 30, Number 4. 199112.
 ↑ Hui, Roger. "Incunabulum". From An Implementation of J, Appendix A: Incunabulum, 19920127.
 ↑ McIntyre, Donald. "A Tribute to Roger Hui, presented at APL96". 1996.
 ↑ Hui, Roger. An Implementation of J (pdf), Preface. 19920127.
 ↑ ^{5.0} ^{5.1} Hui, Roger. "Remembering Ken Iverson". 200411.
APL dialects [edit]  

Maintained  APL+Win (APL*PLUS) ∙ APL2 ∙ APL64 ∙ APL\iv ∙ Codfns ∙ Dyalog APL ∙ dzaima/APL ∙ GNU APL ∙ NARS2000 ∙ ngn/apl 
Historical  Iverson notation ∙ A Programming Language ∙ A+ (A) ∙ APL# ∙ APL.68000 ∙ APL.SV ∙ APLX ∙ APL\1130 ∙ APL\360 ∙ NARS ∙ openAPL ∙ Rowan ∙ SHARP APL (SAX) ∙ VisualAPL (APLNext) ∙ VSAPL ∙ York APL 
Derivatives  ELI ∙ J ∙ K (Q, KDB+) ∙ LYaPAS ∙ Nial ∙ RAD 