Dyalog APL: Difference between revisions

Jump to navigation Jump to search
1,504 bytes added ,  10:50, 20 April 2021
m
(→‎Versions: 18.0 released)
(8 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Infobox array language
{{Infobox array language
| logo                    = [[File:Dyalog icon.png|width:]]
| array model              = [[nested array model|nested]]
| array model              = [[nested array model|nested]]
| index origin            = 0 or 1
| index origin            = 0 or 1
Line 7: Line 8:
| released                = 1983
| released                = 1983
| developer                = [[Dyalog Ltd.]]
| developer                = [[Dyalog Ltd.]]
| latest release version  = 17.1 / 2019
| latest release version  = 18.0 / 2020
| 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
| operating systems        = Windows, Linux, macOS, AIX
| operating systems        = Windows, Linux, macOS, AIX
| license                  = Free for personal use / Proprietary commercial software
| license                  = Free for personal use / Proprietary commercial software
| website                  = [https://www.dyalog.com/dyalog/index.htm dyalog.com/dyalog/index.htm]
| website                  = [https://www.dyalog.com/dyalog/index.htm dyalog.com]
| download                = [https://www.dyalog.com/download-zone.htm Non-commercial download]
| download                = [https://www.dyalog.com/download-zone.htm Non-commercial download]
| forum                    = [https://forums.dyalog.com/ Dyalog Forums]
| forum                    = [https://forums.dyalog.com/ Dyalog Forums]
Line 18: Line 19:
| documentation            = [https://docs.dyalog.com/ Documentation Centre]
| documentation            = [https://docs.dyalog.com/ Documentation Centre]
| influenced by            = [[NARS]], [[APL2]], [[J]], [[SHARP APL]], [[wikipedia:Scheme (programming language)|Scheme]], [[wikipedia:C_Sharp_(programming_language)|C#]]
| influenced by            = [[NARS]], [[APL2]], [[J]], [[SHARP APL]], [[wikipedia:Scheme (programming language)|Scheme]], [[wikipedia:C_Sharp_(programming_language)|C#]]
| influenced              = [[NARS2000]], [[GNU APL]], [[ngn/apl]], [[dzaima/APL]], [[APL\iv]]
| influenced              = [[NARS2000]], [[GNU APL]], [[ngn/apl]], [[dzaima/APL]], [[APL\iv]], [[BQN]]
| run online              = [https://tryapl.org/ TryAPL]
| run online              = [https://tryapl.org/ TryAPL]
}}
}}
:''"Dyalog" redirects here. For the company, see [[Dyalog Ltd.]]''
:''"Dyalog" redirects here. For the company, see [[Dyalog Ltd.]]''
<!-- :''For the chat bot, see [[APL Orchard#Chat bot]].'' -->
<!-- :''For the chat bot, see [[APL Orchard#Chat bot]].'' -->
'''Dyalog APL''', or simply '''Dyalog''', is a [[Nested array model|nested]] APL based on [[NARS]] and [[APL2]], first released by British company [[Dyalog Ltd.|Dyadic Systems Ltd.]] (now Dyalog Ltd.) in 1983 for the [[wikipedia:Zilog Z8000|Zilog Z8000]] processor (the name ''Dyalog'' is a portmanteau of ''Dyadic'' and ''Zilog''). Continuously developed since, Dyalog has added support for many programming paradigms including [[object-oriented programming]] based on [[.NET]], [[wikipedia:Lisp (programming language)|Lisp]]-style lexically scoped anonymous functions ([[dfn]]s), and [[Leading axis theory|leading axis]] and [[tacit programming]] support based on [[J]]. It supports several platforms and interoperability between them, and interfaces with other languages and runtimes including native [[wikipedia:Shared library|shared libraries]], [[.NET]], the [[wikipedia:Java virtual machine|JVM]], [[wikipedia:R (programming language)|R]], and [[wikipedia:Python (programming language)|Python]].
'''Dyalog APL''', or simply '''Dyalog''', is a [[Nested array model|nested]] APL based on [[NARS]] and [[APL2]], first released by British company [[Dyalog Ltd.|Dyadic Systems Ltd.]] (now Dyalog Ltd.) in 1983 for the [[wikipedia:Zilog Z8000|Zilog Z8000]] processor. (The name ''Dyalog'' is a portmanteau of ''Dyadic'' and ''Zilog''). Continuously developed since, Dyalog has added support for many programming paradigms including [[object-oriented programming]] based on [[.NET]], [[wikipedia:Lisp (programming language)|Lisp]]-style lexically scoped anonymous functions ([[dfn]]s), and [[Leading axis theory|leading axis]] and [[tacit programming]] support based on [[J]]. It supports several platforms and interoperability between them, and interfaces with other languages and runtimes including native [[wikipedia:Shared library|shared libraries]], [[.NET]], the [[wikipedia:Java virtual machine|JVM]], [[wikipedia:R (programming language)|R]], and [[wikipedia:Python (programming language)|Python]].


Although it initially received very little commercial interest, Dyalog has steadily grown in prominence and in the 2010s has been the basis of several new APL dialects including [[ngn/apl]], [[APL\iv]], and [[dzaima/APL]]. Even in APLs not derived from Dyalog such as [[GNU APL]] and [[NARS2000]], [[dfn]]-style function syntax has become common, and Dyalog has also popularised [[SHARP APL]] and [[J]] innovations such as the [[Rank operator]] and [[train]]s among nested APLs.
Although it initially received very little commercial interest, Dyalog has steadily grown in prominence and in the 2010s has been the basis of several new APL dialects including [[ngn/apl]], [[APL\iv]], and [[dzaima/APL]]. Even in APLs not derived from Dyalog such as [[GNU APL]] and [[NARS2000]], [[dfn]]-style function syntax has become common, and Dyalog has also popularised [[SHARP APL]] and [[J]] innovations such as the [[Rank operator]] and [[train]]s among nested APLs.
Line 33: Line 34:
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 <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"/>


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". Rarely used for many years, dfns have become a common APL feature, with many newer APLs removing traditional [[defined function]]s from the language in favour of dfns. 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, Daintree developed an [[Object-oriented programming|object]] model for Dyalog, which was released in 2006. These efforts also led to the new language called [[APL#]], which was first released in 2010 but abandoned in 2012 when Microsoft deprecated [[wikipedia:Microsoft Silverlight|Silverlight]].
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 the 2010s, Dyalog development began to focus on performance, which had been improved out of necessity in early releases but had not been a major focus. In 2010 Dyalog Ltd. hired [[Jay Foad]], a compiler developer who initially created a bytecode compiler for APL and later improved performance in other ways, and served as CTO from 2016 until his departure in 2019. In 2011 the company hired [[Roger Hui]], developer of [[J]], and in 2016 it also hired J programmer and language implementor [[Marshall Lochbaum]]. Both developers improved performance of Dyalog's primitives on flat arrays, and brought concepts such as the [[Rank operator]], [[train]]s, and composition operators [[Atop]] and [[Over]] from J to APL.
In 2005, the management of Dyadic Systems (John Scholes, Peter Donnelly and Pauline Brand) wished to retire from their management roles. At that time, the part of the business that had been built around the sales and service of [[IBM]] UNIX hardware had grown larger than the APL interpreter business, and the two parts were sold separately. The UNIX business was sold to Syan Technology Ltd and the APL business, renamed Dyalog Ltd, was sold to a consortium of users, who recruited [[Gitte Christensen]] as CEO and [[Morten Kromberg]] as the new CTO. John Scholes continued as a member of the development team, and Peter Donnelly continued to write most of the language documentation.
 
Under the new management, 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 addition to functional and object oriented language features, Dyalog APL folded concepts and features from the [[SHARP APL]] and [[J]] side of the APL family tree back into what fundamentally remains a dialect of APL2. In 2011 the company hired [[Roger Hui]], developer of J, and in 2016 it also hired J programmer and language implementer [[Marshall Lochbaum]]. Both developers improved performance of Dyalog's primitives on flat arrays, and brought concepts such as the [[Rank (operator)|Rank operator]], [[trains]], and [[Function composition|composition operators]], namely [[Atop]] and [[Over]], from J to APL.
 
In the 2010s, Dyalog development began to focus on performance, which had been improved out of necessity in early releases but had not been a major focus. In 2010 Dyalog Ltd. hired [[Jay Foad]], a compiler developer who initially created a bytecode compiler for APL and later improved performance in other ways, and served as CTO from 2016 until his departure in 2019. Hui and Lochbaum also improved performance of Dyalog's primitives on [[Simple array|flat arrays]].


The Dyalog interpreter has also incorporated significant components written in APL in the 2000s and 2010s. [[Dan Baronet]], hired in 2006, introduced the SALT (Simple APL Library Toolkit) system to distribute APL code, and [[user command]]s based on it, in [[Dyalog APL 12.0|version 12.0]] in 2008. Work on APL components of Dyalog has also been done by [[Brian Becker]] and [[Adám Brudzewsky]]. Brudzewsky, hired in 2015, has also driven the adoption of new functionality such as [[Nest]] and [[array notation]] in Dyalog.
The Dyalog interpreter has also incorporated significant components written in APL in the 2000s and 2010s. [[Dan Baronet]], hired in 2006, introduced the SALT (Simple APL Library Toolkit) system to distribute APL code, and [[user command]]s based on it, in [[Dyalog APL 12.0|version 12.0]] in 2008. Work on APL components of Dyalog has also been done by [[Brian Becker]] and [[Adám Brudzewsky]]. Brudzewsky, hired in 2015, has also driven the adoption of new functionality such as [[Nest]] and [[array notation]] in Dyalog.
Line 112: Line 119:
|                            9.5    || 2002 || September ||
|                            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  
| [[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  
|-
|-
|                           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]] (<source lang=apl inline>⌷</source>), [[Power operator]] (<source lang=apl inline>⍣</source>), [[GCD]] (<source lang=apl inline>∨</source>), [[LCM]] (<source lang=apl inline>∧</source>)
Line 361: Line 368:
== External links ==
== External links ==


* [https://tryapl.org Try APL]
* [https://tryapl.org TryAPL]
* [https://tio.run/#apl-dyalog Try It Online]
* [https://tio.run/#apl-dyalog Try It Online]
* [https://dyalog.com Download]
* [https://dyalog.com Download]

Navigation menu