Open Dylan 2016.1 Release Notes¶
This document describes the 2016.1 release of Open Dylan, released XXX XX, 2016.
Dylan Standard Library¶
- Symbol comparisons when using
\=are now the same as using
\==rather than being significantly more expensive. See issue #899.
The arguments to configure for specifying which garbage collector to use have changed (again). The arguments are now:
--with-mps=DIR --with-gc=DIR --with-harp-collector=mps|boehm|malloc --with-c-collector=boehm|malloc --with-llvm-collector=boehm|malloc
with-mpsoption (for pointing to the Memory Pool System source directory) is only needed when using the MPS collector with the HARP back-end on either 32-bit x86 FreeBSD or 32-bit x86 Linux. The system should be able to find the Boehm-Demers-Weiser collector automatically if it is in the standard system install directory; the
with-gcoption should only be needed if it is installed in a non-standard location.
The default collectors are MPS for the HARP back-end’s run-time library, and the Boehm-Demers-Weiser collector for the C and LLVM back-ends. These shouldn’t be changed unless you’re sure you know what you’re doing.
A new option for building C++ code,
c++-source-files, has been added to LID files. This matches the
Nested C structs by value are now supported by the C backend. Previously, using this construct would result in a compilation error in the generated C code.
%objc-msgsendwith a void result type no longer requires specifying a result type of
<raw-c-void>. Simply putting an empty value list is sufficient:
%call-c-function ("SetLastError", c-modifiers: "__stdcall") (dwErrorCode :: <raw-c-unsigned-long>) => () (integer-as-raw(0)) end;
Previously, this required specifying the result type explicitly:
%call-c-function ("SetLastError", c-modifiers: "__stdcall") (dwErrorCode :: <raw-c-unsigned-long>) => (nothing :: <raw-c-void>) (integer-as-raw(0)) end;
bit-vector(also used by
<bit-set>) has been changed to use the new
primitive-machine-word-count-onesthat has been added in this release.
- A new library for doing colored text output has been added. It currently supports ANSI codes on Unix terminals. It has been documented in the library reference.
transcendentalsmodule now has a
transcendentalsmodule now has a
transcendentalsmodule now has an
ilog2function that returns the integer value of the logarithm of a value in base 2.
- The transcendental and hyperbolic functions are no longer sealing their
- Again in the
transcendentalsmodule, many methods have been removed that converted from
<float>. Callers should pass in values of the appropriate type and precision instead. This impacts:
common-dylanlibrary now provides a
classify-floatmethod which will return if the given float is
common-dylanlibrary now provides
from-hexstringmethods for fast conversion from and to hexadecimal strings.
threadmodule has gained a
thread-idis also available for any
simple-profilingmodule now exports
stop-profilingrather than requiring that users directly invoke
machine-wordsmodule now knows how to count the bits set in a machine word via
%count-ones. This is also available as a new compiler primitive,
The compiler emits warnings for issues with
define sealed domain:
Incorrect number of type specializers provided. The number of type specializers must match the number of required parameters for the generic function.
Type specializers are not subtypes of the corresponding required argument of the generic function.
For example, this is useful for catching an incorrect sealing of
define sealed domain make (<my-class>); // Wrong define sealed domain make (singleton(<my-class>)); // Correct
define domainwas accepted without warning. This is not valid Dylan syntax as it should be
define sealed domain.
Dylan functions that are marked as
not-inlinenow take that into account when generating code in the LLVM and C back-ends.
The C back-end no longer generates invalid C when outputting a float with a value of infinity or NaN.
Some bugs that didn’t permit valid floating point literals to be used have been fixed. These are typically edge cases like
-3d3rather than commonly used literal notations.
The C back-end correctly handles indirect C-functions (where a function pointer is given to be invoked rather than a direct function call).
Warnings and errors are now colorized when printing on supporting output devices.
There is a new
dylan-lldbwrapper script which can be used to launch
lldband pre-load the Open Dylan LLDB integration scripts.
lldbis the debugger that is part of the LLVM project. It is the default debugger on macOS.
If you need it to launch a custom build of LLDB, you can set the
OPEN_DYLAN_LLDBenvironment variable to point to an alternative
The documentation generator included within the compiler has been updated to produce better and more accurate documentation that will require less manual editing. To use it, after compiling your library, use this command:
export -format rst -file my-lib.rst interface-reference
- An implementation of indenting streams for handling indented text
output has been added. See
- Some generic functions that apply to
<buffered-stream>have had their signatures tightened.
Support for handling “invalid” floating point exceptions has been added. These are generated when taking the square root of a negative number and other similar situations where the numerical domain is invalid.
When an invalid floating point exception occurs,
<arithmetic-domain-error>will be signaled (much like the other
Limited integer instance checks have been optimized. This will have the most impact when using the LLVM compiler backend.
In the C runtime, the
primitive_sleepnow functions correctly.
Two new primitives,
primitive-read-return-address, have been added. These are useful for writing profiling and event logging tools.