Comparison of APL dialects: Difference between revisions

Jump to navigation Jump to search
m
 
(10 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}}
|}
|}


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