Dyalog APL V18.0 Issue 1 READ ME FIRST

This document contains the latest information about Dyalog APL Version 18.0.

This file is dyalog_readme.htm and is included in the help directory in the Dyalog installation.

Table of Contents


This section lists various changes and fixes which may affect your application. They have been made in 18.0 rather than in DSS updates since they involve a change in behaviour.

⎕SE.⎕WX now (correctly) defaults to 3, in line with Dyalog's recommendation that ⎕WX is always set to 3.

Dyalog Version 18.0 runs on macOS Catalina (as does 17.38400 and later revisions). However if you attempt to access ~/Documents from within Dyalog you may be presented with an operating system-generated message box asking you whether you want to allow Dyalog to access Documents (the same applies to various other directories). If you respond "no" and at a later date wish to change your mind, or if you don't get prompted, go to Apple->System Preferences->Security & Privacy. On the privacy tab select Full Disk Access and/or Files and Directories: you can amend the list of special directories which Dyalog 18.0 can have access to.

Version 18.0 includes a new cross-platform mechanism for defining configuration parameters (more commonly called environment variables on non-Windows platforms). See the Release Notes section on Configuration for more information. This mechanism is integrated with the existing methods, other than that on non-Windows platforms we no longer use ~/.dyalog/dyalog.config.

017889: The APL_TEXTINAPLCORE configuration parameter is now effective on all platforms, and the interpreter defaults to 1 (include the section in aplcores).

Change in behaviour: 017772: In 18.0 if you run ⍞←20↑'hello' ⋄ x←⍞ and only hit Enter, the length of x is 20 - the trailing spaces are no longer removed.
In earlier versions of Dyalog APL in both the ODE (Windows) and tty versions, with expressions like ⍞←20↑'hello' ⋄ x←⍞, if you just hit Enter, the value of x did not include the trailing spaces. From 18.0 onwards it does. This brings it in to line with RIDE and when running without a session. If you remove and add spaces the behaviour has not changed.

We have added support for .NET Core on Windows, Linux, Pi and macOS. Please note that support for .NET Core will only be offered for Unicode interpreters - this will be the case for all supported platforms. 18.0 is only ever likely to support .NET Core 3.1 - in particular support for .Net 5 or later is only likely to appear in future versions of Dyalog APL.
You will need to install the Microsoft .NET Core version 3.1 runtime on your machine. .NET Core should be downloaded from https://dotnet.microsoft.com/download.
On Windows Dyalog will attempt to use the .NET Framework by default, and on other platform it will attempt to use .NET Core by default. This behaviour can be overridden by setting the DYALOG_NETCORE configuration parameter. You will most likley need to set DOTNET_ROOT to the location of those code files if they are installed in a non-standard location (see the Microsoft .NET Core documentation for more details).
Note that .NET Core is not supported on armv6 or earlier, so will only work on Pi3 and upwards.
When reporting problems with the .NET Core support, can you please include the output of the following commands (assuming you can run them !):
'.' ⎕wg'APLVERSION' ⋄ +2⎕nq'.' 'GetEnvironment' 'DYALOG_NETCORE' ⋄ ⎕using←'' ⋄ System.Environment.Version.
Note that we have added the dotNET Core Interface Guide and the dotNET Differences Guide to the help directory (and https://www.dyalog.com/documentation_180.htm).

On Windows, the configuration parameter DyalogHelpDir has always pointed to the directory containing the main CHM file. You can now set it to

Other miscellaneous enhancements

Dyalog had defined the keystroke RZ. However, apparently the code associated with this keystroke was never enabled; we have therefore removed RZ from the list of valid keyboard commands.

The keyboard command FT in earlier versions allows the user to define a keystroke to jump between the navigation and contents panes of the editor. In 18.0 it has been extended so that it now cycles around the navigation pane, the icons in the editor toolbar and the contents pane.


The 18.0 documentation is in the help subdirectory of the installation directory, and can also be found at https://help.dyalog.com/18.0; the PDFs etc can be found at https://docs.dyalog.com/18.0.

New In 18.0

3026Keep track of sorted arrays.
7621WIBNI ,[1]/ was recognized as being the same as idiom ⍪/
8528RFE: extend the __/⍳⍴__ idiom to integer vector arguments
1444000249 Transform 819⌶ into a system function
15905Binary search on values in vector registers
15938⎕NPUT: provide option to map line endings other than just LF to the selected line ending
15965Performance improvements to interval index
1605300247 ⎕JSON support for high rank arrays
16096D-operand loses updates of outer variables
16137Support AVX2, POWER, and NEON vectorised max/min
16153Non-associative scalar dyadic scans can be faster, and run in place
16381Magic operator is displayed to the user when there's an error
16386Unique should be equally fast on arrays with the same major cell size
16393Unique is sometimes slower than nubsieve-compress
16402Improve ↑∘Y⍣¯1
16435WIBNI you could use ⎕NS to clone a namespace that had external arrays in it
16449Identity element for scalar dyadic outer products
16599Polynomial evaluation with decode could be much faster
16623f⍨¨ should be as fast as f¨⍨
16644⎕JSON saves ⎕DF
16661Pasting is always "rectangular"
16686Dfns outward tail call has slowed down slightly
16688slow down in ⍳⍨
16708⌷⍤r incorrectly signals length error
16712RFE: i⌷⍤1 999⊢x can be faster
16774⎕NULL[⊂⍬] should return ⎕NULL
16813Allow APL2 extensions to Mix-with-axis regardless of ⎕ML
16837Tolerant hashing should use a different hash and a power-of-two table size
16871Move +/ code into vector framework
16924With arguments of the form 'a←{a one line dfn}{a second one line dfn}{}' ⎕fx ignores all but the last dfn definition
16962Bug in a~b on simple integer vectors
17001Failures in {+/⍵}⌺ when window is longer than argument
17010Syserror 999 caused by ⌷⍤1
17063⎕NA crashes trying to display extended error information
17159Fast division by constant using fused multiply-add
17175AIX: +/ is much slower on 32-bit integers than it is on doubles
17190Extend component file DMX messages to include filename
17191Deltas (2-⍨/) could be faster
17199WIBNI HTMLRenderer rendered server pages even if client (4xx) or server (5xx) codes are received
17266Editor: Windows only: attempting to merge two lines of a dfn by hitting backspace leads to a syserror 999
17276Editor does not insert new member into existing scripted namespace
17279A few operators negate shyness
17297Clear buttons in HotKey windows (in the configure box) don't paint correctly if the window is disabled
17346No-blank split idiom ~∘' '¨↓ can be faster
1735000270 ⎕R and ⎕S optional removal of regex support
17356Use carry-less multiply for ≠\ and related operations
17384HTMLRenderer crashes if you do a Drag Drop operation from the Dev Tools window
17398Inverses of / and \ fail or wrong result with non-Boolean left argument
17401⍳ inverse fails on arrays of rank>1
17402Optimised ⎕R/⎕S fails for vector pattern in scalar source
17446⎕JSON fails to convert namespace created with 0∘⎕FIX
17486Special code for ⊣\ and ⊣⍀
17491Closing a singletrace window with multiple suspensions only cuts the stack back to the last suspension
17495Add Constant (⍨) operator and associated special code
17505Add Atop (⍤) operator
17533Implement At without magic functions
17536Fast rotate on word-size or smaller boolean rows
17585Add Unique Mask (≠) function
17600Some system commands fail with comments
17631Allow non-negative integers in Where argument
17632⎕DMX.Message bleeds through ⊥⍣¯1 magic function
17647Performance of ∧.≡ appears to have slowed down between 17.1 and 18.0 (and maybe ≡¨ too)
17648Performance of ≠a is worse than comparable expressions
17653Implement monadic ⍸⍣¯1
17672⎕JSON should escape Line and Paragraph separators for maximum compatibility
17690With DYALOG_NETCORE=1 ⎕NEW System.DateTime ⎕TS may generate a core on Windows, or an odd message on Linux or Windows
17699Wrong result from X membership Y for ints if X 256 or more elts, Y over twice as long as X, and Y contains most of X elts
17700HTMLRenderer windows have no visible content
17706∇doesnotexist∇ generates an inaccurate hint
17708tty version segfaults scrolling around in dfns
17710Disclose with rank could be faster
17716Extend FT so that it loops around the function editor shortcuts as well as between the navigation and contents panes
17731⎕XML inverted table format
17758Reshape with Rank can usually be faster
17775Inner product can be slower than rank/reduction
17777Failure to reuse help window
17783pdqsort-style sorting
17808Avoid splitting the right argument in f∘⊃⍤k 0
17820Dragging the selection with the mouse appears to allow dropping outside the text area
17821Linux: AUTO_PW and DEFAULT_PW seem to be interacting incorrectly; mapl script doesn't handle them correctly
17824Hybridise pdqsort with counting sort
17838Extend Partitioned Enclose left argument to allow non-negative integers and short lengths
1784400268 Launch interpreter on files other than .DWS
17853With ]box on attempting to display anything in the session causes the most recent suspension to be cleared
17855Replace wtutor and wtutor95 with Kai's combined workspace
17859Implement sorting for any CPU-type-sized cells with pdqsort
17861Can't use ⎕ input in a locked function
17889(⎕JSON ⍠ 'Dialect' 'JSON5') fails to parse '0'
17892Support references to #, ⎕SE, ⎕DMX as symbolic for serialisation, ⎕OR, ⎕CY
17899APL_TEXTINAPLCORE should be effective on all platforms, and should default to 1 in the interpreter
17904Dyalog takes a lot of time to return a list of .NET objects
17905Move misc/Samples/fun to misc/ws/allchars and misc/ws/unicode as appropriate; remove misc/Samples/fun and adjust WSPATH
17907¯1*¯2 gives a spurious DOMAIN ERROR if APL_COMPLEX_AS_V12 is set to 1
17909If the RIDE workspace explorer is visible/active, calls to )clear and )load cause RIDE and the interpreter to disconnect
17912Small difference when ⎕DR generated number is raised to the power of 4 when compared with the result from 17.1
17913Membership can incorrectly return all 1s with small-range 2-byte or 4-byte arguments
17933With DYALOG_NETCORE=1, assigning to an Array.CreateInstance(String 100) generates a syserror 999
17935All platform-specific I-beams should be marked as UNSUPPORTED elsewhere
17936Windows only: if you start a local 18.0 from RIDE, the interpreter does not respond and RIDE has to be killed
17946Errors when all left argument values in Expand or Replicate are 0 or less
17949For foo←⍞∘← copying foo into a different namespace causes the display of foo (and the copy) to show ⍞QQUOTE rather than ⍞
17953Include Native / Shared library files in default installation
17983The Windows Installer should add associations to allow "running" a number of new extensions
17990:EndDispose in background thread causes 100% CPU Loop / Hang
17991Multi-threaded Linux APL RIDE session becomes unresponsive
17993Spurious error message setting ⎕USING in a new workspace, using .NET Core Bridge
17997Referencing a .NET Type in a :Attribute statement may (quietly) fail
18002Syserror due to At with reach assignment
18005Isolates fail to start under Windows if DYALOG_NETCORE=1
18006Can't have :Repeat inside :Disposable
18007Add ⎕SE SessionTrace event
18021System resources exhausted under Linux / .NET Core bridge
18036Windows only (?): APL crashes with big ⎕PW and display of large (wide?) data
18044⎕FIX reports a domain error if the class has some assignment statements and a :include for a namespace which does not exist
18048HTMLRenderer WebSocketSend should allow datatype to override data's type
18049Attempting to create a namespace with a ref to a root errors in # and crashes in ⎕SE
18050r←⎕NS of a namespace causes a crash as r is unshadowed.
18056.NET Core bridge incorrectly memcpys 83 data to Byte arrays
18062Dyalog can exit abnormally while executing a .NET Core JsonSerializer method
18081Syserror 999 retrieving a .NET Exception message when the bridge has not been loaded
18082dyaedit always asks if you want to save changes
18086With -script option, execution continues even when an error is generated
18088Function loses some local variables after calling a single line dfn composition which is defined in a caller dfn
18099Too few arguments to HTMLRenderer WebSocketSend kills APL
18100WebSocketSend args wrong order
18106Dyalog can crash when trying to update the current object status field with the very long name of a .NET object
18117⎕NULL mishandling in .NET interface
181475177⌶ reports incorrect namespace for namespace scripts
18153Static methods in .NET exported APL classes generate NullReferenceExceptions
18178Grid with input edit field with ValidIfEmpty set to 0 lets the user leave an empty cell if CellMove event callback returns 1
18207CEFVersion reports NONCE ERROR on Linux (Ubuntu)

Issues Fixed in Version 18.0 Reported in Earlier Versions of Dyalog APL

17An inner dynamic function called from an external dynamic operator can produce a VALUE ERROR.
8675complex residue is not tolerant enough
8677inconsistency between real and complex floor
9714RFE: matiota should use a larger hash table
10162=+← should not act like a first-class derived function
11221(f∘←+) generates SYNTAX ERROR
12843Attempting to use Indexing of Default Properties on .NET arrays return wrong result
13343disallow hashing mapped arrays
13463intolerant dyadic iota on doubles should be at least as fast as tolerant
14228mat⍳vec shouldn't hash mat
14457Tracing and editing a multi-line dfn defined inside a function can lead to a hang if you add a line
14626-/ should be almost as fast as +/
14648Right Operand Currying broken in scripts
14979bug in a⍳b for complex a and b which are tolerantly equal
15044Use vectorised functions from arithfns.h for optarith
15116SSSE3 shuffle in structural functions
15253x⍳y for complex x and y gives incorrect result for nearly equal items
154091+.÷0 does not give "Divide by zero" DMX message
15603apl -script crashes on some malformed unterminated inputs
15614In session, Select to end of line, RC, PT results in cursor moving same number of chars as in clipboard, but no text appears
15666Dyadic ⍳ is slow on tiny DECFs
15904⍺⍸⍵ does not tell the user what's wrong when the left argument is not strictly ascending
15997Configure>Trace/Edit>"Allow search to wrap" is on the wrong tab
16035Replace current tube.dws with one built from GitHub/dyalog/dyalog-tube-ws
16078Indexing could sometimes reuse the index vector
16407Error caret position wrong in a class method which has a value error for a field
16427Set functions don't respect ⎕FR
16587dmx_errors.h has Boolean spelled with a lower "b" in two entries; add entriesfor isolates
16629)save generates a syserror 96 in :Implements Destructor of instance in a namespace in ⎕se - the ws is written to file
16703Incorrect result from ⎕S when there is a transformation string and no matches
16760caret position wrong for VALUE ERROR on use of ⍺ in a dfn applied monadically
16972Syserror 4 caused by squad with axis when default property uses axis
17161HTMLRenderer WebSocket Close method causes aplcore
17200Although )save <ws> autocompletes the ws name, )save -force <ws> doesn't
17271Rework "AutoMove" option in Search/Replace dialog
17287Null-containing result from ⌷⍤¯1
17293Inner product breaks error handling of execute
17295Dyalog does not close if you currently have the Event Viewer Settings dialog open
17305Add a TID style to status fields to allow the current TID to be shown in the session
17308In an APL assembly, using ⎕NEW on a class in APL, before it has been new'd from .NET gives an object that cannot be passed back
17312Scalar monadics don't handle non-simple prototypes
17370HTMLRenderer: Control characters in WebSocketSend cause JavaScript error
17427DateTimePicker in a Grid does not show up if ShowInput is 1 and Native Look and Feel is enabled
17435HTMLRenderer crashes if you ShowDevTools and drag an element in the dev tools form
17484Incorrect result shape from ⍪⍤0 on a non-array
17502FileSystemWatcher callbacks crash Dyalog APL
17507HTMLRenderer crashes if you ShowDevTools and quickly close tabs
17516Windowed reduction 1,/v incorrectly ravels elements
17591Wrong result from {≢⍵}⌸ on very long vector of 2-byte ints
17607Missed optimisation in high-rank boolean transpose
17623At (@) returns values to a different place than it got them from if ⍺⍺ changes ⎕IO
17639Windowed ,/ on non-last axis and +/ on intermediate axis modify themselves
17693Accelerators don't work if the focus is on a child HTMLRenderer object in a form
17717The RZ keyboard shortcut does nothing
17771The text "TRANSLATION ERROR: Unicode character ⎕UCS 2309 has no equivalent in Classic (not in ⎕AVU)" looks wrong in a Unicode interpreter
17796URL > 256 characters crashes APL
17801Default InterceptedURLs does not work for WebSockets
17802HTMLRenderer sends incorrect null response from WebSocketReceive event
17805HTMLRenderer HTML property should accept numbers OR characters
17896Decode with single-cell right argument allows nested arrays
17951Websockets only work if there is a delay between setting InterceptedURLs and HTML properties
17952Crash in dyalogc64_unicode.exe exporting an assembly built from 2 sibling namespaces in a namespace
17974Overrideable method in Dyalog .NET assembly is not overridden by a C# override method
17976DOMAIN ERROR on :EndIf when using ⎕DQ & inside :If Clause
18009Trap statements catch non-existent FUTURE ERRORs in sub-functions
18015Dyalog .NET assembly method with a single argument x gives a value error for x if C# calls the method with a null