Changes in Poly/ML Version 5.5
Major New Features
Storage management rewrite. The storage management system
has been almost completely rewritten. The garbage collector
is parallelised and a new mechanism has been introduced to
adjust the size of the heap. When space is very short an
extra pass may be triggered that merges immutable cells with
the same contents. Thanks to Tobias Nipkow and the Technical
University of Munich for support for this work.
PolyML.shareCommonData has been parallelised and now uses a
dynamic stack to avoid a possible segfault if the C stack
overflows with deep data structures.
There is now support for 64-bit on Windows using either
mingw or Visual Studio.
Added a PolyML.Statistics structure to extract information
about the current ML program or that running in another
process.
The standard "text" and "data" areas are now used for
exported object files. In particular this removes the need
for --segprot when linking the object files on Mac OS X with
previous versions.
libffi is now used for foreign function interface
(CInterface). Among other things this allows the full range
of types to be use on X86/64. A version of libffi is
included in the source but those packaging Poly/ML may
prefer to use the --with-system-libffi option to the
configure script to use the version installed on the
machine.
Withdrawn support for native-code on PPC and Sparc. The
configure script will now fall back to the interpreted
version on these platforms.
Minor Additions and Changes
Added G, M, K suffix to RTS arguments for --maxheap and --minheap.
Some changes to where "op" is allowed to conform more
closely to the Definition.
--debug and --logfile options. These allow fine control of
debugging information within the run-time system.
Added --error-exit option to terminate the top-level loop if
any command raises an exception.
Added PolyML.IntInf with gcd and lcm functions to use GMP's
gcd function if available.
Added PolyML.Compiler.allocationProfiling to work with
PolyML.profiling 4. This causes each full GC to print a
profile indicating where the currently live data has been
allocated.
Removed NetDB structure from the library since this was in
an early draft of the basis library but not in the final book.
Added PolyML.Codetree structure within PolyML. This allows
ML code to build intermediate code data structures and
generate machine code from them.
Added "--use FILENAME" command line argument to run a command
from a file before starting the main Read-Eval-Print loop.
Bug Fixes
Fixes related to Word32 on X86-64 and Word.~>>.
Vol allocation locking issue
Floating point box issue
Fix some functions in the Windows structure to match the
Basis Library definition
Fix a possible crash if a GC happened while another thread
was in foreign code.
Fix error in printer function for a datatype where the
effect of PolyML.print_depth depended on the posiition
of a constructor in the datatype.
Fix bug with flexible record handling.
Fix Real.fmt and Real.toString to conform to the Basis
Library definition.
Fix Real.abs with nan argument.
Fix IEEEReal.toString for nan argument.
Fix code-generator bug which resulted in incorrect result
for Real.nextAfter.
Fix bug the produced Subscript exceptions in stream IO.
Changes in Poly/ML Version 5.4
Major New Features
* Major rewrite of the X86 code-generator and combining the 32 and
64-bit versions into a single module. It now supports the floating
point instructions.
* Changes to the way functions with polymorphic equality are
handled to eliminate the "structural equality" code.
* Uses the GMP library if that is available when Poly/ML is
built otherwise falls back to the old Poly/ML code.
Minor Additions and Changes
* Added a SingleAssignment structure
* Support for the Itanium processor using the interpreted version.
* Various bug fixes.
Major New Features
- Addition of IDE interface support.
- Changes to pretty-printing and equality. These are now inherited
across module boundaries. Addition of PolyML.addPrettyPrinter
to install a new-style pretty printer.
- Reworked implementation of signatures reducing the memory
requirements when a named signature is used in multiple places.
- Improvements to printing of types and error messages.
Minor Additions and Changes
- Support for out-of-tree builds
- Added finalisation for foreign-function interface (CInterface)
- Removed remaining support for ML90
- Added PolyML.sourceLocation pseudo-function that returns the current
source location, PolyML.raiseWithLocation that raises an exception
with an explicit location and PolyML.exceptionLocation that returns
the location where an exception was raised.
- Added PolyML.Compiler.reportUnreferencedIds switch to enable reporting
of unreferenced identifiers.
- Added breakEx and clearEx to debugger functions.
These enter the debugger when the code raises a given exception.
- Improvement to resonsiveness to pipes especially in Windows.
- Added X86-64 version of Word32 structure. 64-bit machines
do not require 32-bit values to be "boxed".
Bug Fixes
- Now builds on Mac OS X 10.6 (Snow Leopard)
- Fix multi-threading on Sparc but now only supports v9 processors.
- Fix timing-related crash when Poly/ML exits
- Fix string argument to OS.SysErr exception
- Fix to OS.FileSys.mkDir in Windows
- Fix to pow(~1, n) where n is even
- Various fixes to conform more closely to the standard.