Dyalog APL versions: Difference between revisions

Jump to navigation Jump to search
2,964 bytes added ,  12:01, 22 November 2019
m (12 revisions imported: Migrate from miraheze)
Line 1: Line 1:
[[Dyalog APL]] is released in numbered versions, with approximately one version per year. Each release version is classified as a major (.0) or minor (point) release, depending on whether the major version number is incremented. Major versions are more likely to introduce new features and may spend longer in development.
[[Dyalog APL]] is released in numbered versions, with approximately one version per year. Each release version is classified as a major (.0) or minor (point) release, depending on whether the major version number is incremented. Major versions are more likely to introduce new features and may spend longer in development.
<!-- 13.0?
A [[primitive operator]] (<source lang=apl inline>⍠</source>) was introduced as an alternative spelling of the existing system operator [[Variant]] (<source lang=apl inline>⎕OPT</source>), with a functionality similar to one sketched by [[Ken Iverson]] (<source lang=apl inline>:</source>)<ref>Kenneth E. Iverson, [https://www.jsoftware.com/papers/APLDictionary.htm A Dictionary of APL], VI. Conjunctions, [https://www.jsoftware.com/papers/APLDictionary1.htm#colon Custom]. APL Quote Quad, Volume 18, Number 1, 1987-09.</ref> and implemented in J (<source lang=j inline>!.</source>).
-->


== 14.0 ==
== 14.0 ==
Line 7: Line 11:
Version 14.0 was released in June 2014. It featured extensive changes to the Dyalog APL language as well as its implementation.
Version 14.0 was released in June 2014. It featured extensive changes to the Dyalog APL language as well as its implementation.


Under the guidance of [[Roger Hui]], who had been hired by [[Dyalog Ltd.]] in 2011, this release began the adoption of array programming's [[leading axis model]], which had already been implemented in [[J]]. Three J built-ins, [[Tally]] (<source lang=apl inline>≢</source>), [[Key]] (<source lang=apl inline>⌸</source>), and the [[Rank operator]] (<source lang=apl inline>⍤</source>), together with support for [[Function train]]s.
Under the direction of [[Roger Hui]], who had been hired by [[Dyalog Ltd.]] in 2011, several features adapted from [[J]] were added. Version 14.0 began the adoption in Dyalog APL of array programming's [[leading axis model]], with built-ins [[Tally]] (<source lang=apl inline>≢</source>), [[Key]] (<source lang=apl inline>⌸</source>), and the [[Rank operator]] (<source lang=apl inline>⍤</source>). [[Function train]]s, another J feature, were also introduced. Of these, Rank differs from J's definition because it does not allow complete [[leading axis agreement]]—instead, two arguments must have identical [[frame]]s or one frame must be empty—and Key has an added monadic case, and differs in that the operand is passed a left argument indicating the unique element used.
 
Further changes were made in conjunction with the introduction of [[Rank operator|Rank]] and [[leading axis theory]]. [[Index Of]] was [[High-rank set functions|extended]] (as in [[J]]) to allow a left argument of [[rank]] greater than 1, searching [[major cell]]s of the left argument. [[Mix]] was extended to increase the rank of each element in its argument to a common rank, rather than giving a [[RANK ERROR]] if they had unequal ranks. This change brought the behavior of Mix into alignment with the result array combination used by the [[Rank operator]] and [[Key]]. An unrelated change was to extend Mix with [[Function axis|axis]] to allow the axis to be a [[vector]] indicating the final positions of each axis of the argument elements (rather than only a [[singleton]] indicating the position of the first axis). This change was made to apply only with a [[migration level]] setting of at least 2; it was extended to all migration levels in [[#18.0|version 18.0]].


A [[primitive operator]] (<source lang=apl inline>⍠</source>) was introduced as an alternative spelling of the existing system operator [[Variant]] (<source lang=apl inline>⎕OPT</source>), with a functionality similar to one sketched by [[Ken Iverson]] (<source lang=apl inline>:</source>)<ref>Kenneth E. Iverson, [https://www.jsoftware.com/papers/APLDictionary.htm A Dictionary of APL], VI. Conjunctions, [https://www.jsoftware.com/papers/APLDictionary1.htm#colon Custom]. APL Quote Quad, Volume 18, Number 1, 1987-09.</ref> and implemented in J (<source lang=j inline>!.</source>).
This version allowed [[monadic operator]]s to be manipulated more easily: beginning in 14.0, they can be [[Assignment|named]], grouped with parentheses, and displayed in the [[session]]. It also introduced a new way to form a monadic operator called [[right operand currying]]: a [[dyadic operator]] along with an [[operand]] to its right produces a [[derived operator]]. These changes did not extend to naming, parenthesizing, or displaying dyadic operators, nor to binding a left operant to a dyadic operator.
 
Performance improvements to existing features were focused on [[Boolean]] arrays but also included work on [[indexing]] and [[scan]]s. A new [[I-beam]], <source lang=apl inline>8⌶</source>, was introduced to allow fast lookups on [[inverted table]]s, paralleling the extension to [[Index Of]] to allow lookups on non-inverted tables.
 
The default [[migration level]] was changed from 0 to 1, with the effect that monadic <source lang=apl inline></source> indicates [[Enlist]] rather than [[Type]] by default. The default [[random link]] was changed to use the [[wikipedia:Mersenne Twister|Mersenne Twister]] algorithm rather than a [[wikipedia:linear congruential generator|linear congruential generator]]. Additionally, the assignment <source lang=apl inline>⎕RL←0</source> was introduced to initialize random number generation with a seed taken from the operating system (which therefore differs between different APL instances).
 
[[Component file]]s were enhanced with usability improvements in the component file [[system function]]s and the ability to create zipped (compressed) component files.


== 14.1 ==
== 14.1 ==

Navigation menu