Dyalog APL versions: Difference between revisions

Jump to navigation Jump to search
3,394 bytes added ,  11:38, 10 June 2020
(6 intermediate revisions by 3 users not shown)
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.
== 10.0 ==
Version 10.0 was released March 2003. It incorporated aspects of [[.NET]] support that had been part of Dyalog.NET, as well as other miscellaneous improvements to the language, interface, and performance.
The new constant value <source lang=apl inline>⎕NULL</source> was added for better integration with .NET. Another new [[system function]], <source lang=apl inline>⎕NLOCK</source>, was added for file locking support. Two features were added to <source lang=apl inline>:For</source> loops: the <source lang=apl inline>:InEach</source> [[keyword]] for iterating simultaneously along several arrays, and automatic handling of [[.NET]] COM collections.
This release added keyword completion (AutoCompletion) and syntax colouring in the [[session]]. New performance features were added: [[Idiom recognition|recognised idioms]] were combinations of tokens supported by special code, and binding a search function ([[Index of]] or [[Membership]]) to its principal argument invoked the new retained hash table mechanism, saving the work of creating a hash table for that argument every time the search function was called after the first. The APLScript mechanism, allowing source files to be converted to workspaces for distribution, was also added. The resulting executables could be distributed with a copy of Dyalog APL in library form.
== 10.1 ==
Version 10.1 was released July 2004. It allowed [[tradfn]] arguments and results to be composed of multiple variables (much like [[stranding]]) and featured improved thread handling, including a token pool mechanism for synchronisation. In preparation for the upcoming 64-bit release in version 11.0, it added support for 64-bit [[component file]]s, which increased the 4GB limit on component file sizes imposed by 32-bit files.
[[System function]]s <source lang=apl inline>⎕TPUT</source> and <source lang=apl inline>⎕TGET</source> were added to manage threads, along with the system variable <source lang=apl inline>⎕TPOOL</source> and function <source lang=apl inline>⎕TREQ</source> to report on existing threads and requests. The current thread name can be found with the new system function <source lang=apl inline>⎕TNAME</source>.
File handling system functions such as <source lang=apl inline>⎕FCREATE</source> were extended to allow 0 as an input tie number, to indicate that the smallest available tie number should be used (0 is not a valid option). The release also featured further improvements to the [[session]] such as filename completion for workspace commands.


== 11.0 ==
== 11.0 ==
Line 5: Line 21:
[http://help.dyalog.com/12.1/html/interoperability.htm Release notes] ([http://docs.dyalog.com/12.0/Dyalog%20APL%20Release%20Notes.v11.0.pdf pdf])
[http://help.dyalog.com/12.1/html/interoperability.htm Release notes] ([http://docs.dyalog.com/12.0/Dyalog%20APL%20Release%20Notes.v11.0.pdf pdf])


Version 11.0 was released October 2006. It introduced [[object-oriented programming]] extensions designed to work like [[.NET]] and based technologically on the existing [[namespace]]s. The primary new features were classes, instances (objects), and interfaces, supporting inheritance, access control, and constructors and destructors. Instances could be placed in arrays, and [[empty]] arrays could store the class of an instance in the [[prototype]]. When instantiated (for instance by taking the [[First]] element of an empty array), a prototype object would be created using the class's [[niladic]] constructor, if present. Classes could interact with namespaces by importing their functions as methods. Dyalog's Windows GUI framework, already based on .NET classes, was integrated with the new Dyalog classes.
Version 11.0 was released October 2006, and was released for both 32- and 64-bit systems—Dyalog's first 64-bit release aside from a much earlier [[wikipedia:DEC Alpha|DEC Alpha]] release. It introduced [[object-oriented programming]] extensions designed to work like [[.NET]] and based technologically on the existing [[namespace]]s. The primary new features were classes, instances (objects), and interfaces, supporting inheritance, access control, and constructors and destructors. Instances could be placed in arrays, and [[empty]] arrays could store the class of an instance in the [[prototype]]. When instantiated (for instance by taking the [[First]] element of an empty array), a prototype object would be created using the class's [[niladic]] constructor, if present. Classes could interact with namespaces by importing their functions as methods. Dyalog's Windows GUI framework, already based on .NET classes, was integrated with the new Dyalog classes.
 
New [[Quad name]]s were added to support object-oriented programming: the [[system function]]s <source lang=apl inline>⎕NEW</source>, <source lang=apl inline>⎕CLASS</source>, <source lang=apl inline>⎕INSTANCES</source>, and <source lang=apl inline>⎕DF</source>, and [[system variable]]s <source lang=apl inline>⎕BASE</source> and <source lang=apl inline>⎕THIS</source>. Additionally, system functions <source lang=apl inline>⎕FIX</source> and <source lang=apl inline>⎕SRC</source> were added to support namespace scripts.


Dyalog 11.0 also included primitive extensions:
Dyalog 11.0 also included primitive extensions:
Line 40: Line 58:
Support was added for 128-bit [[decimal floating point]] numbers (from [[wikipedia:IEEE 754|IEEE 754]]-2008), using the [[wikipedia:densely packed decimal|densely packed decimal]] (DPD) format internally. The [[system variable]] <source lang=apl inline>⎕FR</source> (Floating point Representation) was added, with the options 645 for 64-bit binary (5) floats and 1287 for 128-bit decimal (7) floats. Because of the increased precision of decfs, an additional system variable <source lang=apl inline>⎕DCT</source> was added to control [[comparison tolerance]] with decfs enabled, with the default value <source lang=apl inline>1E¯28</source>. When <source lang=apl inline>⎕FR</source> is 645, <source lang=apl inline>⎕CT</source> controls the comparison tolerance, but when it is 1287, <source lang=apl inline>⎕DCT</source> controls comparison tolerance. Support for interfacing with [[.NET]] decimal floats was also added. Because no complex decimal float type was added, version 13.1 broke Dyalog APL's strict numeric type hierarchy, introducing potential [[Array model#Numeric type coercion|changes in precision]] when placing values together in an array.
Support was added for 128-bit [[decimal floating point]] numbers (from [[wikipedia:IEEE 754|IEEE 754]]-2008), using the [[wikipedia:densely packed decimal|densely packed decimal]] (DPD) format internally. The [[system variable]] <source lang=apl inline>⎕FR</source> (Floating point Representation) was added, with the options 645 for 64-bit binary (5) floats and 1287 for 128-bit decimal (7) floats. Because of the increased precision of decfs, an additional system variable <source lang=apl inline>⎕DCT</source> was added to control [[comparison tolerance]] with decfs enabled, with the default value <source lang=apl inline>1E¯28</source>. When <source lang=apl inline>⎕FR</source> is 645, <source lang=apl inline>⎕CT</source> controls the comparison tolerance, but when it is 1287, <source lang=apl inline>⎕DCT</source> controls comparison tolerance. Support for interfacing with [[.NET]] decimal floats was also added. Because no complex decimal float type was added, version 13.1 broke Dyalog APL's strict numeric type hierarchy, introducing potential [[Array model#Numeric type coercion|changes in precision]] when placing values together in an array.


Identity functions <source lang=apl inline>⊣</source> ([[Same]], [[Left]]) and <source lang=apl inline>⊢</source> ([[Same]], [[Right]]) were introduced. Monadic <source lang=apl inline>+</source>, formerly called [[Identity]], was changed to [[Conjugate]] (a change which did not break backwards compatibility, because prior to the introduction of [[complex number]]s the two functions were indistinguishable). Dyadic functions [[Take]] (<source lang=apl inline>↑</source>), [[Drop]] (<source lang=apl inline>↓</source>), and [[Index function|Index]] (<source lang=apl inline>⌷</source>) were extended to allow short left arguments, matching [[SHARP APL]]'s interpretation of the [[leading axis theory]].
Identity functions <source lang=apl inline>⊣</source> ([[Same]], [[Left]]) and <source lang=apl inline>⊢</source> ([[Same]], [[Right]]) were introduced. Monadic <source lang=apl inline>+</source>, formerly called [[Identity]], was changed to [[Conjugate]] (a change which did not break backwards compatibility, because prior to the introduction of [[complex number]]s the two functions were indistinguishable). Dyadic functions [[Take]] (<source lang=apl inline>↑</source>), [[Drop]] (<source lang=apl inline>↓</source>), and [[Squad Indexing|Index]] (<source lang=apl inline>⌷</source>) were extended to allow short left arguments, matching [[SHARP APL]]'s interpretation of the [[leading axis theory]].


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>[[Ken Iverson|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>).
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>[[Ken Iverson|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>).
Line 165: Line 183:


== 18.0 ==
== 18.0 ==
[https://www.dyalog.com/dyalog/dyalog-versions/180.htm Release announcement], [https://help.dyalog.com/18.0/#RelNotes18.0/Key%20Features.htm notes]


Version 18.0 is currently planned for release in 2020. It was developed in parallel with version 17.1, which had very few new features, and includes several new primitives and extensions to existing primitives.
Version 18.0 was released in June 2020. It was developed in parallel with version 17.1, which had very few new features, and includes several new primitives and extensions to existing primitives.


The following new primitive functions and operators are added:
The following new primitive functions and operators are added:
Line 178: Line 197:
Version 18.0 allows enabling multi-line input in the [[session]] using the [[line editor]], and allows [[control structure]]s to be used in the session. Multi-line input is begun when a [[dfn]], [[namespace]], [[class]], or control structure is begun but not finished on the same line. It also allows syntax colouring and editing multi-line blocks in the session.
Version 18.0 allows enabling multi-line input in the [[session]] using the [[line editor]], and allows [[control structure]]s to be used in the session. Multi-line input is begun when a [[dfn]], [[namespace]], [[class]], or control structure is begun but not finished on the same line. It also allows syntax colouring and editing multi-line blocks in the session.


New [[system function]]s for case folding and mapping (<source lang=apl inline>⎕C</source>) and date-time conversion are added.
New and extended [[system function]]s for case folding and mapping (<source lang=apl inline>⎕C</source>) and date-time conversion are added.


Initial support for [[wikipedia:.NET Core|.NET Core]], Microsoft's cross-platform successor to the original [[.NET]] framework, has been added.
Initial support for [[wikipedia:.NET Core|.NET Core]], Microsoft's cross-platform successor to the original [[.NET]] framework, has been added.

Navigation menu