1.6 Release Notes

Collected release-notes. This section only contains some highlights. Smaller changes to especially older releases have been removed. For a complete log, see the file ChangeLog from the distribution.

1.6.1 Version 1.8 Release Notes

Version 1.8 offers a stack-shifter to provide dynamically expanding stacks on machines that do not offer operating-system support for implementing dynamic stacks.

1.6.2 Version 1.9 Release Notes

Version 1.9 offers better portability including an MS-Windows 3.1 version. Changes to the Prolog system include:

1.6.3 Version 2.0 Release Notes

New features offered:

1.6.4 Version 2.5 Release Notes

Version 2.5 is an intermediate release on the path from 2.1 to 3.0. All changes are to the foreign-language interface, both to user- and system-predicates implemented in the C-language. The aim is twofold. First of all to make garbage-collection and stack-expansion (stack-shifts) possible while foreign code is active without the C-programmer having to worry about locking and unlocking C-variables pointing to Prolog terms. The new approach is closely compatible to the Quintus and SICStus Prolog foreign interface using the +term argument specification (see their respective manuals). This allows for writing foreign interfaces that are easily portable over these three Prolog platforms.

Apart from various bug fixes listed in the ChangeLog file, these are the main changes since 2.1.0:

1.6.5 Version 2.6 Release Notes

Version 2.6 provides a stable implementation of the features added in the 2.5.x releases, but at the same time implements a number of new features that may have impact on the system stability.

1.6.6 Version 2.7 Release Notes

Version 2.7 reorganises the entire data-representation of the Prolog data itself. The aim is to remove most of the assumption on the machine's memory layout to improve portability in general and enable embedding on systems where the memory layout may depend on invocation or on how the executable is linked. The latter is notably a problem on the Win32 platforms. Porting to 64-bit architectures is feasible now.

Furthermore, 2.7 lifts the limits on arity of predicates and number of variables in a clause considerably and allow for further expansion at minimal cost.

1.6.7 Version 2.8 Release Notes

With version 2.8, we declare the data-representation changes of 2.7.x stable. Version 2.8 exploits the changes of 2.7 to support 64-bit processors like the DEC Alpha. As of version 2.8.5, the representation of recorded terms has changed, and terms on the heap are now represented in a compiled format. SWI-Prolog no longer limits the use of malloc() or uses assumptions on the addresses returned by this function.

1.6.8 Version 2.9 Release Notes

Version 2.9 is the next step towards version 3.0, improving ISO compliance and introducing ISO compliant exception handling. New are catch/3, throw/1, abolish/1, write_term/[2,3], write_canonical/[1,2] and the C-functions PL_exception() and PL_throw(). The predicates display/[1,2] and displayq/[1,2] have been moved to library(backcomp), so old code referring to them will autoload them.

The interface to PL_open_query() has changed. The debug argument is replaced by a bitwise or'ed flags argument. The values FALSE and TRUE have their familiar meaning, making old code using these constants compatible. Non-zero values other than TRUE (1) will be interpreted different.

1.6.9 Version 3.0 Release Notes

Complete redesign of the saved-state mechanism, providing the possibility of `program resources'. See resource/3, open_resource/3, and qsave_program/[1,2].

1.6.10 Version 3.1 Release Notes

Improvements on exception-handling. Allows relating software interrupts (signals) to exceptions, handling signals in Prolog and C (see on_signal/3 and PL_signal()). Prolog stack overflows now raise the resource_error exception and thus can be handled in Prolog using catch/3.

1.6.11 Version 3.3 Release Notes

Version 3.3 is a major release, changing many things internally and externally. The highlights are a complete redesign of the high-level I/O system, which is now based on explicit streams rather then current input/output. The old Edinburgh predicates (see/1, tell/1, etc.) are now defined on top of this layer instead of the other way around. This fixes various internal problems and removes Prolog limits on the number of streams.

Much progress has been made to improve ISO compliance: handling strings as lists of one-character atoms is now supported (next to character codes as integers). Many more exceptions have been added and printing of exceptions and messages is rationalised using Quintus and SICStus Prolog compatible print_message/2, message_hook/3 and print_message_lines/3. All predicates described in Deransart et al., 1996 are now implemented.

As of version 3.3, SWI-Prolog adheres the ISO logical update view for dynamic predicates. See section 4.13.1 for details.

SWI-Prolog 3.3 includes garbage collection on atoms, removing the last serious memory leak especially in text-manipulation applications. See section In addition, both the user-level and foreign interface supports atoms holding 0-bytes.

Finally, an alpha version of a multi-threaded SWI-Prolog for Linux is added. This version is still much slower than the single-threaded version due to frequent access to `thread-local-data' as well as some too detailed mutex locks. The basic thread API is ready for serious use and testing however. See section 8. Incompatible changes

A number of incompatible changes result from this upgrade. They are all easily fixed however.

1.6.12 Version 3.4 Release Notes

The 3.4 release is a consolidation release. It consolidates the improvements and standard conformance of the 3.3 releases. This version is closely compatible with the 3.3 version except for one important change:

1.6.13 Version 4.0 Release Notes

As of version 4.0 the standard distribution of SWI-Prolog is bundled with a number of its popular extension packages, among which the now open source XPCE GUI toolkit (see section 1.5). No significant changes have been made to the basic SWI-Prolog engine.

Some useful tricks in the integrated environment:

1.6.14 Version 5.0 Release Notes

Version 5.0 marks a breakpoint in the philosophy, where SWI-Prolog moves from a dual GPL/proprietary to a uniform LGPL (Lesser GNU Public Licence) schema, providing a widely usable Free Source Prolog implementation.

On the technical site the development environment, consisting of source-level debugger, integrated editor and various analysis and navigation tools progress steadily towards a mature set of tools.

Many portability issues have been improved, including a port to MacOS X (Darwin).

For details, please visit the new website at http://www.swi-prolog.org

1.6.15 Version 5.1 Release Notes

Version 5.1 is a beta-serie introducing portable multi-threading. See chapter 8. In addition it introduces many new facilities to support server applications, such as the new library(rlimit) library to limit system resources and the possibility to set timeouts on input streams.

1.6.16 Version 5.2 Release Notes

Version 5.2 consolidates the 5.1.x beta series that introduced threading and many related modifications to the kernel.

1.6.17 Version 5.3 Release Notes

Version 5.3.x is a development series for adding coroutining, constraints, global variables, cyclic terms (infinite trees) and other goodies to the kernel. The package JPL, providing a bidirectional Java/Prolog interface is added to the common source-tree and common binary packages.

1.6.18 Version 5.4 Release Notes

Version 5.4 consolidates the 5.3.x beta series.

1.6.19 Version 5.5 Release Notes

Version 5.5.x provides support for wide characters with UTF-8 and UNICODE I/O (section 2.17.1). On both 32 and 64-bit hardware Prolog integers are now at minimum 64-bit integers. If available, SWI-Prolog arithmetic uses the GNU GMP library to provided unbounded integer arithmetic as well as rational arithmetic. Adding GMP support is sponsored by Scientific Software and Systems Limited, www.sss.co.nz. This version also incorporates clp(r) by Christian Holzbaur, brought to SWI-Prolog by Tom Schrijvers and Leslie De Koninck (section A.8).

1.6.20 Version 5.6 Release Notes

Version 5.6 consolidates the 5.5.x beta series.