This document contains the latest information about Dyalog APL Version 19.0.
This file is dyalog_readme.htm and is included in the help directory in the Dyalog installation.
Issue 3 has one change from issue 1: a fix for
21253: Unexpected value error in code similar to: b←⎕RSI[1].⎕NC c←(∨/' '≠c)⌿c
Note that 19.0 is most likely to be the last version of Dyalog APL which is built for Intel-based Apple Mac computers: for 19.0 we have released an Intel-based interpreter and an ARM-based interpreter. For versions following 19.0 we will only release interpreters for macOS which run on ARM CPUs.
Beginning with version 19.0, ⎕SE content (other than Link and SALT) comes from the dyalog/qSE repo on GitHub. This does not affect what is where in an installation image, but you should be aware of this if you customise your session extensively.
On Microsoft Windows Dyalog 19.0 is built with Visual Studio 2022.
This revision of 19.0 uses Chromium Embedded Framework version 121.
Dyalog APL Version 19.0 on Windows is as ever built with .NET Framework support. However, for all other platforms (and Windows can be configured to do so) 19.0 is built with support for .NET 8: earlier versions of .NET (formerly known as .NET Core) are not supported.
Dyalog APL expects to find .NET in the default installation location on all platforms. However it would appear that even on the same platform,
different methods of installing .NET default to installing in different locations, and in the case of Linux, different distributions have different default locations.
Additionally there appear to be multiple files which may or may not be created when .NET is installed which contain the location of .NET.
Dyalog recommends that you install .NET in /usr/share/dotnet on Linux, and on macOS, in /usr/local/share/dotnet; these maximise the likelihood of not needing to
set DOTNET_ROOT in order to use .NET from Dyalog (and indeed other applications).
On the Raspberry Pi, Dyalog strongly recommends that you install .NET 8 by downloading the Arm32 Binaries; using the dotnet-install script appears to install the wrong .NET support for 32-bit ARM. Note also that uname -m under Bookworm reports aarch64, not armv7l, and that aarch64 is also returned on a 64-bit Raspberry Pi O/S. Run getconf LONG_BIT to identify whether you have a 32-bit environment or not.
The 19.0 documentation is included in the installation images and is available online at https://help.dyalog.com/19.0; the PDFs etc can be found at https://docs.dyalog.com/19.0. Dyalog 19.0 is released with RIDE 4.5; the documentation for RIDE 4.5 can be found at https://dyalog.github.io/ride/4.5/
Documentation for RIDE 4.5 can be found at https://dyalog.github.io/ride/4.5/; it is not available as a PDF.
ID | Description |
3184 | 18.2: Syntax error with square-bracket indexing and ref-arrays. |
4641 | Interpreter gets confused when tracing callbacks for resize or move |
5755 | GetTextSize method does very little checking of its argument: can pass more than 2 elements of any type |
8627 | An EXCEPTION is generated when comparing a DateTime object with any namespace ref |
9797 | Find Objects tool does not find functions in unnamed namespaces. |
9859 | Remove “Expose Gui Properties” and “Expose Session Properties” from the menu |
10270 | Unicode Dyalog: Setting PropertyPage Caption with ⎕WS results in random caption. |
13163 | A nonce error is generated if you ⎕SIZE an indexable .NET property |
13253 | Scripted namespaces have unnecessary references injected |
13340 | ⎕SI and ⎕XSI can return the wrong name when an inner dfn is called via an operator that names ⍺⍺ |
15209 | Syserror 999 if you execute operations on isolates on one line |
16178 | Interesting information section of aplcore has CLASSIC issues |
16377 | ∘.×⍣¯1 does not check its result |
16395 | Inappropriate divide by zero errors from ⍣¯1 |
17342 | Add support for LZ4 frames to support compression of >2GB data |
17649 | Attempting to include a 4-byte character in the left argument of ⎕SIGNAL generates a RANK ERROR |
17698 | Dyalog should discard compiled bytecode from 400⌶ when loading a workspace saved by a previous version |
17750 | ⍣1 can cause ⍣¯1 to give wrong result |
17762 | Wrong result when using both input stream and output stream and there's nothing for ⎕R to process |
17818 | 5177⌶ fails to reject non-empty array |
17967 | Branching via a derv switches namespace to the space containing the derv |
18246 | Parenthesised multiple assignment fails when at least one of the names is ⎕ or ⍞ |
18313 | WIBNI ⎕JSON could generate ASCII-only JSON |
18374 | ⍸⍣¯1 doesn't check its result |
18429 | Error in the result of an error guard can confuse ⎕LC |
18433 | (++&+)⍣¯1⊢1 generates a syserror 999 |
18478 | 17.1 and later: in some cases Intersection returns incorrectly prototyped result when the result is empty |
18487 | For 18.0 onwards Partitioned Enclose incorrectly generates a LIMIT ERROR instead of a DOMAIN ERROR as in 17.1 and earlier |
18570 | Dyalog is inconsistent about which namespace a dop runs in if it is defined in a namespace and ⍺⍺ is a scalar |
18583 | 1∘.⎕JSON 0 generates a syserror 999 |
18584 | a←'≠00'0⋄(3↑¨⊃a)⌽⍨←0 generates a syserror 999 |
18596 | 2=/ seems to use default ⎕CT |
18692 | Syserror on ⎕FX of ⎕OR from ⎕TSYNC |
18699 | Tracer incorrectly invokes dfn even though guard value is false |
18764 | WIBNI ⎕NINFO could limit the directory depth it goes down when using the Recurse option |
18800 | Find Objects reports "Initial path does not exist" if you enter "⎕SE" into the "Look in:" field. Entering "⎕se.SALT" works |
18840 | ⊥⍣¯1 does not check its result |
18877 | (⍎⍣¯1)⍬ leads to a syserror 999 |
19002 | Hang after double-clicking in Threads window and then closing it |
19180 | ⎕io←0 ⋄ z←⍕2 2 2 2 2 2⍴ { ( (?5⍴2),1) ⍴1 }¨ 64⍴0 generates a syserror 999 |
19215 | First dfn is skipped when two multi-line dfns are separated by a diamond |
19291 | Dfn scoping issue |
19300 | Names go out of scope when dfns run multi-threaded |
19329 | With ⎕fr←1287, ⌈/⊃0 1289⎕dr 2.1 3.1 returns 0, not 3.1 |
19349 | :ElseIf 0 block executed if there is a SessionTrace callback from :If |
19584 | ({+/⍵}⌺1)⍬ generates an AFFIRM ERROR |
19585 | a←⍬ ⋄ (0↓.⍉a)←1 generates a syserror. a can be any array, the left argument of ↓ does not have to be 0 |
19606 | #.(⍨)¨0 generates a syserror 999 |
19624 | ⎕fx'foo' ':attribute##.a' and similarly ill-defined :attribute statements generate syserror 999s |
19633 | 8415⌶ should work with DECFs (or give a domain error) |
19659 | Clearly identify the unacceptable glyph in "Invalid token" DMX messages |
19717 | z←⎕fmt of a nested array of empty vectors and matrices generates a syserror 999 |
19718 | When a mal-formed array is passed into Dyalog, the errors should be more helpful (DWA/⎕NA/aps) |
19723 | WIBNI you could put something in a configuration file that meant relative to the configuration file |
19758 | Windows only: Classic Dyalog installer installs Dyalog .NET Core interface files even though Classic cannot use .NET Core |
19760 | Dfn lexical scope issue: dfn invoked by ⎕S |
19775 | Cannot fix dfns with long (more than 9 elements) strand on first line |
19785 | If editing and have searched for some text with "Highlight All Matches" on, typing text can sometimes lead to a syserror 5 |
19805 | (⍸⍣¯1) fails with DOMAIN ERROR instead of returning an empty high-rank array |
19880 | 00307 Unique token generator and token range reservation mechanism |
19886 | Caret is in wrong position if left arg is a NILADIC function ina namespace but the problem is with the number of right arguments |
19904 | 'M<->...' ⎕FMT does not properly handle scientific notation |
19913 | NONCE ERROR on selective assignment of a nested empty array when the selective statement includes Each |
19914 | Simultaneously running APL interpreters should not use the same log file |
19921 | Dyadic inverse gives wrong result when operand is modified by a no-op |
19966 | 00313 Review the startup mechanisms for loading APL code in to the session |
19978 | ⎕NINFO should return file timestamps in UTC |
19983 | Unique mask doesn't work when given a scalar namespace |
19984 | Unique mask gives wrong results with ⎕FR←1287 and ⎕CT←0 |
19992 | ⎕fx'v' '{0::⎕dm ⋄ 1∪.(→0∘.+ +)0⍀0}⍬'⋄ 1 ⎕trace'v' ⋄ v ⍝ Shows a MAGIC operator |
20002 | Remove NLF enable/disable check button from the General tab of the config box in a step towards removing non-NLF support |
20019 | Pasting ambivalent function definition with stranded result into session results in defn error |
20020 | Identity of shy operand causes syserror/segfault/Stack overflow |
20033 | Selective assignment using each and disclose for the selection, gives wrong results |
20035 | ⎕JSON Y does not populate ⎕DMX.Message if Y contains complex values |
20045 | ⎕DT under windows only resolves up to 10 or 15ms, depending on the system |
20064 | Dfns incorrectly sees a raw ← as an assignment and goes to next line. It should syntax error |
20065 | Regression: ⊃∊⎕NULL{⍺ ⍵}⍤0¨⎕NULL returns 0 not ⎕null; an AFFIRM ERROR is generated in debug builds |
20070 | (¯2*63)/1 generates a syserror (optimised build) or an AFFIRM (debug build). As does (¯2*63)\1 |
20071 | {⎕FX ⍵},⊂':Attribute∇⍵' leads to a stack overflow, or the interpreter silently terminating |
20086 | 19.0 only: with shuffle enabled, {⍵}@0⌺1@+0 generates a syserror/stack overflow |
20087 | (|↑⍣0&⊢)⍣¯1≡0 generates a syserror 999 |
20089 | SYNTAX ERROR on niladic shy function for dfn guard or error guard |
20099 | Update the LZ4 library |
20107 | 200⌶ has insufficient checks on the shape of its argument .. should only allow a vector of vectors |
20113 | NONCE error in ⎕SIZE on ex-future |
20126 | Assigned primitive functions not allowed in selective assignment expressions |
20127 | At 6 space prompt, <End> places cursor at far left of screen |
20138 | Display of FUTURE ERRORs exposes the guts of the isolate implementation |
20152 | FF (⎕UCS 12, Ctrl+L) entered to session after using Ctrl+L as Accelerator for Session>Clear |
20153 | (⎕THIS.⌹)⍤0 domain errors in cases where ⌹⍤0 does not |
20161 | Attempting to make use of the result of ⍎'⋄→∘(⎕NS⍨x←+)∘→⍬' generates a syserror 999 |
20171 | Editor: the name of a base class from a different namespace is syntax coloured as an error |
20172 | Naked edit from the session on a function suspended in a class function opens a new window |
20183 | Syserror 4 from: n←⎕NS⍬ ⋄ e←n.¨ ⋄ #.e |
20198 | 00319 Reserve workspace for use in Trap functions |
20201 | Syserror 999 after resuming a stopped thread and ⍞ is used in another |
20206 | Ctrl Backspace does not work as an accelerator in the session |
20209 | It's not possible to ⎕NQ a select to the "new log" menu item from a function |
20210 | Help sometimes looks too far left |
20211 | JSON5 refuses Unicode escapes in unquoted key names |
20220 | Syserror/AFFIRM ERROR attempt to catenate nested array to previously referenced hashed nested array |
20225 | In the Options→Colors dialog box, no scheme is selected by default after installation |
20236 | ⎕NL ¯2 5E9 crashes Dyalog for Linux |
20246 | ns←⎕NS''⋄ns.f)←ns.⎕FX'f' '1' generates a syserror 999 |
20257 | Little endian 19.0 only: N{{⍵≡⍉⌽⍵}⍺0⌸⍴0}0 generates a syserror 999 for N=69, but not for any of ⍳¯1e6+⍳2e6 |
20268 | {≢∪⍵}⌸⍨0 2⍴0 generates a syserror 4 on next wscheck; {(≢)∪⍵}⌸⍨0 2⍴0 is fine |
20272 | Key can return wrong results in some cases where the operand is recognised as an idiom |
20274 | (,32767){⍺(≢∪⍵)}⌸⍳1 0 and (,32768){⍺(≢∪⍵)}⌸⍳1 0 produce different results |
20312 | Allow Classic users to use LOAD= with source files |
20316 | Attempting to display a variable modified using (∊1⍴v)+←0 may lead to a syserror 999 |
20344 | 00306: Portable file function enhancements - NCOPY/NMOVE callback |
20345 | Multi-line dfn stack is improperly cut on error after executing stranded modified assignment with dfns operand |
20352 | 2⎕nq'.' 'setdflags' 32 ⋄ (⍒⍤⍳)1 1 generates a syserror 63 |
20375 | Non-WIndows: Improve handling attempting to drop an aplcore or wsdump to a non-writeable file |
20378 | Use Link/branches/3.1 and qSE GitHub repos rather than Link/master for 19.0 |
20385 | The dyalog script compiler is not compatible with the new InjectReferences default when exporting. |
20402 | After ⍎ on a fn in a namespace, clicking in the Tree View of a Trace window closes the Tracer and acts like a )reset |
20403 | 00335 Improve TIMEOUT handling |
20406 | Ex.y formatting in ⎕FMT gets the alignment of Es wrong with values with 3-digit negative mantissa |
20436 | The file bridge190-64_unicode_ap.dll should be removed from future installation images |
20441 | 57 57 57⊤¯5E¯15 returns 56 56 57: it should return 0 0 0 - and other issues to be fixed in 19.0 and possibly earlier |
20470 | (# #).(#).{⍵⍵}+1 generates a syserror 999 |
20474 | If )clear causes a WS FULL ERROR, calling it a second time leads to a syserror 635 |
20479 | Each Modified Assignment gives SYNTAX error but the expression executes successfully in session while the dfn is still suspended |
20485 | Dops treat niladic operands as monadic |
20488 | )SI / )SINL parameter -count=n not working, and -)XLOAD is not in the code |
20505 | 40⎕ATX'' gives 0 instead of ¯1 |
20506 | ⎕CY prints a newline if given a non-workspace |
20520 | Calling APL with a non-existent file as LOG_FILE leads to a MsgBox complaining about that file not existing |
20529 | <AO> and <DO> work when editing plain text arrays |
20534 | WIBNI )ed and ⎕ED worked on names with line numbers |
20553 | mac*/pi/linux: calling )clear or )save having created a function using )ed generates a syserror 999 |
20562 | Output that wraps to multiple lines isn't marked as multi-line output |
20570 | Remove R Interface Guide.pdf from releases |
20572 | The interpreter does not seem to be sending RIDE the banner when RIDE is the front end. OK with standalone RIDE to local APL |
20576 | Shuffle QA: a←0(0 0) ⋄ (0↑,¨a)+←0 generates a syserror 999 |
20579 | Stop bits are cleared whenever a function is edited |
20580 | if a dfn sets a stop bit on itself, it doesn't stop there until next time it is called |
20581 | N ⎕TALLOC 2 should provide ⎕TPOOL, filtered to the tokens from range N |
20599 | Non-Wndows: 2300⌶0 generates a syserror 999 with DYALOG_NETCORE=1 |
20603 | a←⍬ ⋄(↑¨a)+←1 gives a syserror 999 |
20604 | a←⍬ ⋄ (1↑0¨a)← gives a syserror 999 |
20607 | ''⎕R(('')⎕R''⍕)'' generates a syserror 999 |
20613 | {0:⎕⋄{←⍸⎕OR'f'}⍬⊣⎕LOCK⎕FX'r←f' '←⍨'}'' gives a syserror 999 |
20617 | All workspaces in release must be saved having run 5171⌶# and 5172⌶0 |
20620 | Enhancement: do not permit log files to be read in other versions or editions. Widths and platforms should be ok |
20622 | DOMAIN ERROR and/or syserror when using 5171⌶ under program control |
20623 | The default for showing the gutter in the tty interface should be off |
20624 | Extend 2400⌶ to include "remove source as typed", clear ⎕DM(X) and call )reset and remove all Loaded file information |
20626 | AIX Only? With zero-length LOG_FILE redirecting 1 & 2 generates a "Failed to complete read of log file" message |
20627 | Cursor position incorrect on bottom line of session |
20629 | ⎕FX'f' '' ⋄ (⎕OR'f')⍣≡⎕OR&'' generates both an AFFIRM error and a VALUE error |
20630 | ⌷0)0+(/[0])0 generates an AFFIRM error |
20632 | ≡''⎕S{≡⊂⎕CSV⍟1}⊂⎕UCS∊0 generates an AFFIRM error |
20633 | h←0 ⋄ ((,,,)⊃⌽h)←0 generates an AFFIRM error |
20639 | No error is reported from )CS non_existent_namespace until you hit ER |
20660 | syserror 999 from: '∧≠∨≥≤⍲'{w←0⋄t←0∇(↑)⋄∨.{i←⍎⍺'.'⍵⋄(⊢(t∘t)⍉)0)}⍀⍺}0 |
20661 | ⎕FX'f' 'n←⎕←{*******}' ⋄ f gives an AFFIRM ERROR |
20664 | {(a←⎕NS¨⍬⍬).b←0⋄n←0⋄a[].^→0}0 gives an AFFIRM ERROR |
20667 | 4(↑{⎕←x←⍺⋄x[2⊂3]~←⍵}↓)6⍴1 0 generates an AFFIRM ERROR |
20669 | x←/⋄≡⎕THIS⎕THIS[].x⎕THIS⎕TS[0] generates an AFFIRM ERROR |
20676 | ⎕JSON⍠'Charset' 'ASCII' fails above ⎕UCS 65535 |
20681 | The word "Setup" when typed into the session is shown in reverse video; in 18.2 it was in grey |
20688 | Move Dyalog.Utils from SALT to qSE |
20703 | After "save in the workspace only", the editor reads source from file |
20712 | 0⍕⎕OR of a tradfn gives WS FULL instead of DOMAIN ERROR |
20716 | can't resume all threads when in an editor callback should not have a "Don't show this message again" checkbox |
20721 | The configuration parameter INIFILE is being ignored |
20723 | ⎕se.⎕wg'PropList' incorrectly includes RadiusMode |
20724 | Stencil should give an error when the stencil size is 1 and the length is 0, and when the stencil size is 2 and the lenght is 1. |
20729 | Get suspension when attempting to ⎕fix a class which calls a function which attempts a :With or ⎕cs |
20743 | Remove rconnect workspace and documentation from 19.0 installation images |
20752 | Different result in 19.0 with traps, dfns and ⎕SIGNAL |
20757 | Window>Close all windows doesn't work |
20761 | Syserror 123 with Chart Wizard having added InjectReferences whenever SALT does a ⎕FIX |
20767 | The "Failed to complete write of log file" message uses 4-byte characters so is difficult to read |
20768 | Get "Failed to complete write of log file" message when attempting to write to /dev/null |
20772 | Windows only: 100% CPU core usage when awaiting ⍞ input |
20773 | ¯30⎕DT must allow negative IDNs |
20778 | 3 1 {⍸≡↓↓{+/,⍵}⌺⍺⊢⍵}⍪0 0 generates a syserror 5 when you call wscheck |
20779 | Windows Classic only: ⎕←ai←⎕ai⋄{_←⎕DL 2⋄⎕←'X' (⎕ai-#.ai)}&0⋄⎕TNUMS hangs until focus is returned to the session |
20783 | )save should refuse to overwrite a workspace saved by an earlier version - insist on using -force option |
20786 | Stencil idioms give unexpected rank error |
20787 | Since 19.0: A←3 3⍴3 ⋄ {+/,A×⍵}{⍺⍺⌺3 3⊢3 3⍴3}⍬ gives a syserror 999 |
20790 | The tracer shows a function with "Class" in the statusfield, and fixing the fn in the editor generates errors |
20799 | syserror 11 from running misc190 twice |
20809 | ⎕DT and friends should support broken-down dates up to 9999-12-31 |
20818 | After pressing a button in the APL language bar in Classic Dyalog, tips do not work properly |
20819 | Occasional difficulty resizing or moving a form with a configure event in a multi-threaded application |
20832 | Unexpected multi-line input when printing ⎕DMX next to other array |
20854 | ⎕profile under windows only resolves up to 10 or 15ms, depending on the system |
20865 | The second and subsequent lines of multiline input are indented one space further than the first |
20866 | NCOPY callbacks - garbled names in ⍵[3].Last on Classic |
20867 | NCOPY callback errors do not have DMX info |
20878 | Please add Cider & Tatin packages to 19.0 |
20882 | Add NuGet to [DYALOG]StartupSession |
20915 | If you copy from Dyalog and paste HTML format (e.g. into Gmail or Teams), the title "Pasted from Dyalog" is inserted |
20916 | Add ⍝ between ws name and date in output from )save, )load etc |
20919 | Multiline session input: { <NL> [ <NL> } generates a syserror 6 (and (Windows) you can't copy and paste this either) |
20921 | Remove RIDE User Guide PDF from the v19.0 build onwards |
20935 | A compaction of the session log during syntax colouring could cause a syserror 999 |
20947 | Add ≢⍤⊢ as synomon for ⊢∘≢ in key |
20960 | 19.0 Fuzz interpreter: ≡⍴∪0 645⎕DR 5⍴0j1 and many other complex-related ⎕dr expresssions generate core files |
20976 | dotnet not working on Mac |
20994 | Add startup flag to check arrays returned to interpreter from DWA |
20996 | Putting DYALOG in a config file causes problems if the interpreter is subsequently moved |
21002 | NCOPY/NMOVE callback function is run in incorrect namespace |
21005 | Attempting to map a directory gives different errors under Windows and Linux |
21009 | Text for a message box when the file is no longer available is self-contradictory |
21034 | Calling a .NET Core function that generates an exception on a different thread calls the interpreter on the wrong thread |
21052 | HTMLRenderer window does not show up in taskbar or task switcher |
21070 | Odd value error with assigning into the result of a dotted and indexed expression |
21074 | ]tools.activate -reset does not return a result |
21075 | Syserror or crash after )clear after running using Cider to open and close a project |
21082 | The editor does not honour the flags used with ⎕FIX when ref-FIXing a class after an edit. |
21083 | Dyalog disappears after adding a method to a class and fixing it |
21097 | Start in is set to "%USERPROFILE%\Documents\Dyalog APL 19.0 Unicode Files" but we create C:\Users\bhc\Documents\Dyalog APL-64 |
21099 | Use .NET 8.0.1 rather than .NET 8.0.0 (after beta 2 is released) |
21102 | .NET CORE Dyalogc.exe should not list Isolation modes in usage |
21110 | ⎕NCOPY/⎕NMOVE syserror 999 when right argument is a nested vector, and the callback function has an error in it. |
21112 | .NET samples are significantly increasing installation image size |
21113 | When Link and SALT are enabled, "empty" workspaces on disk are 300-500KB larger than when they're not enabled |
21131 | From tracer open current function (created using Del editor or )ed) in the editor: any stop bits do not appear in the editor |
21138 | It's not possible to pass a reference to a NetControl object to a .NET object as a method argument or property value |
21149 | ED on a name in the tracer may incorrectly insert a new function in the text |
21155 | Windows: Minimizing a "Classic Mode" edit window doesn't put it in the taskbar |
21156 | If syserror calls syserror the interpreter calls exit() which kills multihosted applications |
21168 | Editor no longer honours the Tab stops setting when reformatting control structures |
21183 | Rename the .NET Core Interface Guide to the .NET Interface Guide in the builds |
21188 | Configure -> Session -> Extended Multiline Input (experimental) checkbox needs to match registry/config parameter or default |
21202 | Attempting to type APL characters into a ⎕WC Edit field can stall the GUI |
21220 | Thread Switching in the interpreters is affected by an EOF error from stdin |
21222 | ⎕DQ '.' does not include HTMLRenderers |