J: Difference between revisions

From APL Wiki
Jump to navigation Jump to search
No edit summary
(Get rid of FP and FL mentions since they weren't a significant influence)
Line 9: Line 9:
| developer              = [[Jsoftware]] ([[Kenneth E. Iverson]], [[Roger Hui]])
| developer              = [[Jsoftware]] ([[Kenneth E. Iverson]], [[Roger Hui]])
| latest release version = J807 / 2018-10-08
| latest release version = J807 / 2018-10-08
| influenced by          = [[SHARP APL]], [[Rationalized APL]], [[wikipedia:FP (programming language)|FP]], [[wikipedia:FL (programming language)|FL]]
| influenced by          = [[SHARP APL]], [[Rationalized APL]]
| influenced            = [[Dyalog APL]], [[NARS2000]], [[I]]
| influenced            = [[Dyalog APL]], [[NARS2000]], [[I]]
| implementation language= [[wikipedia:C (programming language)|C]]
| implementation language= [[wikipedia:C (programming language)|C]]
Line 21: Line 21:
}}
}}


The '''J''' programming language combines an ASCII encoding of APL as embodied by [[SHARP APL]] with functional techniques developed by [[John Backus]] for the [[wikipedia:FP (programming language)|FP]] and [[wikipedia:FL (programming language)|FL]] languages. J is characterized by its use of [[leading axis theory]] as a foundational design principle and its [[tacit programming]] capabilities. [[Function train]]s are a key J feature and were later adopted by [[Dyalog APL]]. J's primitives consist of 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 (<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".


== History ==
== History ==

Revision as of 18:10, 5 December 2019


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 one-page 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]

References

  1. 1.0 1.1 Iverson, K.E. "A Personal View of APL". IBM Systems Journal, Volume 30, Number 4. 1991-12.
  2. Hui, Roger. "Incunabulum". From An Implementation of J, Appendix A: Incunabulum, 1992-01-27.
  3. McIntyre, Donald. "A Tribute to Roger Hui, presented at APL96". 1996.
  4. Hui, Roger. An Implementation of J (pdf), Preface. 1992-01-27.
  5. 5.0 5.1 Hui, Roger. "Remembering Ken Iverson". 2004-11.
APL dialects [edit]
Maintained APL+WinAPL2APL64APL\ivApletteAprilCo-dfnsDyalog APLDyalog APL Visiondzaima/APLGNU APLKapNARS2000PometoTinyAPL
Historical A Programming LanguageA+ (A) ∙ APL#APL2CAPL\360APL/700APL\1130APL\3000APL.68000APL*PLUSAPL.jlAPL.SVAPLXExtended Dyalog APLIverson notationIVSYS/7090NARSngn/aplopenAPLOperators and FunctionsPATRowanSAXSHARP APLRationalized APLVisualAPL (APLNext) ∙ VS APLYork APL
Derivatives AHPLBQNCoSyELIGleeIIvyJJellyK (Goal, Klong, Q) ∙ KamilaLispLang5LilNialRADUiua
Overviews Comparison of APL dialectsTimeline of array languagesTimeline of influential array languagesFamily tree of array languages