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.
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.
Version 1.9 offers better portability including an MS-Windows 3.1 version. Changes to the Prolog system include:
New features offered:
SWI-Stream.h. Physical I/O of Prolog streams may be redefined through the foreign language interface, facilitating much simpler integration in window environments.
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
argument specification (see their respective manuals). This allows for
writing foreign interfaces that are easily portable over these three
Apart from various bug fixes listed in the ChangeLog file, these are the main changes since 2.1.0:
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.
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.
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.
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
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
TRUE have their familiar meaning,
making old code using these constants compatible. Non-zero values other
TRUE (1) will be interpreted different.
Complete redesign of the saved-state mechanism, providing the possibility of `program resources'. See resource/3, open_resource/3, and qsave_program/[1,2].
Improvements on exception-handling. Allows relating software
interrupts (signals) to exceptions, handling signals in Prolog and C
and PL_signal()). Prolog stack overflows now raise the
exception and thus can be handled in Prolog using catch/3.
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 22.214.171.124. 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.
A number of incompatible changes result from this upgrade. They are all easily fixed however.
atom_codes. If you do not want to change any source-code, you might want to use
library(backcomp)provides definitions for these predicates, so no source must be updated.
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:
has no error conditions, runtime checking cannot be done. To simplify
debugging, the library module
print references to select/3
in your source code and install a version of select that enters the
debugger if select is called and the second argument is not a list.
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:
library(emacs/swi_prolog)that cause edit/1 to use the built-in PceEmacs editor.
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
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
library(rlimit) library to limit system resources
and the possibility to set timeouts on input streams.
Version 5.2 consolidates the 5.1.x beta series that introduced threading and many related modifications to the kernel.
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.
Version 5.4 consolidates the 5.3.x beta series.
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).
Version 5.6 consolidates the 5.5.x beta series.