Open Dylan 2020.1¶
This document describes the 2020.1 release of Open Dylan, released 10 October, 2020. This release contains many enhancements and bug fixes, highlights of which are listed below. For complete details see the opendylan commit logs. (Note that some commit logs, for example for testworks and other libraries that are included in Open Dylan as git submodules, may be in other repositories.)
Download the release: https://opendylan.org/download
Read documentation: https://opendylan.org
Report problems: https://github.com/dylan-lang/opendylan/issues
Compiler¶
The default compiler-back-end is now selected by querying the
SUPPORTED_COMPILER_BACK_ENDS
build system variable, normally set at configuration time within theconfig.jam
build script:SUPPORTED_COMPILER_BACK_ENDS ?= llvm c ;
At build time, if the selected back-end is not supported by the build-system configuration, a warning will be issued.
The default back-end, when it is available, is now LLVM.
In the LLVM back-end, improved alignment information is supplied to the
llvm.memcpy
intrinsic.A new
primitive-the
primitive function is supported as an annotation that allows the compiler to assume that a value has the given type. These annotations were also added to thedylan
library at various frequently-executed expressions where the compiler is otherwise unable to infer the type, reducing the number of run-time type checks when using the LLVM back-end.Optimization for cases where the
instance?
function is used in anif
orcase
condition has been improved.A bug in the LLVM back-end that could cause stack overflows in long-running functions has been fixed.
The C back-end now uses C99 hexadecimal floating-point constants in its output to prevent loss of precision due to decimal conversion.
A longstanding bug in an attempted optimization that caused spurious serious warnings when compiling the Dylan library has been fixed.
A failure of code generated by the LLVM back-end to detect integer overflows resulting from arithmetic shifts has been fixed.
A failure to detect argument mismatches when known functions are called using
apply
has been fixed.Calls to functions that do not return are now properly recognized by the LLVM code generator.
The failure of the LLVM back-end to include NUL termination in
<byte-string>
instances in the generated heap has been fixed. (NUL termination is added so that string data can be passed to FFI functions without requiring allocation and copying.)Compiler error messages now include column numbers (in GNU standard format) when referring to source locations. Debug information generated by the LLVM back-end also includes column numbers.
The compiler can now output etags-format TAGS tables using the
export tags
command.The command-line compiler now displays a text mode progress bar during the compilation and link phases.
The compiler no longer generates dispatch coloring information in Emacs Lisp format by default. When it is needed, it can still be requested by supplying the
-dispatch-coloring elisp
command-line option at build time. (Note that the IDE dispatch coloring display does not make use of the elisp-format files.)The LLVM back-end now tracks function inlining in generated debug information, allowing breakpoints to be set in inlined code. (Note, however, that functions inlined from the
dylan
library are excluded.)The HARP back-end is no longer supported on x86 Linux because it is not able to maintain the stack alignment that C code requires on that platform.
A bug that prevented the error output of build commands (such as the linker) from appearing in
build.log
files and the console output has been fixed.
Run-time¶
An error in the LLVM run-time which prevented call-site method dispatch caches from being used has been fixed. This change significantly improves the performance of code using the LLVM back-end.
Support for
apply-mep
method entry (used for calling a known method usingapply
when next-methods of the call are known) was added to the LLVM run-time.The interpretation of
decode-double-float
andencode-double-float
on 64-bit platforms has changed, so that 32 bits of the<double-float>
value are found in each of the two<machine-word>
values. Previously (on 64-bit platforms) the entire 64 bits were placed in one<machine-word>
and the other contained zeroes. This change fixes bug 1254.A problem with thread exit that could cause thread finalization cycle warnings from the garbage collector has been fixed.
The LLVM run-time on 32-bit x86 platforms now clears the x87 stack when handling exceptions to prevent overflowing the 8-slot FPU stack.
Platform Support¶
The AArch64 (64-bit ARM) platform is now supported on Linux.
The 32-bit x86-darwin platform is no longer supported, since macOS 10.15 (Catalina) and later can no longer support running 32-bit applications.
IDE¶
The Visual SourceSafe source control interface for the Windows environment has been removed.
CORBA¶
The Scepter IDL compiler can now
#include
files via symbolic links.Scepter IDL compiler
#include
file open errors are now properly signaled.Problems with Portable Object Adapter shutdown have been fixed.
The
TypeCode
type predefined by Scepter now appears in theCORBA
IDL module.IDL forward declarations of structures and unions are now properly supported.
Typecode marshalling and interpretation has been fixed.
The CORBA run-time and the IDL compiler now support
long long
andunsigned long long
types.Marshalling of sequences and arrays to
<Any>
pseudo-objects is now supported by the CORBA run-time.The deprecated IOP field
requesting_principal
is now filled in with a empty octet sequence, fixing interoperability with other ORBs.LocateReply
responses sent from a POA have been fixed.The Scepter and CORBA runtime unit tests have been improved.
The CORBA demo applications have been updated.
References in the source code to “Functional Developer ORB” are now updated to “Open Dylan ORB”.
DUIM¶
The obsolete
GDK_SOLID
constant is no longer referenced from the DUIM back-end for GTK.
GTK¶
The obsolete
gdk-pixbuf-gettext
function is no longer included in the GTK bindings.A type error that prevented GObject casts from working properly has been fixed.
Debugging¶
The LLDB debugger support has been updated to work with Python 3. For more information, see Debugging with GDB or LLDB.
Documentation¶
Dylan Reference Manual links were added to An Introduction to Dylan.
Index sections were added to Getting Started with the Open Dylan IDE, Building Applications With DUIM.
Build System¶
The build system now reliably detects when changes have been made to Jamfile sources while the environment is running.
The
fdmake.pl
build tool used during bootstrapping was improved so that it can build multiple libraries for each invocation of dylan-compiler, significantly reducing the time required to do bootstrap builds.
Library Changes¶
dylan Library¶
A bug that broke
limited(<array>)
instantiation has been fixed.
common-dylan Library¶
The simple-io module has been removed. This module was deprecated in Open Dylan 2014.1 and is replaced by the simple-format module.
The performance of the
join
method was improved.The
split
function now signals an error when called with an empty separator (e.g., the empty string) or with a separator function that returns start/end indices that are equal.
io Library¶
A longstanding bug in the tab position computation used by the
pprint-tab
function is now fixed.The unit tests for the pprint and print modules were improved.
*print-escape?*
and theescape?
parameter for theprint
function have been documented.The
printing-object
macro has been documented.
system Library¶
Library initialization under the LLVM back-end has been changed to enable using the
load-library
function on all supported platforms.The
load-library
function will now signal an<error>
if it fails.A bug in delete-directory:file-system:system was fixed.
A bug that prevented file open failures from being detected on 64-bit platforms has been fixed.
A bug that affected the
file-type
function on macOS has been fixed.The
run-application:operating-system:system
function has changed to accept the command as a<sequence>
instead of a limited type. This simplifies the specification of the command at the call site.There have been several improvements to the
locators
module:Locators always show the path when printed, for improved debugging.
simplify-locator
now resolves..
correctly.The
resolve-locator
function has been added. It is similar tosimplify-locator
but also resolves links in the file system.merge-locators
now correctly handles merging a directory locator from a file locator that has no directory component. Example:merge-locators(as(<directory-locator>, "a/"), as(<file-locator>, "b")) => {<file-locator> "a/b"}
merge-locators
no longer callssimplify-locator
. Because the semantics of simplifying a locator depend on whether or not the file system is checked (i.e.,simplify-locator
vsresolve-locator
) it is left to end-user code to decide whether and how to do it.
c-ffi Library¶
The import mapping for types such as
<C-int>
has been changed to return a<abstract-integer>
(as per the original design) rather than<machine-word>
. The Win32 and OLE interface libraries were modified to accommodate this change.LLVM code generation for C-FFI code that requires type casting or sign extension has been fixed.
network library¶
A deadlock that occurred when shutting down listening socket threads has been fixed.
Error code generation on BSD operating systems has been fixed.
testworks Library¶
A new executable library, testworks-run, can be used to run any test library compiled as a shared library. On Linux,
testworks-run --load libmy-test-library.so
.The testworks-specs library has been folded into testworks and has been greatly simplified. See Interface Specification Suites. Note that the new specification suites no longer expect you to define one test per exported name in your interface module. Instead you can write tests in whatever way best suits your needs and the interface specification suite only verifies that the specification matches the implementation.
A new function has been added to retrieve a unique directory for the current test:
test-temp-directory
The –report command line option now accepts “full” as a value, meaning to display individual assertion results in addition to the normal output.
Support for benchmarks has been improved. A new
benchmark-repeat
macro for use within testworks runs its body multiple times, causing the “full” report to display basic statistics characterizing the benchmark execution.The output for several assertions has been made less verbose.
Use
--report json
to generate reports in JSON format. These are much like the XML reports but less verbose.--report log
has been removed. Use--report json
or--report xml
instead.The testworks-report library has received some love and is now able to parse json and xml reports.
An error is signalled if two tests are defined with the same name. (Note that when using combined test suites, or using the
--load
testworks-run option multiple times the names of all loaded tests and suites must be unique.)When a test has no assertions it receives a “not implemented” result. This is now considered to be a passing result rather than failing. The reasoning is that “not implemented” should be a reminder to implement the test (so it is still displayed prominently in the test output) but it should not obscure real test failures in the results. Tests that fail constantly because they’re unimplemented are not very useful.
collections Library¶
A warning displayed when compiling the collections library with the LLVM back-end has been fixed.
big-integers library¶
The
integer-length
function is now implemented for<double-integer>
.
progress-stream library¶
A new library for displaying text mode progress bars is provided.
gabriel-benchmarks library¶
The Gabriel benchmarks have been improved and brought in line with the Common Lisp cl-bench project, and now make use of the Testworks benchmarking facilities.
Contributors¶
We’d like to thank all the people that made contributions to this release and to surrounding libraries in the Dylan ecosystem. This list is probably incomplete…
Peter S. Housel
Carl Gay
Peter Hull
Fernando Raya
Tim McNamara
Alfredo Beaumont
Bruce Mitchener