The weather improved today – the sunshine was a refreshing feeling as we awoke to a new day of forward-thinking presentations.
As usual, we began with Gitte Christensen’s welcoming address in which she spoke of the exciting new growth happening at Dyalog Ltd. Five new employees have joined since we met in Portugal last year for Dyalog ’22, addressing our increasing needs for tools, administration, IT support, testing, and marketing. In addition, approximately a quarter of the delegates at Dyalog ’23 are attending for the first time. However, we also said goodbye to Geoff Streeter, one of the original implementers of Dyalog, as he retired this year (read about Geoff and his charity work in this blog post “Not All Heroes Wear Capes”). Gitte herself is stepping down from managing the company at the end of the year, and has been spending the last couple of years training her replacement as CEO, Stine, to take over in January 2024.
There are two large projects that Gitte has been championing before her retirement. The first is the formation of the APL Trust Fund – a charitable foundation to enable individuals and companies who have enjoyed and benefited from APL to pay it forward with a fund dedicated to science and technology research, and in particular that which can help promote the use and development of APL. The second is a new website for Dyalog Ltd, which is progressing well; she showed us a preview of the home page and a searchable library of APL videos.
Morten Kromberg then presented his insight into what this rapidly growing team is up to. After reflecting on the milestones of historic Dyalog development, such as the introduction of namespaces and the Win32 GUI interface, he talked about many of the ongoing projects that will be presented this week as well as his hopes for version 20.0 and beyond. For example, Dyalog on 64-bit ARM processors, academic collaborations in quantum computing, metallurgy and teaching; tools for asynchronous programming; package management; performance improvements, an application health monitor, and much, much more.
Next, John Daintree presented an update to the so-called Token-by-Token (TBT) Tracing – or is it primitive debugging? or should it be called “Bit-by-Bit Poking”?! The ability to do fine-grained tracing function-by-function within expressions clearly has incredible potential for development, teaching, and learning APL. Those with a tacit aversion can see exactly how derived functions and trains are executed, and everyone can benefit from seeing the values of variables in the debugger as expressions are traced.
Then Adám Brudzewsky presented his ideas on how to address a range of issues when you want to assign a variable but the name itself is variable – this is often a problem when using namespaces as dictionaries, for example. Although possible, he showed how incredibly unwieldy it currently is to do this with good performance. He proposed system functions for getting name-value pairs (⎕NV
), getting a name (⎕NG
) and setting a name (⎕NS
). If you recognise the last one, luckily his proposal is a consistent extension of the current ⎕NS
system function.
Peter Mikkelsen had another system function proposal as he elucidated current issues with the way we call shell commands from Dyalog with ⎕SH
and ⎕CMD
. His proposed new system function might include features such as whether to error on a non-zero exit code and ways to redirect input and output. This proposal is quite concrete, and if all goes well it might see its way into version 20.0.
Acknowledging that it might be of little interest to some users and yet deeply fascinating for (and requested by) others, Richard Smith gave us a privileged view into the technical content of the workspace and how memory allocation works. Essential viewing for users concerned with performance, the “pocket allocation algorithm” shows what really happens when a WS FULL
error occurs.
Furthering the discussion of interpreter performance, Karta Kooner continued the analysis he presented last year of the performance of set functions that use search algorithms, such as membership ∊
and index-of ⍳
. His heat maps of performance using different data types with arrays of sizes ranging up to 1,000 or 20,000 elements, showed v18.0 having unexpected degradation in many cases. Of course, it is significantly faster in some cases, so Karta intends to address the algorithm selection issues and then re-introduce successful algorithms from v18.0.
On the topic of concurrent programming, Stig Nielsen of SimCorp demonstrated using .NET tasks to implement “APL Worker Bees”. By exporting an APL class as a .NET assembly, a main APL process can be used to control many interpreters working in parallel across all of the cores of the machine. In contrast to isolates, these are several APL interpreters running in the same machine process, which Stig needed when migrating his specific application to the cloud.
Mark Wolfson returned to the stage after his fascinating presentation last year in Portugal to talk about his efforts streamlining a complex data processing and analysis pipeline. Previously, he had used C# tools to ingest data from over 40 different software systems used by U.S. jewellery retailers and some APL “black boxes” to normalise the data. He has been able to replace all of that with Dyalog tools, allowing him to rapidly make changes that previously took days, weeks, or months. He has also shown these tools to members of his C# team and said that they really resonated and he now has C# programmers wanting to learn APL! Mark urges the APL community to promote APL as an excellent “glue” language to bind together the already-familiar tools used by programmers.
Of course, the APL world still needs its own tools. Kai Jaeger has been developing the APLTree library for many years. We saw a brief history of Kai’s library of tools before he provided an update, including the move to make them available on the Tatin package manager that he has been developing for Dyalog. There was news of specific updates to packages such as FiRe (Find and Replace), which is a tool for searching and replacing within code and names in a Dyalog workspace, and the addition of new packages for reporting code coverage during testing, an FTP client, accessing the GitHub API, and using SMTP for email. He also introduced the Launchy application, which is useful for users when starting Dyalog when they have multiple versions installed.
In the last talk of the day, Morten shared the status of package management in Dyalog more broadly. In exciting news, he demonstarted how the Cider project manager now supports adding both Tatin and NuGet dependencies to an APL project, making it easy to use the dozens of APL packages or hundreds of thousands of .NET packages.
After dinner we were treated to some light entertainment in the form of a remote presentation by Ray Cannon, who has been experimenting with synthesising music from APL. Hearing the development of sounds from simple sine waves through to added overtones creating a fairly convincing organ was quite fascinating, and the synchronised animation of falling piano keys to J.S.Bach’s Toccata and Fugue in D minor was magical.
Today’s presentations:
- D01: Welcome to Dyalog ’23 – Gitte Christensen
- D02: The Road Ahead – Morten Kromberg
- D03: Dyalog Version 20.0 – Part 1 – John Daintree
- D04: Setting and Getting Variable Values – Adám Brudzewsky
- D05: Revisiting ⎕SH and ⎕CMD – Peter Mikkelsen
- D06: An Introduction to the Workspace – Richard Smith
- D07: Future Performance Improvements in Set Functions – Karta Kooner
- U01: APL Worker Bees – Another Way to Run APL Tasks in Parallel – Stig Nielsen
- U02: Transforming and Streamlining a Complex Development Process using Dyalog – Mark Wolfson
- U03: The Evolution of APLTree and APL-cation – Kai Jaeger
- D08: Using Packages – Morten Kromberg
- U04: Music: APL vs APS (A Pointy Stick) – Ray Cannon