Dyalog APL: Difference between revisions
Miraheze>Marshall |
Miraheze>Marshall m (→Versions) |
||
Line 30: | Line 30: | ||
{|class=wikitable | {|class=wikitable | ||
! Number | ! Number !! Year !! Month !! Features | ||
|- | |- | ||
| | | 1 || 1983 || April || (Zilog S8000 only) | ||
|- | |- | ||
| | | 2 || 1984 || || (Many more platforms) | ||
|- | |- | ||
| | | 3.0 || 1985 || || (More platforms) Rectangular display of arrays | ||
|- | |- | ||
| | | 4.0 || 1986 || October || User-defined operators, [[Assignment]] for functions (including [[derived function]]s), <source lang=apl inline>⎕MONITOR</source> | ||
|- | |- | ||
| | | 5.0 || 1987 || April || Nested array editor | ||
|- | |- | ||
| | | 5.1 || 1988 || April || (first version for DOS) User-defined input/output tables, <source lang=apl inline>⎕SM</source> and <source lang=apl inline>⎕SR</source>, windowed editor/tracer, interface to GSS/CGI | ||
|- | |- | ||
| | | 5.2 || 1990 || January || Naked trace | ||
|- | |- | ||
| | | 6.0 || 1990 || April || GUI IDE | ||
|- | |- | ||
| | | 6.1 || 1990 || October || <source lang=apl inline>⎕ED</source> | ||
|- | |- | ||
| | | 6.2.1 || 1992 || July || (first version for Windows) <source lang=apl inline>⎕WC</source>, <source lang=apl inline>⎕DQ</source>, etc. | ||
|- | |- | ||
| | | 6.3.1 || 1993 || April || <source lang=apl inline>⎕NA</source>, graphical, clipboard and printer objects | ||
|- | |- | ||
| | | 7.0.1 || 1994 || August || Namespaces, additional GUI objects | ||
|- | |- | ||
| | | 7.1 || 1995 || May || <source lang=apl inline>⎕CS</source>, GUI objects as namespaces, greater [[APL2]] compatibility | ||
|- | |- | ||
| | | 8.0 || 1996 || May || [[Control structures|Keywords]] (<source lang=apl inline>:If</source>/<source lang=apl inline>:Else</source>, <source lang=apl inline>:Repeat</source>/<source lang=apl inline>:Until</source>, <source lang=apl inline>:Trap</source>, and so on), <source lang=apl inline>⎕PATH</source>, additional GUI objects, OLE | ||
|- | |- | ||
| | | 8.1 || 1997 || March || [[dfns]] with [[lexical scope]], syntax colouring, TCPSocket object, OLE client/server, automatic file tie numbers | ||
|- | |- | ||
| | | 8.2 || 1999 || January || Threading with [[Spawn]] (<source lang=apl inline>&</source>), ActiveX, <source lang=apl inline>:With</source>, more [[APL2]] compatibility, additional GUI objects | ||
|- | |- | ||
| | | 9.0 || 2000 || September || [[Namespace]] [[reference]]s (instead of [[string]] names) and dot syntax, context-sensitive help (F1), aditional GUI objects with animation | ||
|- | |- | ||
| | | 9.0.1 || 2001 || January || (Windows CE) Pocket APL | ||
|- | |- | ||
| | | 9.0.2 || 2002 || January || [[.NET]] support | ||
|- | |- | ||
| | | 9.5 || 2002 || September || | ||
|- | |- | ||
| 10.0 || 2003 || March || <source lang=apl inline>⎕NULL</source>, source lang=apl inline>⎕MAP</source>, [[idiom recognition]] (mapped files), retained hash tables, [[.NET]] support built-in, run-time workspace as .exe, auto-completion, mapped | | 10.0 || 2003 || March || <source lang=apl inline>⎕NULL</source>, <source lang=apl inline>⎕MAP</source>, [[idiom recognition]] (mapped files), retained hash tables, [[.NET]] support built-in, run-time workspace as .exe, auto-completion, mapped | ||
|- | |- | ||
| | | 10.1 || 2004 || July || Multiple arguments in [[tradfn]] headers, thread tokens, 64-bit component files, value tips | ||
|- | |- | ||
| 11.0 || 2006 || October || [[Object oriented programming]] (classes, objects, interfaces) modelled after [[wikipedia:C-Sharp_|C#]], [[Squad indexing|Index]] (<source lang=apl inline>⌷</source>), [[Power operator]] (<source lang=apl inline>⍣</source>), [[GCD]] (<source lang=apl inline>∨</source>), [[LCM]] (<source lang=apl inline>∧</source>) | | 11.0 || 2006 || October || [[Object oriented programming]] (classes, objects, interfaces) modelled after [[wikipedia:C-Sharp_|C#]], [[Squad indexing|Index]] (<source lang=apl inline>⌷</source>), [[Power operator]] (<source lang=apl inline>⍣</source>), [[GCD]] (<source lang=apl inline>∨</source>), [[LCM]] (<source lang=apl inline>∧</source>) | ||
|- | |- | ||
| 12.0 || 2008 || August || [[Unicode]] support (<source lang=apl inline>⎕AVU</source>, <source lang=apl inline>⎕UCS</source>), <source lang=apl inline>⎕FCOPY</source>, <source lang=apl inline>⎕FPROPS</source> | | 12.0 || 2008 || August || [[Unicode]] support (<source lang=apl inline>⎕AVU</source>, <source lang=apl inline>⎕UCS</source>), <source lang=apl inline>⎕FCOPY</source>, <source lang=apl inline>⎕FPROPS</source> | ||
|- | |- | ||
| | | 12.1 || 2009 || November || [[I-Beam]] (<source lang=apl inline>⌶</source>), [[Table]] (<source lang=apl inline>⍪</source>), <source lang=apl inline>⎕XML</source>, <source lang=apl inline>⎕FCHK</source>, [[User commands]] | ||
|- | |- | ||
| 13.0 || 2011 || April || [[Left]] (<source lang=apl inline>⊣</source>), [[Right]] (<source lang=apl inline>⊢</source>), [[Variant]] (<source lang=apl inline>⍠</source>), <source lang=apl inline>⎕OPT</source>, <source lang=apl inline>⎕R</source>, <source lang=apl inline>⎕S</source>, <source lang=apl inline>⎕PROFILE</source>, <source lang=apl inline>⎕RSI</source>, [[complex number]] and [[decimal float]] support, short arguments for [[Take]], [[Drop]], and [[Squad indexing|Index]] (<source lang=apl inline>↑</source>, <source lang=apl inline>↓</source>, <source lang=apl inline>⌷</source>) | | 13.0 || 2011 || April || [[Left]] (<source lang=apl inline>⊣</source>), [[Right]] (<source lang=apl inline>⊢</source>), [[Variant]] (<source lang=apl inline>⍠</source>), <source lang=apl inline>⎕OPT</source>, <source lang=apl inline>⎕R</source>, <source lang=apl inline>⎕S</source>, <source lang=apl inline>⎕PROFILE</source>, <source lang=apl inline>⎕RSI</source>, [[complex number]] and [[decimal float]] support, short arguments for [[Take]], [[Drop]], and [[Squad indexing|Index]] (<source lang=apl inline>↑</source>, <source lang=apl inline>↓</source>, <source lang=apl inline>⌷</source>) | ||
|- | |- | ||
| | | 13.1 || 2012 || April || <source lang=apl inline>⎕DMX</source>, <source lang=apl inline>⎕FHIST</source> | ||
|- | |- | ||
| | | 13.2 || 2013 || January || Array [[Editor]] | ||
|- | |- | ||
| 14.0 || 2014 || June || [[Trains]], [[Tally]] (<source lang=apl inline>≢</source>), [[Key]] (<source lang=apl inline>⌸</source>), [[Rank operator]] (<source lang=apl inline>⍤</source>), multi-threading with [[futures]] and [[isolates]] | | 14.0 || 2014 || June || [[Trains]], [[Tally]] (<source lang=apl inline>≢</source>), [[Key]] (<source lang=apl inline>⌸</source>), [[Rank operator]] (<source lang=apl inline>⍤</source>), multi-threading with [[futures]] and [[isolates]] | ||
|- | |- | ||
| | | 14.1 || 2015 || June || <source lang=apl inline>:Disposable</source> [[.NET]] objects and resources, gesture support, many new I-beams | ||
|- | |- | ||
|[[Dyalog_APL_versions#15.0|15.0]]|| 2016 || June || <source lang=apl inline>⎕MKDIR</source>, <source lang=apl inline>⎕NDELETE</source>, <source lang=apl inline>⎕NEXISTS</source>, <source lang=apl inline>⎕NGET</source>, <source lang=apl inline>⎕NINFO</source>, <source lang=apl inline>⎕NPARTS</source>, <source lang=apl inline>⎕NPUT</source> | | [[Dyalog_APL_versions#15.0|15.0]] || 2016 || June || <source lang=apl inline>⎕MKDIR</source>, <source lang=apl inline>⎕NDELETE</source>, <source lang=apl inline>⎕NEXISTS</source>, <source lang=apl inline>⎕NGET</source>, <source lang=apl inline>⎕NINFO</source>, <source lang=apl inline>⎕NPARTS</source>, <source lang=apl inline>⎕NPUT</source> | ||
|- | |- | ||
| [[Dyalog_APL_versions#16.0|16.0]]|| 2017 || June || [[At]] (<source lang=apl inline>@</source>), [[Interval Index]] (<source lang=apl inline>⍸</source>), [[Where]] (<source lang=apl inline>⍸</source>), [[Nest]] (<source lang=apl inline>⊆</source>), [[Partition]] (<source lang=apl inline>⊆</source>), [[Stencil]] (<source lang=apl inline>⌺</source>), <source lang=apl inline>⎕JSON</source>, <source lang=apl inline>⎕CSV</source> | | [[Dyalog_APL_versions#16.0|16.0]] || 2017 || June || [[At]] (<source lang=apl inline>@</source>), [[Interval Index]] (<source lang=apl inline>⍸</source>), [[Where]] (<source lang=apl inline>⍸</source>), [[Nest]] (<source lang=apl inline>⊆</source>), [[Partition]] (<source lang=apl inline>⊆</source>), [[Stencil]] (<source lang=apl inline>⌺</source>), <source lang=apl inline>⎕JSON</source>, <source lang=apl inline>⎕CSV</source> | ||
|- | |- | ||
|[[Dyalog_APL_versions#17.0|17.0]]|| 2018 || July || <source lang=apl inline>⎕NCOPY</source>, <source lang=apl inline>⎕NMOVE</source> | | [[Dyalog_APL_versions#17.0|17.0]] || 2018 || July || <source lang=apl inline>⎕NCOPY</source>, <source lang=apl inline>⎕NMOVE</source> | ||
|- | |- | ||
|[[Dyalog_APL_versions#17.1|17.1]]|| 2019 || October || Duplicates in [[Interval Index]] (<source lang=apl inline>⍸</source>) look-up array | | [[Dyalog_APL_versions#17.1|17.1]] || 2019 || October || Duplicates in [[Interval Index]] (<source lang=apl inline>⍸</source>) look-up array | ||
|- | |- | ||
|[[Dyalog_APL_versions#15.0|18.0]]||colspan=2| Unreleased || [[Atop]] (<source lang=apl inline>⍤</source>), [[Over]] (<source lang=apl inline>⍥</source>), [[Constant]] (<source lang=apl inline>⍨</source>), [[Unique Mask]] (<source lang=apl inline>≠</source>), duplicates from [[Where]] (<source lang=apl inline>⍸</source>), empty partitions from partitioned enclose (<source lang=apl inline>⊂</source>), multi-line session input, date-time conversion, case folding/mapping (<source lang=apl inline>⎕C</source>) | | [[Dyalog_APL_versions#15.0|18.0]] ||colspan=2| Unreleased || [[Atop]] (<source lang=apl inline>⍤</source>), [[Over]] (<source lang=apl inline>⍥</source>), [[Constant]] (<source lang=apl inline>⍨</source>), [[Unique Mask]] (<source lang=apl inline>≠</source>), duplicates from [[Where]] (<source lang=apl inline>⍸</source>), empty partitions from partitioned enclose (<source lang=apl inline>⊂</source>), multi-line session input, date-time conversion, case folding/mapping (<source lang=apl inline>⎕C</source>) | ||
|} | |} | ||
Revision as of 09:35, 13 November 2019
Dyalog APL, or simply Dyalog, is a modern APL in the APL2 tradition, first released by British company Dyadic Systems Ltd. (now Dyalog Ltd.) in 1983 for the Zylog Z80 processor (the name Dyalog is a portmanteau of Dyadic and Zylog). Dyalog supports several platforms and interfaces with many languages and runtimes including native shared libraries, .NET, the JVM, R, and Python. It is actively developed and has introduced many new primitives and concepts to array programming. Major categories of features introduced to APL by Dyalog are tacit programming by allowing named derived functions and later trains, lexically-scoped functional programming using dfns, namespaces and object-oriented programming, and the addition of leading axis theory and the Rank operator to the nested array paradigm.
In 1995, two Dyalog developers—John Scholes and Peter Donnelly—were awarded the Iverson Award for their work on the interpreter. Gitte Christensen and Morten Kromberg were joint recipients of the Iverson Award in 2016.
Versions
- Main article: Dyalog APL versions
Dyalog lists historical versions, along with release notes since 14.0, on its website. Its early history is recounted in more detail by Pete Donnelly in Dyalog APL: A Personal History (pdf).
Number | Year | Month | Features |
---|---|---|---|
1 | 1983 | April | (Zilog S8000 only) |
2 | 1984 | (Many more platforms) | |
3.0 | 1985 | (More platforms) Rectangular display of arrays | |
4.0 | 1986 | October | User-defined operators, Assignment for functions (including derived functions), ⎕MONITOR
|
5.0 | 1987 | April | Nested array editor |
5.1 | 1988 | April | (first version for DOS) User-defined input/output tables, ⎕SM and ⎕SR , windowed editor/tracer, interface to GSS/CGI
|
5.2 | 1990 | January | Naked trace |
6.0 | 1990 | April | GUI IDE |
6.1 | 1990 | October | ⎕ED
|
6.2.1 | 1992 | July | (first version for Windows) ⎕WC , ⎕DQ , etc.
|
6.3.1 | 1993 | April | ⎕NA , graphical, clipboard and printer objects
|
7.0.1 | 1994 | August | Namespaces, additional GUI objects |
7.1 | 1995 | May | ⎕CS , GUI objects as namespaces, greater APL2 compatibility
|
8.0 | 1996 | May | Keywords (:If /:Else , :Repeat /:Until , :Trap , and so on), ⎕PATH , additional GUI objects, OLE
|
8.1 | 1997 | March | dfns with lexical scope, syntax colouring, TCPSocket object, OLE client/server, automatic file tie numbers |
8.2 | 1999 | January | Threading with Spawn (& ), ActiveX, :With , more APL2 compatibility, additional GUI objects
|
9.0 | 2000 | September | Namespace references (instead of string names) and dot syntax, context-sensitive help (F1), aditional GUI objects with animation |
9.0.1 | 2001 | January | (Windows CE) Pocket APL |
9.0.2 | 2002 | January | .NET support |
9.5 | 2002 | September | |
10.0 | 2003 | March | ⎕NULL , ⎕MAP , idiom recognition (mapped files), retained hash tables, .NET support built-in, run-time workspace as .exe, auto-completion, mapped
|
10.1 | 2004 | July | Multiple arguments in tradfn headers, thread tokens, 64-bit component files, value tips |
11.0 | 2006 | October | Object oriented programming (classes, objects, interfaces) modelled after C#, Index (⌷ ), Power operator (⍣ ), GCD (∨ ), LCM (∧ )
|
12.0 | 2008 | August | Unicode support (⎕AVU , ⎕UCS ), ⎕FCOPY , ⎕FPROPS
|
12.1 | 2009 | November | I-Beam (⌶ ), Table (⍪ ), ⎕XML , ⎕FCHK , User commands
|
13.0 | 2011 | April | Left (⊣ ), Right (⊢ ), Variant (⍠ ), ⎕OPT , ⎕R , ⎕S , ⎕PROFILE , ⎕RSI , complex number and decimal float support, short arguments for Take, Drop, and Index (↑ , ↓ , ⌷ )
|
13.1 | 2012 | April | ⎕DMX , ⎕FHIST
|
13.2 | 2013 | January | Array Editor |
14.0 | 2014 | June | Trains, Tally (≢ ), Key (⌸ ), Rank operator (⍤ ), multi-threading with futures and isolates
|
14.1 | 2015 | June | :Disposable .NET objects and resources, gesture support, many new I-beams
|
15.0 | 2016 | June | ⎕MKDIR , ⎕NDELETE , ⎕NEXISTS , ⎕NGET , ⎕NINFO , ⎕NPARTS , ⎕NPUT
|
16.0 | 2017 | June | At (@ ), Interval Index (⍸ ), Where (⍸ ), Nest (⊆ ), Partition (⊆ ), Stencil (⌺ ), ⎕JSON , ⎕CSV
|
17.0 | 2018 | July | ⎕NCOPY , ⎕NMOVE
|
17.1 | 2019 | October | Duplicates in Interval Index (⍸ ) look-up array
|
18.0 | Unreleased | Atop (⍤ ), Over (⍥ ), Constant (⍨ ), Unique Mask (≠ ), duplicates from Where (⍸ ), empty partitions from partitioned enclose (⊂ ), multi-line session input, date-time conversion, case folding/mapping (⎕C )
|
Primitives
Functions
Glyph | Monadic | Dyadic |
---|---|---|
+ |
Conjugate | Plus |
- |
Negate | Minus |
× |
Signum | Times |
÷ |
Reciprocal | Divide |
| |
Magnitude | Residue |
⌊ |
Floor | Minimum |
⌈ |
Ceiling | Maximum |
* |
Exponential | Power |
⍟ |
Natural Logarithm | Logarithm |
! |
Factorial | Binomial |
○ |
Pi Times | Circular |
~ |
Not | Without |
? |
Roll | Query |
∧ |
And | |
∨ |
Or | |
⍲ |
Nand | |
⍱ |
Nor | |
< |
Less | |
≤ |
Less Or Equal | |
= |
Equal | |
≥ |
Greater Or Equal | |
> |
Greater | |
≠ |
Unique Mask | Not Equal |
⍴ |
Shape | Reshape |
, |
Ravel | Catenate |
⍪ |
Table | Catenate First |
⌽ |
Reverse | Rotate |
⊖ |
Reverse First | Rotate First |
⍉ |
Transpose | |
↑ |
Mix/Disclose | Take |
↓ |
Split | Drop |
⊂ |
Enclose | Partitioned Enclose |
⊆ |
Nest | Partition |
∊ |
Enlist/Type | Membership |
⊃ |
Disclose/Mix | Pick |
/ |
Replicate | |
⌿ |
Replicate First | |
\ |
Expand | |
⍀ |
Expand First | |
∩ |
Intersection | |
∪ |
Unique | Union |
⊣ |
Same | Left |
⊢ |
Same | Right |
⍳ |
Index Generator | Index Of |
⍸ |
Where | Interval Index |
⍒ |
Grade Down | |
⍋ |
Grade Up | |
⍷ |
Find | |
≡ |
Depth | Match |
≢ |
Tally | Not Match |
⍎ |
Execute | |
⍕ |
Format | |
⊥ |
Base | |
⊤ |
Represent | |
⌹ |
Matrix Inverse | Matrix Divide |
⌷ |
Materialise | Squad Indexing |
Operators
Syntax | Monadic call | Dyadic call |
---|---|---|
f/ |
Reduction | Windowed Reduction |
f⌿ |
Reduction First | Windowed Reduction First |
f\ |
Scan | |
f⍀ |
Scan First | |
f¨ |
Each | |
f⍨ |
Commute | |
A⍨ |
Constant | |
f⍣v |
Power | |
f.g |
Inner Product | |
∘.f |
Outer Product | |
A∘g |
Bind | |
f∘B |
||
f∘g |
Beside | |
f⍤B |
Rank | |
f⍤g |
Atop | |
f⍥g |
Over | |
f@v |
At | |
f⍠B |
Variant | |
f⌸ |
Key | |
f⌺B |
Stencil | |
A⌶ |
I-Beam | |
f& |
Spawn | |
f[B] |
Axis |