Dyalog Version 16.0 was released at the end of June 2017 and is supported under Microsoft Windows, IBM AIX, Linux – including the Raspberry Pi – and Apple macOS.

In addition to improved performance, import/export tools, new communication tools and cross-platform features, Dyalog version 16.0 includes very significant new core language features to make it easier to implement high performance, functional, elegant array-oriented solutions. Highlights include:

Performance

Our work on rewriting core components to take advantage of modern processor features continues. Our standard performance test suite reports that this release is approximately 6% faster than Dyalog version 15.0; the last three development cycles have accumulated a speed-up of approximately one third, according to these (admittedly synthetic) tests. For details of the specific speed-ups in this release, see Dyalog version 16.0 Performance.

Importing and Exporting Data

Dyalog version 16.0 adds a high-performance mechanism to convert data held in CSV files into arrays and back, enabling you to move data efficiently in and out of your application. A new system function ⎕CSV automatically detects the characteristics of most CSV files, and it also has a plethora of options. ⎕CSV also deals with fixed record layouts without separators and provides very significant speed-ups over current best practices.

Exchanging Data with Other Applications

Data isn't always exchanged via files; often you want to call – or be called by – other applications over a network. Our TCP library Conga has been significantly enhanced. We have removed the burden of dis-assembling HTTP packets from the APL developer by supporting the HTTP protocol at the library level – which also allows us to add support for asynchronous, bi-directional WebSockets, for highly interactive web apps. Conga has also been optimised to better support very large numbers of simultaneous connections.

The experimental features for converting messages in JSON format to APL arrays or namespaces have been promoted into a ⎕JSON system function, complementing the existing ⎕XML function.

Cross-Platform Development Environment

With Dyalog version 16.0, our Remote Integrated Development Environment (RIDE) is promoted to be the default IDE for not only macOS (as it was with Dyalog version 15.0), but also Linux – including the Raspberry Pi. In addition, a "zero footprint" option is available, allowing you run RIDE in any web browser that supports Javascript, loading it directly from a running APL interpreter.

RIDE 4.0 supports many new features that were previously only available in our native Windows IDE, including a Workspace Explorer tree view, Stack and Thread windows and full support for debugging threaded applications.

Cross-Platform User Interfaces

A new HTMLRenderer object allows APL applications to create user interfaces by generating and "injecting" HTML/JS into an instance of the Chromium Embedded Framework, which is included with Dyalog APL. You can mix content created by your APL process with services provided by external web servers and use simple call-back functions to respond to user actions. Content can be generated using your own code or tools like SharpPlot. The MiServer widget library allows you to generate rich content from APL, using all the controls that are on display at http://miserver.dyalog.com. No matter how you generate the content, the UI will look and behave in exactly the same way on all platforms – and the application code will be able to run as an actual web server if the application code support multiple users.

The HTMLRenderer is available under Microsoft Windows and Apple macOS; version 17.0 will add support for the HTMLRenderer under Linux.

A New Approach to Tools and Samples

The inclusion of support for APL source code stored in Unicode text files as an alternative to workspace files means that Dyalog version 16.0 can use industry standard source code management tools. This makes it possible to share open source APL projects using tools like GitHub, allowing users to collaborate on developing tools and applications and to read APL code without having a running APL system.

New Primitives

Version 16.0 adds four new glyphs to the language (⍸, @, ⌺ and ⊆), providing significant new functionality at the core language level:

monadic ⍸ (where function) – returns indices of 1s in right argument

(where function) – returns indices of 1s in right argument dyadic ⍸ (interval index function) – left argument defines interval boundaries; return interval each item of right argument is found in

(interval index function) – left argument defines interval boundaries; return interval each item of right argument is found in monadic ⊆ (nest function) – make a nested array

(nest function) – make a nested array dyadic ⊆ (partition function) – as APL2 Partition regardless of current ⎕ML setting

(partition function) – as APL2 Partition regardless of current setting dyadic @ (at operator) – functional merge operator: [argument] (modifier @ selector) array

(at operator) – functional merge operator: [argument] (modifier @ selector) array dyadic ⌺ (stencil operator) – apply stencil function to windows of specified size. Useful for image manipulation, neural networks and many other applications.

Visit the Documentation Centre for the complete release notes and documentation for Dyalog version 16.0.