Dyalog APL: Difference between revisions

Jump to navigation Jump to search
2,911 bytes added ,  20:59, 10 September 2022
m
Text replacement - "<source" to "<syntaxhighlight"
(No general release yet)
Tag: Undo
m (Text replacement - "<source" to "<syntaxhighlight")
Tags: Mobile edit Mobile web edit
(4 intermediate revisions by 2 users not shown)
Line 8: Line 8:
| released                = 1983
| released                = 1983
| developer                = [[Dyalog Ltd.]]
| developer                = [[Dyalog Ltd.]]
| latest release version  = 18.0 / 2020
| latest release version  = 18.2 / 2022
| implementation languages = [[wikipedia:C (programming language)|C]], [[wikipedia:C++|C++]], APL
| implementation languages = [[wikipedia:C (programming language)|C]], [[wikipedia:C++|C++]], APL
| platforms                = x86, x86_64, IBM POWER, ARM32
| platforms                = x86, x86_64, IBM POWER, ARM32
Line 32: Line 32:
Work on Dyalog was begun in 1981 by APL consulting company [[Dyadic Systems]], which by that time had grown to support about 15 employees. In partnership with [[wikipedia:Zilog|Zilog]] UK, Dyadic developed an interpreter using the [[wikipedia:C (programming language)|C]] programming language for the [[wikipedia:Zilog Z8000|Zilog Z8000]]'s [[wikipedia:UNIX|UNIX]] operating system—both obscure technologies at the time. Dyadic employees [[John Scholes]] and [[Geoff Streeter]] worked full-time on the implementation, while David Crossley managed its development as a part-time role. Initially aiming to produce something like [[SHARP APL]], they eventually chose a [[Nested array model|nested]] model rather than adding [[box]]es to the [[flat array model]] like SHARP, and drew most design decisions from [[STSC]]'s experimental [[NARS]] dialect and the material available at the time regarding [[IBM]]'s plans for [[APL2]].<ref name="taylor">Stephen Taylor. [http://archive.vector.org.uk/art10013790 "How we got here"]. [[Vector journal]] Volume 23 special supplement "Dyalog at 25". 2008-09.</ref>
Work on Dyalog was begun in 1981 by APL consulting company [[Dyadic Systems]], which by that time had grown to support about 15 employees. In partnership with [[wikipedia:Zilog|Zilog]] UK, Dyadic developed an interpreter using the [[wikipedia:C (programming language)|C]] programming language for the [[wikipedia:Zilog Z8000|Zilog Z8000]]'s [[wikipedia:UNIX|UNIX]] operating system—both obscure technologies at the time. Dyadic employees [[John Scholes]] and [[Geoff Streeter]] worked full-time on the implementation, while David Crossley managed its development as a part-time role. Initially aiming to produce something like [[SHARP APL]], they eventually chose a [[Nested array model|nested]] model rather than adding [[box]]es to the [[flat array model]] like SHARP, and drew most design decisions from [[STSC]]'s experimental [[NARS]] dialect and the material available at the time regarding [[IBM]]'s plans for [[APL2]].<ref name="taylor">Stephen Taylor. [http://archive.vector.org.uk/art10013790 "How we got here"]. [[Vector journal]] Volume 23 special supplement "Dyalog at 25". 2008-09.</ref>


Released at [[APL83]], Dyalog sold very few copies due to the lack of interest in either Unix or the nested array model. Subsequent sales were also limited, with only a single licence sold through Zilog partly due to the Z8000's limited popularity. Supported by Dyadic's APL consulting and later by sales of Unix hardware, Scholes and Streeter continued work on Dyalog by porting it to a wide variety of Unix systems in response to requests from users; in 1995, Scholes was awarded the [[Iverson Award]] jointly with [[Peter Donnelly]] for his work on the Dyalog interpreter. Although it continued to run significant losses every year, Dyalog slowly acquired users during the 1980s, including current client [[wikipedia:SimCorp|SimCorp]]. In 1991, Dyadic hired [[John Daintree]] to begin work on the <source lang=apl inline>⎕WC</source> graphical user interface for [[wikipedia:Microsoft Windows|Microsoft Windows]]; Dyalog for Windows debuted at [[APL92]] and quickly become Dyalog's main platform.<ref name="taylor"/>
Released at [[APL83]], Dyalog sold very few copies due to the lack of interest in either Unix or the nested array model. Subsequent sales were also limited, with only a single licence sold through Zilog partly due to the Z8000's limited popularity. Supported by Dyadic's APL consulting and later by sales of Unix hardware, Scholes and Streeter continued work on Dyalog by porting it to a wide variety of Unix systems in response to requests from users; in 1995, Scholes was awarded the [[Iverson Award]] jointly with [[Peter Donnelly]] for his work on the Dyalog interpreter. Although it continued to run significant losses every year, Dyalog slowly acquired users during the 1980s, including current client [[wikipedia:SimCorp|SimCorp]]. In 1991, Dyadic hired [[John Daintree]] to begin work on the <syntaxhighlight lang=apl inline>⎕WC</syntaxhighlight> graphical user interface for [[wikipedia:Microsoft Windows|Microsoft Windows]]; Dyalog for Windows debuted at [[APL92]] and quickly become Dyalog's main platform.<ref name="taylor"/>


In 1996, John Scholes introduced a new form of functional definition to Dyalog based on his studies of the functional programming language [[wikipedia:Scheme (programming language)|Scheme]], which he called [[dfn]]s, for "direct functions". Another major addition to the language began in 2000, when John Daintree was invited to participate in the design of Microsoft's [[.NET]]. Based on this work, and the [[namespace]]s which he had added to the language in 1994 to deliver a Windows GUI API and an interface to COM/OLE, Daintree developed an [[Object-oriented programming|object]] model for Dyalog, based on concepts from [[wikipedia:C_Sharp_(programming_language)|C#]] and [[wikipedia:Visual Basic]].
In 1996, John Scholes introduced a new form of functional definition to Dyalog based on his studies of the functional programming language [[wikipedia:Scheme (programming language)|Scheme]], which he called [[dfn]]s, for "direct functions". Another major addition to the language began in 2000, when John Daintree was invited to participate in the design of Microsoft's [[.NET]]. Based on this work, and the [[namespace]]s which he had added to the language in 1994 to deliver a Windows GUI API and an interface to COM/OLE, Daintree developed an [[Object-oriented programming|object]] model for Dyalog, based on concepts from [[wikipedia:C_Sharp_(programming_language)|C#]] and [[wikipedia:Visual Basic|Visual Basic]].


In 2005, Dyadic transferred management to CEO [[Gitte Christensen]] and CTO [[Morten Kromberg]], and sold ownership of the company to a group of investors including their company Insight Systems. With this arrangement, the development team at Dyalog grew rapidly. Dfns were promoted as "mainstream" APL features, with the result that many newer APLs only support dfns, abandoning traditional [[defined function]]s completely. Daintree's work on objects resulted in the addition of full object oriented programming capabilities to Dyalog APL in 2006. The influence of the Microsoft's .NET Framework also led to a project to create a new language called [[APL#]], prototypes of which were released in 2010. The project was abandoned in 2012 when Microsoft deprecated [[wikipedia:Microsoft Silverlight|Silverlight]].
In 2005, Dyadic transferred management to CEO [[Gitte Christensen]] and CTO [[Morten Kromberg]], and sold ownership of the company to a group of investors including their company Insight Systems. With this arrangement, the development team at Dyalog grew rapidly. Dfns were promoted as "mainstream" APL features, with the result that many newer APLs only support dfns, abandoning traditional [[defined function]]s completely. Daintree's work on objects resulted in the addition of full object oriented programming capabilities to Dyalog APL in 2006. The influence of the Microsoft's .NET Framework also led to a project to create a new language called [[APL#]], prototypes of which were released in 2010. The project was abandoned in 2012 when Microsoft deprecated [[wikipedia:Microsoft Silverlight|Silverlight]].
Line 83: Line 83:
|                            3.0    || 1985 ||          || (More platforms) Rectangular display of arrays
|                            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>
|                            4.0    || 1986 || October  || User-defined operators, [[Assignment]] for functions (including [[derived function]]s), <syntaxhighlight lang=apl inline>⎕MONITOR</syntaxhighlight>
|-
|-
|                            5.0    || 1987 || April    || Nested array editor
|                            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.1    || 1988 || April    || (first version for DOS) User-defined input/output tables, <syntaxhighlight lang=apl inline>⎕SM</syntaxhighlight> and <syntaxhighlight lang=apl inline>⎕SR</syntaxhighlight>, windowed editor/tracer, interface to GSS/CGI
|-
|-
|                            5.2    || 1990 || January  || Naked trace
|                            5.2    || 1990 || January  || Naked trace
Line 93: Line 93:
|                            6.0    || 1990 || April    || GUI IDE
|                            6.0    || 1990 || April    || GUI IDE
|-
|-
|                            6.1    || 1990 || October  || <source lang=apl inline>⎕ED</source>
|                            6.1    || 1990 || October  || <syntaxhighlight lang=apl inline>⎕ED</syntaxhighlight>
|-
|-
|                            6.2.1  || 1992 || July      || (first version for Windows) <source lang=apl inline>⎕WC</source>, <source lang=apl inline>⎕DQ</source>, etc.
|                            6.2.1  || 1992 || July      || (first version for Windows) <syntaxhighlight lang=apl inline>⎕WC</syntaxhighlight>, <syntaxhighlight lang=apl inline>⎕DQ</syntaxhighlight>, etc.
|-
|-
|                            6.3.1  || 1993 || April    || <source lang=apl inline>⎕NA</source>, graphical, clipboard and printer objects
|                            6.3.1  || 1993 || April    || <syntaxhighlight lang=apl inline>⎕NA</syntaxhighlight>, graphical, clipboard and printer objects
|-
|-
|                            7.0.1  || 1994 || August    || Namespaces, additional GUI 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
|                            7.1    || 1995 || May      || <syntaxhighlight lang=apl inline>⎕CS</syntaxhighlight>, GUI objects as namespaces, greater [[APL2]] compatibility
|-
|-
|                            8.0    || 1996 || May      || [[Control structure|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.0    || 1996 || May      || [[Control structure|Keywords]] (<syntaxhighlight lang=apl inline>:If</syntaxhighlight>/<syntaxhighlight lang=apl inline>:Else</syntaxhighlight>, <syntaxhighlight lang=apl inline>:Repeat</syntaxhighlight>/<syntaxhighlight lang=apl inline>:Until</syntaxhighlight>, <syntaxhighlight lang=apl inline>:Trap</syntaxhighlight>, and so on), <syntaxhighlight lang=apl inline>⎕PATH</syntaxhighlight>, additional GUI objects, OLE
|-
|-
|                            8.1    || 1997 || March    || [[dfn]]s with [[lexical scope]], syntax colouring, TCPSocket object, OLE client/server, automatic file tie numbers
|                            8.1    || 1997 || March    || [[dfn]]s with [[lexical scope]], syntax colouring, TCPSocket object, OLE client/server, automatic file tie numbers
|-
|-
|                            8.2    || 1999 || January  || [[Windowed Reduction]] and [[scalar function]]s with [[Function axis|axis]] (from [[APL2]]), Threading with [[Spawn]] (<source lang=apl inline>&</source>), ActiveX, <source lang=apl inline>:With</source>, additional GUI objects
|                            8.2    || 1999 || January  || [[Windowed Reduction]] and [[scalar function]]s with [[Function axis|axis]] (from [[APL2]]), Threading with [[Spawn]] (<syntaxhighlight lang=apl inline>&</syntaxhighlight>), ActiveX, <syntaxhighlight lang=apl inline>:With</syntaxhighlight>, 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    || 2000 || September || [[Namespace]] [[reference]]s (instead of [[string]] names) and dot syntax, context-sensitive help (F1), aditional GUI objects with animation
Line 117: Line 117:
|                            9.5    || 2002 || September ||
|                            9.5    || 2002 || September ||
|-
|-
| [[Dyalog_APL_versions#10.0|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  
| [[Dyalog_APL_versions#10.0|10.0]]  || 2003 || March    || <syntaxhighlight lang=apl inline>⎕NULL</syntaxhighlight>, <syntaxhighlight lang=apl inline>⎕MAP</syntaxhighlight>, [[idiom recognition]] (mapped files), retained hash tables, [[.NET]] support built-in, run-time workspace as .exe, auto-completion, mapped  
|-
|-
| [[Dyalog_APL_versions#10.1|10.1]]  || 2004 || July      || Multiple arguments in [[tradfn]] headers, thread tokens, 64-bit component files, value tips
| [[Dyalog_APL_versions#10.1|10.1]]  || 2004 || July      || Multiple arguments in [[tradfn]] headers, thread tokens, 64-bit component files, value tips
|-
|-
| [[Dyalog_APL_versions#11.0|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>)
| [[Dyalog_APL_versions#11.0|11.0]]  || 2006 || October  || [[Object-oriented programming]] (classes, objects, interfaces) modelled after [[wikipedia:C-Sharp_|C#]], [[Squad indexing|Index]] (<syntaxhighlight lang=apl inline>⌷</syntaxhighlight>), [[Power operator]] (<syntaxhighlight lang=apl inline>⍣</syntaxhighlight>), [[GCD]] (<syntaxhighlight lang=apl inline>∨</syntaxhighlight>), [[LCM]] (<syntaxhighlight lang=apl inline>∧</syntaxhighlight>)
|-
|-
| [[Dyalog_APL_versions#12.0|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>
| [[Dyalog_APL_versions#12.0|12.0]]  || 2008 || August    || [[Unicode]] support (<syntaxhighlight lang=apl inline>⎕AVU</syntaxhighlight>, <syntaxhighlight lang=apl inline>⎕UCS</syntaxhighlight>), <syntaxhighlight lang=apl inline>⎕FCOPY</syntaxhighlight>, <syntaxhighlight lang=apl inline>⎕FPROPS</syntaxhighlight>
|-
|-
| [[Dyalog_APL_versions#12.1|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 command]]s
| [[Dyalog_APL_versions#12.1|12.1]]  || 2009 || November  || [[I-beam]] (<syntaxhighlight lang=apl inline>⌶</syntaxhighlight>), [[Table]] (<syntaxhighlight lang=apl inline>⍪</syntaxhighlight>), <syntaxhighlight lang=apl inline>⎕XML</syntaxhighlight>, <syntaxhighlight lang=apl inline>⎕FCHK</syntaxhighlight>, [[User command]]s
|-
|-
| [[Dyalog_APL_versions#13.0|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>)
| [[Dyalog_APL_versions#13.0|13.0]]  || 2011 || April    || [[Left]] (<syntaxhighlight lang=apl inline>⊣</syntaxhighlight>), [[Right]] (<syntaxhighlight lang=apl inline>⊢</syntaxhighlight>), [[Variant]] (<syntaxhighlight lang=apl inline>⍠</syntaxhighlight>), <syntaxhighlight lang=apl inline>⎕OPT</syntaxhighlight>, <syntaxhighlight lang=apl inline>⎕R</syntaxhighlight>, <syntaxhighlight lang=apl inline>⎕S</syntaxhighlight>, <syntaxhighlight lang=apl inline>⎕PROFILE</syntaxhighlight>, <syntaxhighlight lang=apl inline>⎕RSI</syntaxhighlight>, [[complex number]] and [[decimal float]] support, short arguments for [[Take]], [[Drop]], and [[Squad indexing|Index]] (<syntaxhighlight lang=apl inline>↑</syntaxhighlight>, <syntaxhighlight lang=apl inline>↓</syntaxhighlight>, <syntaxhighlight lang=apl inline>⌷</syntaxhighlight>)
|-
|-
| [[Dyalog_APL_versions#13.1|13.1]]  || 2012 || April    || <source lang=apl inline>⎕DMX</source>, <source lang=apl inline>⎕FHIST</source>
| [[Dyalog_APL_versions#13.1|13.1]]  || 2012 || April    || <syntaxhighlight lang=apl inline>⎕DMX</syntaxhighlight>, <syntaxhighlight lang=apl inline>⎕FHIST</syntaxhighlight>
|-
|-
| [[Dyalog_APL_versions#13.2|13.2]]  || 2013 || January  || Array [[Editor]]
| [[Dyalog_APL_versions#13.2|13.2]]  || 2013 || January  || Array [[Editor]]
|-
|-
| [[Dyalog_APL_versions#14.0|14.0]]  || 2014 || June      || [[Train]]s, [[Tally]] (<source lang=apl inline>≢</source>), [[Key]] (<source lang=apl inline>⌸</source>), [[Rank operator]] (<source lang=apl inline>⍤</source>), [[High-rank set functions|high-rank]] [[Index Of]], multi-threading with [[future]]s and [[isolate]]s
| [[Dyalog_APL_versions#14.0|14.0]]  || 2014 || June      || [[Train]]s, [[Tally]] (<syntaxhighlight lang=apl inline>≢</syntaxhighlight>), [[Key]] (<syntaxhighlight lang=apl inline>⌸</syntaxhighlight>), [[Rank operator]] (<syntaxhighlight lang=apl inline>⍤</syntaxhighlight>), [[High-rank set functions|high-rank]] [[Index Of]], multi-threading with [[future]]s and [[isolate]]s
|-
|-
| [[Dyalog_APL_versions#14.1|14.1]]  || 2015 || June      || <source lang=apl inline>:Disposable</source> [[.NET]] objects and resources, gesture support, many new I-beams
| [[Dyalog_APL_versions#14.1|14.1]]  || 2015 || June      || <syntaxhighlight lang=apl inline>:Disposable</syntaxhighlight> [[.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      || <syntaxhighlight lang=apl inline>⎕MKDIR</syntaxhighlight>, <syntaxhighlight lang=apl inline>⎕NDELETE</syntaxhighlight>, <syntaxhighlight lang=apl inline>⎕NEXISTS</syntaxhighlight>, <syntaxhighlight lang=apl inline>⎕NGET</syntaxhighlight>, <syntaxhighlight lang=apl inline>⎕NINFO</syntaxhighlight>, <syntaxhighlight lang=apl inline>⎕NPARTS</syntaxhighlight>, <syntaxhighlight lang=apl inline>⎕NPUT</syntaxhighlight>
|-
|-
| [[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]] (<syntaxhighlight lang=apl inline>@</syntaxhighlight>), [[Interval Index]] (<syntaxhighlight lang=apl inline>⍸</syntaxhighlight>), [[Where]] (<syntaxhighlight lang=apl inline>⍸</syntaxhighlight>), [[Nest]] (<syntaxhighlight lang=apl inline>⊆</syntaxhighlight>), [[Partition]] (<syntaxhighlight lang=apl inline>⊆</syntaxhighlight>), [[Stencil]] (<syntaxhighlight lang=apl inline>⌺</syntaxhighlight>), <syntaxhighlight lang=apl inline>⎕JSON</syntaxhighlight>, <syntaxhighlight lang=apl inline>⎕CSV</syntaxhighlight>
|-
|-
| [[Dyalog_APL_versions#17.0|17.0]]  || 2018 || July      || <source lang=apl inline>⎕NCOPY</source>, <source lang=apl inline>⎕NMOVE</source>, [[total array ordering]], high-rank [[Unique]]
| [[Dyalog_APL_versions#17.0|17.0]]  || 2018 || July      || <syntaxhighlight lang=apl inline>⎕NCOPY</syntaxhighlight>, <syntaxhighlight lang=apl inline>⎕NMOVE</syntaxhighlight>, [[total array ordering]], high-rank [[Unique]]
|-
|-
| [[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]] (<syntaxhighlight lang=apl inline>⍸</syntaxhighlight>) look-up array
|-
|-
| [[Dyalog_APL_versions#18.0|18.0]]  || 2020 || June      || [[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>), date-time conversion (<source lang=apl inline>⎕DT</source>), case folding/mapping (<source lang=apl inline>⎕C</source>), launching with text source file, [[.NET]] Core support
| [[Dyalog_APL_versions#18.0|18.0]]  || 2020 || June      || [[Atop]] (<syntaxhighlight lang=apl inline>⍤</syntaxhighlight>), [[Over]] (<syntaxhighlight lang=apl inline>⍥</syntaxhighlight>), [[Constant]] (<syntaxhighlight lang=apl inline>⍨</syntaxhighlight>), [[Unique Mask]] (<syntaxhighlight lang=apl inline>≠</syntaxhighlight>), duplicates from [[Where]] (<syntaxhighlight lang=apl inline>⍸</syntaxhighlight>), empty partitions from [[Partitioned Enclose]] (<syntaxhighlight lang=apl inline>⊂</syntaxhighlight>), date-time conversion (<syntaxhighlight lang=apl inline>⎕DT</syntaxhighlight>), case folding/mapping (<syntaxhighlight lang=apl inline>⎕C</syntaxhighlight>), launching with text source file, [[.NET]] Core support
|-
| [[Dyalog_APL_versions#18.2|18.2]]  || 2022 || March    || <syntaxhighlight lang=apl inline>⎕ATX</syntaxhighlight>, shell scripting
|}
|}


Line 155: Line 157:
! Glyph                              !! Monadic              !! Dyadic
! Glyph                              !! Monadic              !! Dyadic
|-
|-
| <source lang=apl inline>+</source> || [[Conjugate]]        || [[Plus]]
| <syntaxhighlight lang=apl inline>+</syntaxhighlight> || [[Conjugate]]        || [[Plus]]
|-
|-
| <source lang=apl inline>-</source> || [[Negate]]            || [[Minus]]
| <syntaxhighlight lang=apl inline>-</syntaxhighlight> || [[Negate]]            || [[Minus]]
|-
|-
| <source lang=apl inline>×</source> || [[Direction]]        || [[Times]]
| <syntaxhighlight lang=apl inline>×</syntaxhighlight> || [[Direction]]        || [[Times]]
|-
|-
| <source lang=apl inline>÷</source> || [[Reciprocal]]        || [[Divide]]
| <syntaxhighlight lang=apl inline>÷</syntaxhighlight> || [[Reciprocal]]        || [[Divide]]
|-
|-
| <source lang=apl inline>|</source> || [[Magnitude]]        || [[Residue]]
| <syntaxhighlight lang=apl inline>|</syntaxhighlight> || [[Magnitude]]        || [[Residue]]
|-
|-
| <source lang=apl inline>⌊</source> || [[Floor]]            || [[Minimum]]
| <syntaxhighlight lang=apl inline>⌊</syntaxhighlight> || [[Floor]]            || [[Minimum]]
|-
|-
| <source lang=apl inline>⌈</source> || [[Ceiling]]          || [[Maximum]]
| <syntaxhighlight lang=apl inline>⌈</syntaxhighlight> || [[Ceiling]]          || [[Maximum]]
|-
|-
| <source lang=apl inline>*</source> || [[Exponential]]      || [[Power function|Power]]
| <syntaxhighlight lang=apl inline>*</syntaxhighlight> || [[Exponential]]      || [[Power function|Power]]
|-
|-
| <source lang=apl inline>⍟</source> || [[Natural Logarithm]] || [[Logarithm]]
| <syntaxhighlight lang=apl inline>⍟</syntaxhighlight> || [[Natural Logarithm]] || [[Logarithm]]
|-
|-
| <source lang=apl inline>!</source> || [[Factorial]]        || [[Binomial]]
| <syntaxhighlight lang=apl inline>!</syntaxhighlight> || [[Factorial]]        || [[Binomial]]
|-
|-
| <source lang=apl inline>○</source> || [[Pi Times]]          || [[Circle function|Circular]]
| <syntaxhighlight lang=apl inline>○</syntaxhighlight> || [[Pi Times]]          || [[Circle function|Circular]]
|-
|-
| <source lang=apl inline>~</source> || [[Not]]              || [[Without]]
| <syntaxhighlight lang=apl inline>~</syntaxhighlight> || [[Not]]              || [[Without]]
|-
|-
| <source lang=apl inline>?</source> || [[Roll]]              || [[Deal]]
| <syntaxhighlight lang=apl inline>?</syntaxhighlight> || [[Roll]]              || [[Deal]]
|-
|-
| <source lang=apl inline>∧</source> ||                      || [[And]]
| <syntaxhighlight lang=apl inline>∧</syntaxhighlight> ||                      || [[And]]
|-
|-
| <source lang=apl inline>∨</source> ||                      || [[Or]]
| <syntaxhighlight lang=apl inline>∨</syntaxhighlight> ||                      || [[Or]]
|-
|-
| <source lang=apl inline>⍲</source> ||                      || [[Nand]]
| <syntaxhighlight lang=apl inline>⍲</syntaxhighlight> ||                      || [[Nand]]
|-
|-
| <source lang=apl inline>⍱</source> ||                      || [[Nor]]
| <syntaxhighlight lang=apl inline>⍱</syntaxhighlight> ||                      || [[Nor]]
|-
|-
| <source lang=apl inline><</source> ||                      || [[Less]]
| <syntaxhighlight lang=apl inline><</syntaxhighlight> ||                      || [[Less]]
|-
|-
| <source lang=apl inline>≤</source> ||                      || [[Less Or Equal]]
| <syntaxhighlight lang=apl inline>≤</syntaxhighlight> ||                      || [[Less Or Equal]]
|-
|-
| <source lang=apl inline>=</source> ||                      || [[Equal]]
| <syntaxhighlight lang=apl inline>=</syntaxhighlight> ||                      || [[Equal]]
|-
|-
| <source lang=apl inline>≥</source> ||                      || [[Greater Or Equal]]
| <syntaxhighlight lang=apl inline>≥</syntaxhighlight> ||                      || [[Greater Or Equal]]
|-
|-
| <source lang=apl inline>></source> ||                      || [[Greater]]
| <syntaxhighlight lang=apl inline>></syntaxhighlight> ||                      || [[Greater]]
|-
|-
| <source lang=apl inline>≠</source> || [[Unique Mask]]      || [[Not Equal]]
| <syntaxhighlight lang=apl inline>≠</syntaxhighlight> || [[Unique Mask]]      || [[Not Equal]]
|-
|-
| <source lang=apl inline>⍴</source> || [[Shape]]            || [[Reshape]]
| <syntaxhighlight lang=apl inline>⍴</syntaxhighlight> || [[Shape]]            || [[Reshape]]
|-
|-
| <source lang=apl inline>,</source> || [[Ravel]]            || [[Catenate]]
| <syntaxhighlight lang=apl inline>,</syntaxhighlight> || [[Ravel]]            || [[Catenate]]
|-
|-
| <source lang=apl inline>⍪</source> || [[Table]]            || [[Catenate First]]
| <syntaxhighlight lang=apl inline>⍪</syntaxhighlight> || [[Table]]            || [[Catenate First]]
|-
|-
| <source lang=apl inline>⌽</source> || [[Reverse]]          || [[Rotate]]
| <syntaxhighlight lang=apl inline>⌽</syntaxhighlight> || [[Reverse]]          || [[Rotate]]
|-
|-
| <source lang=apl inline>⊖</source> || [[Reverse First]]    || [[Rotate First]]
| <syntaxhighlight lang=apl inline>⊖</syntaxhighlight> || [[Reverse First]]    || [[Rotate First]]
|-
|-
| <source lang=apl inline>⍉</source> ||colspan=2| [[Transpose]]
| <syntaxhighlight lang=apl inline>⍉</syntaxhighlight> ||colspan=2| [[Transpose]]
|-
|-
| <source lang=apl inline>↑</source> || [[Mix]]/[[First]]    || [[Take]]
| <syntaxhighlight lang=apl inline>↑</syntaxhighlight> || [[Mix]]/[[First]]    || [[Take]]
|-
|-
| <source lang=apl inline>↓</source> || [[Split]]            || [[Drop]]
| <syntaxhighlight lang=apl inline>↓</syntaxhighlight> || [[Split]]            || [[Drop]]
|-
|-
| <source lang=apl inline>⊂</source> || [[Enclose]]          || [[Partitioned Enclose]]
| <syntaxhighlight lang=apl inline>⊂</syntaxhighlight> || [[Enclose]]          || [[Partitioned Enclose]]
|-
|-
| <source lang=apl inline>⊆</source> || [[Nest]]              || [[Partition]]
| <syntaxhighlight lang=apl inline>⊆</syntaxhighlight> || [[Nest]]              || [[Partition]]
|-
|-
| <source lang=apl inline>∊</source> || [[Enlist]]/[[Type]]  || [[Membership]]
| <syntaxhighlight lang=apl inline>∊</syntaxhighlight> || [[Enlist]]/[[Type]]  || [[Membership]]
|-
|-
| <source lang=apl inline>⊃</source> || [[First]]/[[Mix]]    || [[Pick]]
| <syntaxhighlight lang=apl inline>⊃</syntaxhighlight> || [[First]]/[[Mix]]    || [[Pick]]
|-
|-
| <source lang=apl inline>/</source> ||                      || [[Replicate]]
| <syntaxhighlight lang=apl inline>/</syntaxhighlight> ||                      || [[Replicate]]
|-
|-
| <source lang=apl inline>⌿</source> ||                      || [[Replicate First]]
| <syntaxhighlight lang=apl inline>⌿</syntaxhighlight> ||                      || [[Replicate First]]
|-
|-
| <source lang=apl inline>\</source> ||                      || [[Expand]]
| <syntaxhighlight lang=apl inline>\</syntaxhighlight> ||                      || [[Expand]]
|-
|-
| <source lang=apl inline>⍀</source> ||                      || [[Expand First]]
| <syntaxhighlight lang=apl inline>⍀</syntaxhighlight> ||                      || [[Expand First]]
|-
|-
| <source lang=apl inline>∩</source> ||                      || [[Intersection]]
| <syntaxhighlight lang=apl inline>∩</syntaxhighlight> ||                      || [[Intersection]]
|-
|-
| <source lang=apl inline>∪</source> || [[Unique]]            || [[Union]]
| <syntaxhighlight lang=apl inline>∪</syntaxhighlight> || [[Unique]]            || [[Union]]
|-
|-
| <source lang=apl inline>⊣</source> || [[Identity|Same]]    || [[Left Identity|Left]]
| <syntaxhighlight lang=apl inline>⊣</syntaxhighlight> || [[Identity|Same]]    || [[Left Identity|Left]]
|-
|-
| <source lang=apl inline>⊢</source> || [[Identity|Same]]    || [[Right Identity|Right]]
| <syntaxhighlight lang=apl inline>⊢</syntaxhighlight> || [[Identity|Same]]    || [[Right Identity|Right]]
|-
|-
| <source lang=apl inline>⍳</source> || [[Index Generator]]  || [[Index Of]]
| <syntaxhighlight lang=apl inline>⍳</syntaxhighlight> || [[Index Generator]]  || [[Index Of]]
|-
|-
| <source lang=apl inline>⍸</source> || [[Where]]            || [[Interval Index]]
| <syntaxhighlight lang=apl inline>⍸</syntaxhighlight> || [[Where]]            || [[Interval Index]]
|-
|-
| <source lang=apl inline>⍒</source> ||colspan=2| [[Grade Down]]
| <syntaxhighlight lang=apl inline>⍒</syntaxhighlight> ||colspan=2| [[Grade Down]]
|-
|-
| <source lang=apl inline>⍋</source> ||colspan=2| [[Grade Up]]
| <syntaxhighlight lang=apl inline>⍋</syntaxhighlight> ||colspan=2| [[Grade Up]]
|-
|-
| <source lang=apl inline>⍷</source> ||                      || [[Find]]
| <syntaxhighlight lang=apl inline>⍷</syntaxhighlight> ||                      || [[Find]]
|-
|-
| <source lang=apl inline>≡</source> || [[Depth]]            || [[Match]]
| <syntaxhighlight lang=apl inline>≡</syntaxhighlight> || [[Depth]]            || [[Match]]
|-
|-
| <source lang=apl inline>≢</source> || [[Tally]]            || [[Not Match]]
| <syntaxhighlight lang=apl inline>≢</syntaxhighlight> || [[Tally]]            || [[Not Match]]
|-
|-
| <source lang=apl inline>⍎</source> ||colspan=2| [[Execute]]
| <syntaxhighlight lang=apl inline>⍎</syntaxhighlight> ||colspan=2| [[Execute]]
|-
|-
| <source lang=apl inline>⍕</source> ||colspan=2| [[Format]]
| <syntaxhighlight lang=apl inline>⍕</syntaxhighlight> ||colspan=2| [[Format]]
|-
|-
| <source lang=apl inline>⊥</source> ||                      || [[Base]]
| <syntaxhighlight lang=apl inline>⊥</syntaxhighlight> ||                      || [[Base]]
|-
|-
| <source lang=apl inline>⊤</source> ||                      || [[Represent]]
| <syntaxhighlight lang=apl inline>⊤</syntaxhighlight> ||                      || [[Represent]]
|-
|-
| <source lang=apl inline>⌹</source> || [[Matrix Inverse]]    || [[Matrix Divide]]
| <syntaxhighlight lang=apl inline>⌹</syntaxhighlight> || [[Matrix Inverse]]    || [[Matrix Divide]]
|-
|-
| <source lang=apl inline>⌷</source> || [[Materialise]]      || [[Index (function)|Index]]
| <syntaxhighlight lang=apl inline>⌷</syntaxhighlight> || [[Materialise]]      || [[Index (function)|Index]]
|}
|}


Line 273: Line 275:
! Syntax                                !! Monadic call        !! Dyadic call
! Syntax                                !! Monadic call        !! Dyadic call
|-
|-
| <source lang=apl inline>f/</source>  || [[Reduction]]      || [[Windowed Reduction]]
| <syntaxhighlight lang=apl inline>f/</syntaxhighlight>  || [[Reduction]]      || [[Windowed Reduction]]
|-
|-
| <source lang=apl inline>f⌿</source>  || [[Reduction First]] || [[Windowed Reduction First]]
| <syntaxhighlight lang=apl inline>f⌿</syntaxhighlight>  || [[Reduction First]] || [[Windowed Reduction First]]
|-
|-
| <source lang=apl inline>f\</source>  || [[Scan]]            ||
| <syntaxhighlight lang=apl inline>f\</syntaxhighlight>  || [[Scan]]            ||
|-
|-
| <source lang=apl inline>f⍀</source>  || [[Scan First]]      ||
| <syntaxhighlight lang=apl inline>f⍀</syntaxhighlight>  || [[Scan First]]      ||
|-
|-
| <source lang=apl inline>f¨</source>  ||colspan=2| [[Each]]
| <syntaxhighlight lang=apl inline>f¨</syntaxhighlight>  ||colspan=2| [[Each]]
|-
|-
| <source lang=apl inline>f⍨</source>  ||colspan=2| [[Commute]]
| <syntaxhighlight lang=apl inline>f⍨</syntaxhighlight>  ||colspan=2| [[Commute]]
|-
|-
| <source lang=apl inline>A⍨</source>  ||colspan=2| [[Constant]]
| <syntaxhighlight lang=apl inline>A⍨</syntaxhighlight>  ||colspan=2| [[Constant]]
|-
|-
| <source lang=apl inline>f⍣v</source>  ||colspan=2| [[Power (operator)|Power]]
| <syntaxhighlight lang=apl inline>f⍣v</syntaxhighlight>  ||colspan=2| [[Power (operator)|Power]]
|-
|-
| <source lang=apl inline>f.g</source>  ||                    || [[Inner Product]]
| <syntaxhighlight lang=apl inline>f.g</syntaxhighlight>  ||                    || [[Inner Product]]
|-
|-
| <source lang=apl inline>∘.f</source>  ||                    || [[Outer Product]]
| <syntaxhighlight lang=apl inline>∘.f</syntaxhighlight>  ||                    || [[Outer Product]]
|-
|-
| <source lang=apl inline>A∘g</source>  ||rowspan=2| [[Bind]]  ||
| <syntaxhighlight lang=apl inline>A∘g</syntaxhighlight>  ||rowspan=2| [[Bind]]  ||
|-
|-
| <source lang=apl inline>f∘B</source>  ||
| <syntaxhighlight lang=apl inline>f∘B</syntaxhighlight>  ||
|-
|-
| <source lang=apl inline>f∘g</source>  ||colspan=2| [[Beside]]
| <syntaxhighlight lang=apl inline>f∘g</syntaxhighlight>  ||colspan=2| [[Beside]]
|-
|-
| <source lang=apl inline>f⍤B</source>  ||colspan=2| [[Rank operator|Rank]]
| <syntaxhighlight lang=apl inline>f⍤B</syntaxhighlight>  ||colspan=2| [[Rank operator|Rank]]
|-
|-
| <source lang=apl inline>f⍤g</source>  ||colspan=2| [[Atop]]
| <syntaxhighlight lang=apl inline>f⍤g</syntaxhighlight>  ||colspan=2| [[Atop]]
|-
|-
| <source lang=apl inline>f⍥g</source>  ||colspan=2| [[Over]]
| <syntaxhighlight lang=apl inline>f⍥g</syntaxhighlight>  ||colspan=2| [[Over]]
|-
|-
| <source lang=apl inline>f@v</source>  ||colspan=2| [[At]]
| <syntaxhighlight lang=apl inline>f@v</syntaxhighlight>  ||colspan=2| [[At]]
|-
|-
| <source lang=apl inline>f⍠B</source>  ||colspan=2| [[Variant]]
| <syntaxhighlight lang=apl inline>f⍠B</syntaxhighlight>  ||colspan=2| [[Variant]]
|-
|-
| <source lang=apl inline>f⌸</source>  ||colspan=2| [[Key]]
| <syntaxhighlight lang=apl inline>f⌸</syntaxhighlight>  ||colspan=2| [[Key]]
|-
|-
| <source lang=apl inline>f⌺B</source>  || [[Stencil]]        ||
| <syntaxhighlight lang=apl inline>f⌺B</syntaxhighlight>  || [[Stencil]]        ||
|-
|-
| <source lang=apl inline>A⌶</source>  ||colspan=2| [[I-beam]]
| <syntaxhighlight lang=apl inline>A⌶</syntaxhighlight>  ||colspan=2| [[I-beam]]
|-
|-
| <source lang=apl inline>f&</source>  ||colspan=2| [[Spawn]]
| <syntaxhighlight lang=apl inline>f&</syntaxhighlight>  ||colspan=2| [[Spawn]]
|-
|-
| <source lang=apl inline>f[B]</source> ||colspan=2| [[Function axis|Axis]]
| <syntaxhighlight lang=apl inline>f[B]</syntaxhighlight> ||colspan=2| [[Function axis|Axis]]
|}
|}


Line 359: Line 361:
* Since [[Dyalog APL versions#14.0|14.0]], [[wikipedia:SSE4.2|SSE4.2]] CRC32 is used to compute fast hash functions.
* Since [[Dyalog APL versions#14.0|14.0]], [[wikipedia:SSE4.2|SSE4.2]] CRC32 is used to compute fast hash functions.
* Since [[Dyalog APL versions#15.0|15.0]], [[wikipedia:BMI2|BMI2]] is used for Boolean matrix transpose. Since [[Dyalog APL versions#16.0|16.0]], it is used for Boolean [[Compress]] and [[Expand]], and several [[structural function]]s on Boolean arrays.
* Since [[Dyalog APL versions#15.0|15.0]], [[wikipedia:BMI2|BMI2]] is used for Boolean matrix transpose. Since [[Dyalog APL versions#16.0|16.0]], it is used for Boolean [[Compress]] and [[Expand]], and several [[structural function]]s on Boolean arrays.
* Since [[Dyalog APL versions#18.0|18.0]], [[wikipedia:CLMUL instruction set|CLMUL]] is used for [[xor]] [[reduction]]s and [[scan]]s.
* In [[Dyalog APL versions#18.0|18.0]] only, [[wikipedia:CLMUL instruction set|CLMUL]] is used for [[xor]] [[reduction]]s and [[scan]]s.
* Since [[Dyalog APL versions#18.0|18.0]], [[wikipedia:FMA instruction set|FMA3]] is used to implement [[Divide|division]] by a [[singleton]].
* In [[Dyalog APL versions#18.0|18.0]] only, [[wikipedia:FMA instruction set|FMA3]] is used to implement [[Divide|division]] by a [[singleton]].


It also uses the POWER8 [https://www.ibm.com/support/knowledgecenter/SSGH2K_13.1.3/com.ibm.xlc1313.aix.doc/compiler_ref/vec_gbb.html gather-bits-by-bytes] instruction, which is equivalent to transposing an 8x8 bit matrix for [[Boolean]] [[Transpose]] since version 15.0 (expanded in applicability in 16.0) and the fused multiply-add instruction for division like x86 FMA3 in 18.0.
It also uses the POWER8 [https://www.ibm.com/support/knowledgecenter/SSGH2K_13.1.3/com.ibm.xlc1313.aix.doc/compiler_ref/vec_gbb.html gather-bits-by-bytes] instruction, which is equivalent to transposing an 8x8 bit matrix for [[Boolean]] [[Transpose]] since version 15.0 (expanded in applicability in 16.0) and the fused multiply-add instruction for division like x86 FMA3 in 18.0.

Navigation menu