APL+Win v10.0
Here are the enhancements included in the new APL+Win v10.0 version:
  1. System speed and memory capacity have increased dramatically.
    This is the fastest APL+Win system ever! Some applications now run in as little as half the time they required on the previous version.
    Maximum workspace size has grown from about 1.6 GB previously to 3.6 GB (on Win64 systems) and 2.6 GB (onWin32 systems with 4GT enabled).
  2. Support for bigger sized arrays in the workspace.
    In the previous version, the array was just limited to 214,748,352 elements. In APL+Win v10.0, the array may be as big as 2,147,483,647 elements (10x bigger) or up to 2 GB in size, whichever is smaller.
  3. Good programming practices are encouraged via separate debug and release execution modes. Debug mode can be used during development whenever correctness testing is critical, whereas release mode can be used for application deployment whenever speed is critical. The :DEBUG, :TRACE, :ASSERT and :IFDEBUG statements execute only during debug mode. When release mode is enabled, inner-statement flow is optimized to completely avoid execution of debug statements, making them logically invisible with zero execution cost as if they were comments.
  4. In addition to debug mode, a rudimentary testing infrastructure facilitates semi-automatic self-testing. Tests coded in :TEST … :ENDTEST blocks are logically invisible during normal execution. Test blocks may be defined directly inside the functions they test or elsewhere.
  5. The TraceLog feature can capture execution history of up to 134 million statements with less than 2% performance penalty. This makes it possible to explore control flow errors without modifying the code or slowing it down enough to make bug mutation likely.
  6. A crash recovery mechanism supports automatic application restart in the event of failure. It creates a crash log file containing information useful for debugging and a MiniDump file, which APL2000 can execute with a post-mortem debugger, to help diagnose and fix bugs in the APL+Win system or determine if the crash is happening in a third party component.
  7. Most debugging and tracing features can be re-enabled after application release via configuration file settings, manually edited by the client or via debugging options on the application‟s menus. This can help diagnose bugs that only occur at client sites and cannot be reproduced in the lab.
  8. Complex logical calculations can now be concisely coded via the experimental Inline Control Sequences (ICS) feature using :AND, :OR, :THEN, :ELSE and :CHOOSE keywords embedded in expressions. They are evaluated progressively similar to the &&, ||, and ? operators found in C, C++, C#, JavaScript, etc.
  9. The :RETURN statement allows a result expression as an optional argument. When an argument is coded, its value is returned as the function‟s result, shortcutting the normal two step process of assigning a result variable and then returning. Without an argument, :RETURN behaves normally.
  10. The :RETURNIF, :LEAVEIF and :CONTINUEIF statements do conditional exit/continue with a single statement rather than a three statement :IF … :ENDIF sequence surrounding a :RETURN, :LEAVE or :CONTINUE statement. :RETURNIF also allows an optional result value argument.
  11. The :TRY statement has a new mechanism to pop errors that occur in called functions back to its handling context regardless of the ambient ⎕ELX setting. Its :CATCH clause supports wildcard pattern matching, which is more concise and efficient than :CATCHIF. Its :FINALLY clause defines an always-executed block of code, which runs no matter how the :TRY statement is exited.
  12. The :TRYALL statement provides resume-on-next-line error handling, which is more convenient in some cases than traditional :TRY … :CATCH or ⎕ELX error handling. It is similar to the APL+Win v10 effect of setting ⎕elx←'→⎕LC+1' but without the problems doing so could create in called functions.
  13. The :SELECT statement supports a wildcard pattern matching :LIKE clause, which uses the same notation as :CATCH, as an alternative form of :CASE and :CASELIST clauses. It also supports a :NEXTCASE statement to flow from one case into the next without branching.
  14. The :FOR statement now supports multi-variable strand notation to the left of :IN keyword.
  15. ⎕VALENCE, ⎕MONADIC and ⎕DYADIC functions to simplify testing of valence and ⎕NOVALUE variable to explicitly indicate no value.
  16. The ⎕THROW function is similar to ⎕ERROR except it throws the error in the context of the calling function rather than exiting from the function before throwing it. This allows errors thrown in a :TRY block to be handled locally rather than existing from the function.
  17. The ⎕LOG function routes output to a debug log file separate from the APL session and/or writes events to the Windows Event Log. The :TRACE statement implicitly calls ⎕LOG in debug mode.
  18. The debugger can now stop for errors at their point of origin and/or handling. This is useful in general but especially for errors in :TRY statements, which were previously impossible to debug.
  19. Unicode clipboard support simplifies inter-user communication, documentation, creation of web pages containing APL code, and helps promote APL in the non-APL community.
  20. The runtime system now loads development and runtime workspaces; workspaces saved with either )save or )rsave.
  21. ⎕WGIVE optimized to execute with less overhead.
  22. Tabs are now treated syntactically the same as blank spaces in APL code when not in quotes.
  23. New “Event Stop Settings” in Code Walker for improved debugging error handling code.
  24. The )TEST system command and the ⎕TEST system function are used to execute statements that are contained inside of the :TEST and :IFTEST blocks of functions.
  25. The :EX statement provides a place to compute something before taking the next decision in cascading decision statements (such as :AND/:OR extensions of :IF/:WHILE).
  26. The ⎕EM system function returns the Error Message part of ⎕DM (the first line up to but not including the first ⎕TCNL).
  27. The ⎕DM system variable supports localization and assignment.
  28. ⎕AT and ⎕SIZE allow scope left arguments.
  29. Orphans are automatically removed from the workspace on all )LOAD, )COPY and )SAVE operations.
  30. The [Config]VirtualCommitPrompt INI parameter controls what happens when virtual memory cannot be committed.
  31. The keyboard shortcut for the Edit/Replace dialog was changed to Ctrl+H. This makes APL+Win consistent with standard Windows Find/Replace key bindings and avoids the undesirable behavior of Ctrl+H destroying the selection rather than bringing up the Replace dialog.