Comparison of APL dialects: Difference between revisions

Jump to navigation Jump to search
m
(→‎Development and platform: Presumably NARS stopped being shipped when PLUS II came out?)
 
(14 intermediate revisions by 2 users not shown)
Line 18: Line 18:
| <syntaxhighlight lang=apl inline>></syntaxhighlight> || [[Mix]]      || [[SHARP APL]], [[A]], [[A+]]
| <syntaxhighlight lang=apl inline>></syntaxhighlight> || [[Mix]]      || [[SHARP APL]], [[A]], [[A+]]
|-
|-
| <syntaxhighlight lang=apl inline>⊃</syntaxhighlight> || [[Mix]]      || [[APL2]], [[ISO/IEC 13751:2001]], [[APLX]], [[NARS2000]], [[GNU APL]], [[Kap]]
| <syntaxhighlight lang=apl inline>⊃</syntaxhighlight> || [[Mix]]      || [[APL2]], [[ISO/IEC 13751:2001]], [[APL2C]], [[APLX]], [[NARS2000]], [[GNU APL]], [[Kap]]
|-
|-
| <syntaxhighlight lang=apl inline>⊃</syntaxhighlight> || [[First]]    || [[ngn/apl]], [[Co-dfns]], [[dzaima/APL]], [[April]]
| <syntaxhighlight lang=apl inline>⊃</syntaxhighlight> || [[First]]    || [[ngn/apl]], [[Co-dfns]], [[dzaima/APL]], [[April]]
Line 24: Line 24:
| <syntaxhighlight lang=apl inline>⊃</syntaxhighlight> || Configurable || [[Dyalog APL]], [[APL*PLUS]], [[APL+Win]], [[APL64]]
| <syntaxhighlight lang=apl inline>⊃</syntaxhighlight> || Configurable || [[Dyalog APL]], [[APL*PLUS]], [[APL+Win]], [[APL64]]
|}
|}
== Function definition ==
{{Main|Function styles}}
Dialects offer a variety of ways to create [[function]]s and [[operator]]s. The three major branches are [[defined function]]s, which use a header declaring the function and argument names, [[anonymous function]]s such as [[dfn]]s, which also consist of a list of statements but have no header and use fixed argument names, and [[tacit programming|tacit function]]s, which are created by manipulating existing functions with no reference to [[argument]]s.
Defined functions were the dominant form for most of APL's history, with only some niche forms based on [[direct definition (notation)|direct definition notation]] appearing in the 1980s: the [[direct definition (operator)|direct definition operator]] in [[NARS]] and a library to translate this notation to defined functions in [[SHARP APL]]. [[Function assignment]], a necessary feature for tacit programming, began to appear in the 1980s, such as in [[Dyalog APL]] version 4.0 in 1986. However, [[train]]s, which make larger-scale tacit programming feasible, were not introduced to APL until around 2010. Dyalog's [[dfn]]s were introduced in 1996 to slow initial adoption; nearly all new dialects of the 2010s and later support a similar syntax. Because of the widespread use of dfns, several of these dialects no longer support a traditional function definition notation.


== Numeric types ==
== Numeric types ==
Line 52: Line 59:
The following table shows support for various APL features: nesting either with [[box]]es or the [[nested array model]], [[defined function]]s or similar syntax, [[control structure]]s, [[dfn]]-style anonymous functions, [[tacit]] programming, particularly with [[train]]s, [[complex number]]s, arbitrary-precision integers, [[Unicode]] support, and [[namespace]]s or a similar encapsulation feature. The precise syntax and capabilities of these features might differ between dialects that support them.
The following table shows support for various APL features: nesting either with [[box]]es or the [[nested array model]], [[defined function]]s or similar syntax, [[control structure]]s, [[dfn]]-style anonymous functions, [[tacit]] programming, particularly with [[train]]s, [[complex number]]s, arbitrary-precision integers, [[Unicode]] support, and [[namespace]]s or a similar encapsulation feature. The precise syntax and capabilities of these features might differ between dialects that support them.


Dialects included in the first row include [[APL\360]], [[APL\1130]], [[APL*PLUS]] before II, [[APL/700]], [[APL.SV]], [[APL 5100]], [[MCM/70]], [[VS APL]], [[APL\3000]], and [[Aplette]]. [[Extended Dyalog APL]] and [[Dyalog APL Vision]] have the same feature-set as [[Dyalog APL]].
Dialects included in the first row include [[APL\360]], [[APL\1130]], [[APL*PLUS]] before II, [[APL/700]], [[APL.SV]], [[APL 5100]], [[MCM/70]], [[VS APL]], [[APL\3000]], and [[Aplette]]. Dates for [[APL+Win]] include those for APL*PLUS. [[Extended Dyalog APL]] and [[Dyalog APL Vision]] have the same feature set as [[Dyalog APL]].


{|class="wikitable sortable"
{|class="wikitable sortable"
! Dialect                !! Nesting !! [[Tradfn]]s !! [[Control structure|Control]] !! [[Dfn]]s !! [[Tacit]] !! [[Complex]] !! Big int !! Unicode         !! [[Namespace]]
! Dialect                !! Nesting     !! [[Tradfn]]s !! [[Control structure|Control]] !! [[Dfn]]s   !! [[Tacit]]     !! [[Complex]] !! Big int !! [[Unicode]]    !! [[Namespace]]
|-
|-
| [[APL\360]], [[APL.SV]], … || {{No}}       || {{Yes}} || {{No}}            || {{No}}            || {{No}}        || {{No}} || {{No}}  || {{No}}          || {{No}}
| [[APL\360]], [[APL.SV]], … || {{No}}             || {{Yes}} || {{No}}            || {{No}}            || {{No}}        || {{No}}       || {{No}}  || {{No}}          || {{No}}
|-
|-
| [[SHARP APL]]           || {{Yes|Boxes}}   || {{Yes}} || {{No}}           || {{No}}            || {{No}}        || {{Yes}} || {{No}}  || {{No}}          || {{No}}
| [[APL+Win]]             || {{Yes|Nested (1989)}} || {{Yes}} || {{Yes|1994}}     || {{No}}            || {{No}}        || {{No}}       || {{No}}  || {{No}}          || {{Yes|2006}}
|-
|-
| [[NARS]]               || {{Yes|Nested}}  || {{Yes}} || {{No}}            || {{Maybe|[[direct definition (NARS)|direct def]]}}
| [[SHARP APL]]           || {{Yes|Boxes (1981)}}  || {{Yes}} || {{No}}            || {{No}}           || {{No}}        || {{Yes|1981}} || {{No}}  || {{No}}          || {{No}}
                                                                                                  | {{No}}        || {{No}} || {{No}}  || {{No}}          || {{No}}
|-
|-
| [[Dyalog APL]]         || {{Yes|Nested}} || {{Yes}} || {{Yes}}           || {{Yes}}           || {{Yes}}       || {{Yes}} || {{No}}  || {{Yes}}         || {{Yes}}
| [[NARS]]               || {{Yes|Nested}}       || {{Yes}} || {{No}}           || {{Maybe|[[direct definition (operator)|direct def]]}}
                                                                                                        | {{No}}         || {{No}}       || {{No}}  || {{No}}         || {{No}}
|-
|-
| [[APL2]]               || {{Yes|Nested}} || {{Yes}} || {{No}}           || {{No}}           || {{No}}         || {{Yes}} || {{No}}  || {{No}}         || {{Yes}}
| [[Dyalog APL]]         || {{Yes|Nested}}       || {{Yes}} || {{Yes|1996}}     || {{Yes|1996}}     || {{Yes|2014}}   || {{Yes|2011}} || {{No}}  || {{Yes|2008}}   || {{Yes|1994}}
|-
|-
| [[A+]]                 || {{Yes|Boxes}}   || {{Yes}} || {{Yes}}           || {{No}}            || {{Maybe|Some}} || {{No}} || {{No}}  || {{No}}          || {{No}}
| [[APL2]]               || {{Yes|Nested}}       || {{Yes}} || {{No}}           || {{No}}            || {{No}}         || {{Yes}}     || {{No}}  || {{No}}          || {{Yes|1987}}
|-
|-
| [[APL*PLUS II]]         || {{Yes|Nested}} || {{Yes}} || {{No}}           || {{No}}            || {{No}}         || {{No}} || {{No}}  || {{No}}          || {{No}}
| [[A+]]                 || {{Yes|Boxes}}         || {{Yes}} || {{Yes}}           || {{No}}            || {{Maybe|Some}} || {{No}}       || {{No}}  || {{No}}          || {{No}}
|-
|-
| [[SAX]]                || {{Yes|Boxes}}   || {{Yes}} || {{Yes}}          || {{No}}            || {{Maybe|Some}} || {{No}} || {{No}}  || {{No}}          || {{No}}
| [[SAX]]                || {{Yes|Boxes}}         || {{Yes}} || {{Yes}}          || {{No}}            || {{Maybe|Some}} || {{No}}       || {{No}}  || {{No}}          || {{No}}
|-
|-
| [[APL*PLUS III]]       || {{Yes|Nested}} || {{Yes}} || {{Yes}}          || {{No}}            || {{No}}        || {{No}} || {{No}}  || {{No}}          || {{No}}
| [[APL2C]]               || {{Yes|Nested}}       || {{Yes}} || {{Yes}}          || {{No}}            || {{No}}        || {{No}}       || {{No}}  || {{No}}          || {{No}}
|-
|-
| [[APL+Win]]             || {{Yes|Nested}} || {{Yes}} || {{Yes}}          || {{No}}            || {{No}}        || {{No}} || {{No}}  || {{No}}          || {{Yes}}
| [[APLX]]               || {{Yes|Nested}}       || {{Yes}} || {{Yes}}          || {{No}}            || {{No}}        || {{No}}       || {{No}}  || {{No}}          || {{No}}
|-
|-
| [[APLX]]               || {{Yes|Nested}} || {{Yes}} || {{Yes}}          || {{No}}           || {{No}}         || {{No}} || {{No}} || {{No}}         || {{No}}
| [[NARS2000]]           || {{Yes|Nested}}       || {{Yes}} || {{Yes}}          || {{Yes}}           || {{Yes|2009}}   || {{Yes}}     || {{Yes}} || {{Maybe|UCS-2}} || {{No}}
|-
|-
| [[NARS2000]]           || {{Yes|Nested}} || {{Yes}} || {{Yes}}          || {{Yes}}           || {{Yes}}       || {{Yes}} || {{Yes}} || {{Maybe|UCS-2}} || {{No}}
| [[VisualAPL]]           || {{Yes|Nested}}       || {{Yes}} || {{Yes}}          || {{No}}           || {{No}}         || {{No}}       || {{No}} || {{Yes}}         || {{Yes}}
|-
|-
| [[VisualAPL]]           || {{Yes|Nested}} || {{Yes}} || {{Yes}}          || {{No}}           || {{No}}         || {{No}} || {{No}}  || {{Yes}}        || {{Yes}}
| [[APL#]]               || {{Yes|Nested}}       || {{No}} || {{Yes}}          || {{Yes}}           || {{Yes}}       || {{No}}       || {{No}}  || {{Yes}}        || {{Yes}}
|-
|-
| [[APL#]]               || {{Yes|Nested}} || {{No}}  || {{Yes}}           || {{Yes}}          || {{Yes}}        || {{No}} || {{No}}  || {{Yes}}        || {{Yes}}
| [[ngn/apl]]             || {{Yes|Nested}}       || {{No}}  || {{No}}           || {{Yes}}          || {{Yes}}        || {{Yes}}     || {{No}}  || {{Yes}}        || {{No}}
|-
|-
| [[ngn/apl]]            || {{Yes|Nested}} || {{No}} || {{No}}           || {{Yes}}           || {{Yes}}       || {{Yes}} || {{No}}  || {{Yes}}        || {{No}}
| [[GNU APL]]            || {{Yes|Nested}}       || {{Yes}} || {{Maybe|If-else}} || {{Maybe|Limited}} || {{No}}         || {{Yes}}     || {{No}}  || {{Yes}}        || {{Yes}}
|-
|-
| [[GNU APL]]             || {{Yes|Nested}} || {{Yes}} || {{Maybe|If-else}} || {{Maybe|Limited}} || {{No}}         || {{Yes}} || {{No}} || {{Yes}}        || {{Yes}}
| [[April]]               || {{Yes|Nested}}       || {{No}} || {{No}}           || {{Yes}}           || {{Yes}}       || {{Yes}}     || {{Yes}} || {{Yes}}        || {{Yes}}
|-
|-
| [[Co-dfns]]             || {{Yes|Nested}} || {{No}}  || {{No}}            || {{Yes}}          || {{Yes}}        || {{Yes}} || {{No}} || {{Yes}}        || {{Maybe|Partial}}
| [[dzaima/APL]]         || {{Yes|Nested}}       || {{No}}  || {{No}}            || {{Yes}}          || {{Yes}}        || {{No}}       || {{Yes}} || {{Yes}}        || {{Yes}}
|-
|-
| [[April]]               || {{Yes|Nested}} || {{No}}  || {{No}}            || {{Yes}}          || {{Yes}}        || {{Yes}} || {{Yes}} || {{Yes}}        || {{Yes}}
| [[APL\iv]]             || {{Maybe|Lists}}       || {{No}}  || {{No}}            || {{Yes}}          || {{Yes}}        || {{Yes}}     || {{No}} || {{Yes}}        || {{No}}
|-
|-
| [[dzaima/APL]]         || {{Yes|Nested}} || {{No}} || {{No}}           || {{Yes}}          || {{Yes}}        || {{No}} || {{Yes}} || {{Yes}}        || {{Yes}}
| [[Kap]]                 || {{Yes|Nested}}       || {{Yes}} || {{Yes}}           || {{Yes}}          || {{Yes}}        || {{Yes}}     || {{Yes}} || {{Yes}}        || {{Yes}}
|-
|-
| [[APL\iv]]              || {{Maybe|Lists}} || {{No}}  || {{No}}            || {{Yes}}          || {{Yes}}        || {{Yes}} || {{No}}  || {{Yes}}        || {{No}}
| [[APL64]]              || {{Yes|Nested}}       || {{Yes}} || {{Yes}}          || {{No}}            || {{No}}        || {{No}}       || {{No}}  || {{Yes}}        || {{Yes}}
|-
| [[Kap]]                || {{Yes|Nested}}  || {{Yes}} || {{Yes}}          || {{Yes}}          || {{Yes}}        || {{Yes}} || {{Yes}} || {{Yes}}        || {{Yes}}
|-
| [[APL64]]              || {{Yes|Nested}} || {{Yes}} || {{Yes}}          || {{No}}            || {{No}}        || {{No}} || {{No}}  || {{Yes}}        || {{Yes}}
|}
|}


== Development and platform ==
== Development and platform ==


Shown are the release year, year of last release for inactive languages, withdrawal year for discontinued products, developer, implementation language, and host system. Systems capable of being compiled for multiple native hosts are indicated as "portable".
Shown are the release year, year of last release for inactive languages, withdrawal or discontinuation year for products that are no longer available, developer, implementation language, and host system. Systems capable of being compiled for multiple native hosts are indicated as "portable".


{|class="wikitable sortable"
{|class="wikitable sortable"
! Dialect                !! Released !! Inactive      !! Withdrawn    !! Developer                                    !! Language                                                                                                  !! Host
! Dialect                !! Released !! Inactive      !! Dropped      !! Developer                                    !! Language                                                                                                  !! Host
|-
|-
| [[APL\1130]]            || 1968    ||                || {{No|?}}    || [[IBM]]                                      || 1130 assembler                                                                                            || [[wikipedia:IBM 1130|IBM 1130]]
| [[APL\1130]]            || 1968    ||                || {{No|?}}    || [[IBM]]                                      || 1130 assembler                                                                                            || [[wikipedia:IBM 1130|IBM 1130]]
Line 128: Line 131:
| [[SHARP APL]]          || 1976    || {{Maybe|1989}} || {{No|1993?}} || [[IPSA]]                                      ||                                                                                                            || S/370, later portable
| [[SHARP APL]]          || 1976    || {{Maybe|1989}} || {{No|1993?}} || [[IPSA]]                                      ||                                                                                                            || S/370, later portable
|-
|-
| [[APL\3000]]            || 1976    ||                || {{No|?}}     || [[wikipedia:Hewlett-Packard|Hewlett-Packard]] ||                                                                                                            || [[wikipedia:HP 3000|HP 3000]] Series II / III
| [[APL\3000]]            || 1976    ||                || {{No|1980s}} || [[wikipedia:Hewlett-Packard|Hewlett-Packard]] ||                                                                                                            || [[wikipedia:HP 3000|HP 3000]] Series II / III
|-
|-
| [[NARS]]                || 1981    ||                || {{No|1989?}} || [[STSC]]                                      || 370 assembler, APL                                                                                        || [[wikipedia:System/370|System/370]]
| [[NARS]]                || 1981    ||                || {{No|1989?}} || [[STSC]]                                      || 370 assembler, APL                                                                                        || [[wikipedia:System/370|System/370]]
Line 141: Line 144:
|-
|-
| [[APL+Win]]            || 1995    || {{Maybe|2019}} ||              || [[APL2000]]                                  ||                                                                                                            || Portable
| [[APL+Win]]            || 1995    || {{Maybe|2019}} ||              || [[APL2000]]                                  ||                                                                                                            || Portable
|-
| [[APL2C]]              || 2001    || {{Maybe|2002}} ||              || Tilman Otto                                  || [[wikipedia:C (programming language)|C]]                                                                  || Windows 9x/NT/2000
|-
|-
| [[APLX]]                || 2002    || {{Maybe|2016}} || {{No|2016}}  || [[MicroAPL Ltd.]]                            || [[wikipedia:C_(programming_language)|C]], [[wikipedia:C++|C++]]                                            || Portable
| [[APLX]]                || 2002    || {{Maybe|2016}} || {{No|2016}}  || [[MicroAPL Ltd.]]                            || [[wikipedia:C_(programming_language)|C]], [[wikipedia:C++|C++]]                                            || Portable
Line 172: Line 177:
| [[Dyalog APL Vision]]  || 2022    ||                ||              || [[Adám Brudzewsky]]                          || [[Dyalog APL]]                                                                                            || [[Dyalog APL]]
| [[Dyalog APL Vision]]  || 2022    ||                ||              || [[Adám Brudzewsky]]                          || [[Dyalog APL]]                                                                                            || [[Dyalog APL]]
|}
|}
== See also ==
* [[Unicode#Comparison of implementations]]
* [[Take#Extension support]]
* [[Replicate#Extension support]]
* [[Mix#Language support]]
* [[Laminate#Extension support]]
* [[Not#Extensions]]
* [[Interval Index#History]]
* [[Leading axis theory#Adoption in APL]]
* [[Array notation#Comparison of array notations]]
* [[Timeline of APL primitives]]


== External links ==
== External links ==
* [https://omnibar.rubenverg.com Omnibar] lists all glyphs with their meanings and allows custom comparisons between  dialects:[[File:Omnibar|center]]
* [https://omnibar.rubenverg.com Omnibar] lists all glyphs with their meanings and allows custom comparisons between  dialects:[[File:Omnibar|center]]
{{APL dialects}}[[Category:Lists]]
{{APL dialects}}[[Category:Lists]]

Navigation menu