Node:Top, Next:, Previous:(dir), Up:(dir)

SICStus Prolog Release Notes

Release notes for SICStus Prolog release 3.8.1, December 1999. Copyright 1988-1999 SICS, Sweden.

Permission is granted to make and distribute verbatim copies of these notes provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified versions of these notes under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

Permission is granted to copy and distribute translations of these notes into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by SICS.

Node:Overview, Next:, Previous:Top, Up:Top


These notes summarize the changes in release 3 wrt. previous SICStus Prolog releases as well as changes introduced by patch releases. Platform specific information pertaining to certain parts of the system are also documented herein.

Node:Release notes and installation guide for UNIX, Next:, Previous:Overview, Up:Top

Release notes and installation guide for UNIX

This chapter assumes that the environment variable PATH includes <prefix>/bin, where <prefix> points to the SICStus installation directory. The installation directory is specified during installation, see UNIX installation. For example:

csh,tcsh> setenv PATH "/usr/local/bin:$path"
sh,bash,ksh> export PATH="/usr/local/bin:$path"

Node:Setting SP_PATH under UNIX, Next:, Previous:Release notes and installation guide for UNIX, Up:Release notes and installation guide for UNIX

Setting SP_PATH under UNIX

The SP_PATH environment variable can be used to override the location of the SICStus Runtime Library. There are two situations where it is justified to use it.

  1. The --moveable option has been given to spld when building the executable.
  2. The executable is a runtime system, and NULL is passed in the third argument to SP_initialize.

The correct value of this variable in both cases is /usr/local/lib/sicstus-3.8, assuming SICStus was installed in /usr/local.

Node:The Crypt Utility, Next:, Previous:Setting SP_PATH under UNIX, Up:Release notes and installation guide for UNIX

The Crypt Utility

The SICStus binary distributions are encrypted with the crypt program. If you do not have crypt on your machine, you can download a public domain crypt utility available via anonymous FTP from

The enclosed README files describes how to compile it.

Node:UNIX installation, Next:, Previous:The Crypt Utility, Up:Release notes and installation guide for UNIX


Most users will install SICStus from a binary distribution. These are available for all supported platforms. Information on how to download and unpack the binary distribution is sent by email when ordering SICStus.

Binary distributions are installed by executing a interactive installation script called InstallSICStus. Type

% InstallSICStus

and follow the instructions on the screen.

During the installation, you will be required to enter your site-name and license code. These are included in the download instructions.

The installation program does not only copy files to their destination, it also performs final link steps for some of the executables and for the library modules requiring third-party software support (currently library(bdb), library(tcltk), and library(jasper)). This is done in order to adapt to local variations in installation paths and versions.

Compiling SICStus from the sources requires a source code distribution, available on request for customers with maintenance contract. Contact for more info.

Instructions for compiling and installing SICStus from the source code is available in the files README and INSTALL in the source code distribution.

Node:UNIX foreign language interface, Next:, Previous:UNIX installation, Up:Release notes and installation guide for UNIX

Foreign language interface

Node:How to customize splfr, Next:, Previous:UNIX foreign language interface, Up:UNIX foreign language interface

How to customize splfr and spld

The utilities splfr and spld are implemented as Perl scripts and can be customized in order to adapt to local variations. Do not attempt this unless you know what you are doing. Customization is done by editing their common configuration file spld.config. Follow these instructions:

  1. Locate the configuration file spld.config. It should be located in the same directory as splfr and spld.
  2. Make a copy for spld.config, lets call it hacked_spld.config. Do not edit the original file.
  3. The configuration file contains lines on the form CFLAGS=-g -O2. Edit these according to your needs. Do not add or remove any flags.
  4. You may now use the modified spld.config together with spld or splfr like this
    % spld [...] --config=/path/to/hacked_spld.config
    Replace /path/to with the actual path to the hacked configuration file.

Node:How to create dynamic linked foreign resources manually, Next:, Previous:How to customize splfr, Up:UNIX foreign language interface

How to create dynamic linked foreign resources manually

To compile the glue code file and user code, use the compiler options assigned to INCR_CFLAGS by ./configure. In addition also include -DSPDLL.

The object files are then linked into a dynamic linked foreign resource. For this you will normally use the linker whose name was assigned to SHLD by ./configure and linker options assigned to SHLDFLAGS. The resource will consist of the file ResourceName.Suffix where Suffix is the value assigned to SHSFX by ./configure. The defaults are

SHLD= ld
SHLDFLAGS= -shared

E.g. on Sparc/SunOS 5.X:

% cc -c -DSPDLL glue_code.c
% cc -c -DSPDLL mycode.c
% ld -shared glue_code.o mycode.o -o

Libraries needed by the resource should normally also be included in the link command line.

Node:Interfacing to Cplusplus, Previous:How to create dynamic linked foreign resources manually, Up:UNIX foreign language interface

Interfacing to C++

Functions in C++ files which should be called from Prolog must be enclosed like e.g:

extern "C" {
void myfun(long i)

To build a dynamic linked foreign resource with C++ code, you may (depending on platform) have to explicitly include certain libraries. E.g. on Sparc/SunOS 5.X using gcc:

% splfr .... -LD -L/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.4/2.7.0 -lgcc

The library path is installation dependent, of course.

Node:Platform specific UNIX notes, Next:, Previous:UNIX foreign language interface, Up:Release notes and installation guide for UNIX

Platform specific UNIX notes

This section contains some installation notes which are platform specific under UNIX.

Node:Redistributable files UNIX, Previous:Platform specific UNIX notes, Up:Release notes and installation guide for UNIX

Files that may be redistributed with runtime systems

When a runtime system is redistributed to third parties, only the following files may be included in the distribution. All filenames are relative to <prefix>/lib/sicstus-3.8:


Node:Release notes and installation guide for Windows, Next:, Previous:Release notes and installation guide for UNIX, Up:Top

Release notes and installation guide for Windows

This chapter assumes that the environment variable PATH includes %SP_PATH%\bin, where SP_PATH points to the SICStus installation directory. For example:

C:\> set PATH=c:\Program Files\sicstus3\bin;%PATH%

You may also want to include the paths to Tcl/Tk (see Tcl/Tk notes), Java (see Getting Started), and Berkeley DB (see Berkeley DB notes).

Node:Windows Requirements, Next:, Previous:Release notes and installation guide for Windows, Up:Release notes and installation guide for Windows


Node:Windows Installation, Next:, Previous:Windows Requirements, Up:Release notes and installation guide for Windows


The development system comes in two flavors:

  1. A console-based executable which is suitable to run from a DOS-prompt, from batch files, or under Emacs. See Command line editing.
  2. A windowed executable providing command line editing and menus.

The distribution consists of a single, self-installing executable (sp3w32.exe) containing development system, runtime support files, library sources, and manuals.

Installed files on a shared drive can be reused for installation on other machines.

SICStus Prolog requires a license code to run. You should have received from SICS your site name, the expiration date and the code. This information is normally entered during installation:

Expiration date: ExpirationDate
Site: Site
License Code: Code

but it can also be entered later on by executing the following commands at a command prompt:

% splm -i Site
% splm -a sicstus3.8 ExpirationDate Code

Node:Windows notes, Next:, Previous:Windows Installation, Up:Release notes and installation guide for Windows

Windows Notes

Node:Launching Runtime Systems on Target Machines, Next:, Previous:Windows notes, Up:Windows notes

Launching Runtime Systems on Target Machines

This section describes how to launch a runtime system on a so called target machine, i.e. a machine which does not have SICStus installed.

In order to locate all relevant files, the following directory structure is recommended.

+--- bin\
|    +--- sprt.sav
+--- library\
     +--- <files from %SP_PATH%\library>

myapp.exe is typically created by a call to spld:

% spld --main=user [...] -o ./myapp.exe

If the directory containing sprt38.dll contains a directory called sp38, SICStus assumes that it is part of a Runtime System as described in the picture. The runtime library (sprt.sav) is then looked up in the directory (sp38/bin), as in the picture. Furthermore, the initial library_directory/1 fact will initially be set to the same directory with sp38/library appended.

The directory structure under library/ should look like in a regular installed SICStus, including the platform-specific subdirectory (x86-win32-nt-4 in this case). If your application needs to use library(system) and library(random), your directory structure may look like:

+--- bin\
|    +--- sprt.sav
+--- library\
     +--- random.po
     +--- system.po
     +--- x86-win32-nt-4 \
          +--- random.dll
          +--- system.dll

The sp* files can also be put somewhere else in order to be shared by several applications provided the sprt38.dll can be located by the DLL search.

The 38 in the file names above is derived from SICStus's major and minor version numbers, i.e. currently 3 and 8. Naming the files with version number enables applications using different sicstus versions to install the sp* files in the same directory.

Node:Generic Runtime Systems, Next:, Previous:Launching Runtime Systems on Target Machines, Up:Windows notes

Generic Runtime Systems

There are three ready-made runtime systems provided with the distributions, %SP_PATH%\bin\sprt.exe, %SP_PATH%\library\sprtw.exe, and %SP_PATH%\bin\sprti.exe. These are created using spld:

% spld --main=restore main.sav -o sprt.exe
% spld --main=restore main.sav -i -o sprti.exe
% spld --main=restore main.sav --window -o sprtw.exe

These are provided for users who do not have a C-compiler available. The programs launches a runtime system by restoring the saved state main.sav (created by save_program/2) and then call the predicate runtime_entry/1 (defined by the user), setting the first argument to the atom start. Alternatively, the runtime system's entry point may be specified using save_program/2.

The program sprti.exe assumes that the standard streams are connected to a terminal, even if they to not seem to be (useful under Emacs, for example). sprtw.exe is a windowed executable, corresponding to spwin.exe.

For more info on how spld works, see The spld utility.

Node:Setting SP_PATH under Windows, Previous:Generic Runtime Systems, Up:Windows notes

Setting SP_PATH under Windows

The use of the SP_PATH variable under Windows is discouraged, since Windows applications can find out for themselves where they were started from.

SP_PATH is only used if the directory where sprt<ver>.dll is loaded from does not contain sp<ver> (a directory) or sprt.sav (where <ver> is "38" for SICStus version 3.8(.x)). If SP_PATH is used, SICStus expects it to be set such that %SP_PATH%/bin contains sprt.sav. See Launching Runtime Systems on Target Machines.

Node:Command line editing, Next:, Previous:Windows notes, Up:Release notes and installation guide for Windows

Command line editing

Command line editing supporting Emacs-like commands and IBMPC arrow keys is provided in the console-based executable. The following commands are available:

erase previous char
erase next char
kill line
forward char
backward char
begin of line
end of line
previous line
next line
insert space
forward search
reverse search
view history
input next char blindly
kill to end of line

Options may be specified in the file %HOME%\spcmd.ini as:

Option Value

on separate lines. Recognized options are:

Value is the number of lines in the history buffer. 1-100 is accepted; the default is 30.
Value is either 0 (don't save or restore history buffer) or 1 (save history buffer in %HOME%\spcmd.hst on exit, restore history from the same file on start up.

The command line editing is switched off by giving the option -nocmd when starting SICStus. Command line editing will be automatically turned off if SICStus is run with piped input (e.g. from Emacs).

Node:The console, Next:, Previous:Command line editing, Up:Release notes and installation guide for Windows

The console window

The console window used for the windowed executable is based on code written by Jan Wielemaker <>.

In SICStus 3.8 the console was enhanced with menu access to common prolog flags and file operations. Most of these should be self explanatory. The Reconsult item in the File menu reconsults the last file consulted with use of the File menu. It will probably be replaced in the future with something more powerful.

Note that the menus work by simulating user input to the prolog top level or debugger. For this reason it is recommended that the menus are only used when SICStus is waiting for a goal at the top-level (or in a break level) or when the debugger is waiting for a command.

Console Preferences

The stream-based console window is a completely separate library, using its own configuration info. It will look at the environment variable CONSOLE which should contain a string of the form name:value{,name:value} where name is one of:

The number of lines you can scroll back. There is no limit, but the more you specify the more memory will be used. Memory is allocated when data becomes available. The default is 200.
The initial number of lines. The default is 24.
The initial number of columns. The default is 80.
The X coordinate of the top-left corner. The default is CW_USEDEFAULT.
The Y coordinate of the top-left corner. The default is CW_USEDEFAULT.

You will normally specify this in your autoexec.bat file. Here is an example:

% set CONSOLE=sl:600,x:400,y:400

Many of these settings are also accessible from the menu Settings of the console.

Node:Windows Emacs Interface, Next:, Previous:The console, Up:Release notes and installation guide for Windows

Emacs Interface

Choosing <EOF> from the menu seems to generate an eternal <EOF> which is not useful for e.g. escaping a break level. Instead a C-d can be generated by typing C-q C-d.

Node:Windows limitations, Next:, Previous:Windows Emacs Interface, Up:Release notes and installation guide for Windows


Node:Redistributable files Windows, Previous:Windows limitations, Up:Release notes and installation guide for Windows

Files that may be redistributed with runtime systems

When a runtime system is redistributed to third parties, only the following files may be included in the distribution. All filenames are relative to %SP_PATH%:


Node:Tcl/Tk notes, Next:, Previous:Release notes and installation guide for Windows, Up:Top

Tcl/Tk notes

Tcl/Tk itself is not included in the SICStus distribution. It must be installed in order to use the interface. It can be downloaded from the Tcl/Tk primary website:

The Tcl/Tk interface module included in SICStus Prolog 3.8 (library(tcltk)) is verified to work with Tcl/Tk 8.2 (with a few exceptions noted below). Previous versions of the interface have been verified to work with Tcl/Tk versions 7.3/3.6, 7.4/4.0, 7.5/4.1, 7.6/4.2, 8.0, and 8.1. The current version of the interface may or may not work with these versions.

Under UNIX, the installation program automatically detects the Tcl/Tk version (if the user does not specify it explicitly).

Under Windows, the binary distribution is compiled against Tcl/Tk 8.2. If you need to use an older Tcl/Tk, contact SICStus Support.

Note: The Tcl/Tk interface module is not supported under: Mac OS X Server, FreeBSD. Under AIX, the interface module has only been verified with Tcl/Tk version 7.6/4.2.

As of SICStus Prolog 3.8.1 Tcl_FindExecutable("") is called when the tcltk library is loaded, before any Tcl/Tk interpreter is created. This should fix errors related to not finding init.tcl and also improve support for international character sets.

Node:The TclTk Terminal, Previous:Tcl/Tk notes, Up:Tcl/Tk notes

The Tcl/Tk Terminal Window

The Tcl/Tk interface includes a experimental terminal window based on Tcl/Tk. It is opened by using the (undocumented) predicate:

tk_terminal(Interp, TextWidget, InStream, OutStream, ErrStream)
Given a TextWidget, e.g. .top.myterm, this predicate opens three prolog streams for which the text widget acts as a terminal.

There is also a library(tkconsol), making use of tk_terminal/5, which switches the Prolog top level to a Tk window. This is done by simply loading the library module.

Node:Jasper notes, Next:, Previous:Tcl/Tk notes, Up:Top

Jasper notes

Jasper requires at least Java 2 (a.k.a. JDK 1.2) to run (the full development kit, not just the JRE). Jasper does not work with Visual J++ or Visual Café. Jasper is only supported under the following configurations:

Solaris 2.x (SPARC)
Verified using Sun's JDK 1.2.x, downloadable from
Note: Solaris/Intel users, see Platform specific UNIX notes.
Windows 95/98/NT
Verified using Sun's JDK 1.2.2, downloadable from

Linux (x86)
Verified using Blackdown's JDK 1.2 (pre-release-v2, native threads, nojit). Downloadable from

Node:Getting Started, Next:, Previous:Jasper notes, Up:Jasper notes

Getting Started

This section describes some tips and hints on how to get the interface started. This is actually where most problems occur.

Under Windows, it is recommended that you add SICStus's and Java's DLL directories to your %PATH%. This will enable Windows library search method to locate all relevant DLLs. For SICStus, this is the same as where sicstus.exe is located, usually C:/Program Files/sicstus3/bin). For Java it is usually C:/jdk1.2.2/jre/bin/classic and C:/jdk1.2.2/bin. For example:

set PATH=C:/Program Files/sicstus3/bin;C:/jdk1.2.2/jre/bin/classic;\

If SICStus is used as parent application, things are usually really simple. Just execute the query | ?- use_module(library(jasper)).. After that, it is possible to perform meta-calls (as described in the User's Manual), or load a foreign resource containing foreign(...,java,...) predicates.

On some platforms, you may encounter the following error message:

% sicstus
SICStus 3.8 (sparc-solaris-5.5.1): Wed Sep 22 08:42:14 MET DST 1999
Licensed to SICS
| ?- use_module(library(jasper)).
{SYSTEM ERROR: 'Attempted to load Java engine into sbrk\'d
SICStus system (try starting SICStus with -m option)'}

Since most platforms don't allow sbrk() and malloc() to coexist peacefully, SICStus refuses to load the JVM if not the -m flag was given to SICStus. The message can, as the error message suggests, be avoided if SICStus is started with the -m flag:

% sicstus -m

If Java is used as parent application, things are a little more complicated. There are a couple of things which need to be taken care of. The first is to specify the correct class path so that Java can find the Jasper classes (SICStus, SPTerm, and so on). This is done by specifying the pathname of the file jasper.jar:

% java -classpath $SP_PATH/bin/jasper.jar ...

SP_PATH does not need to be set; it is only used here as a placeholder. See the documentation of the Java implementation for more info on how to set classpaths.

The second is specify where Java should find the Jasper native library ( or jasper.dll), which is loaded into the JVM by invoking the method System.loadLibrary("jasper"). This method uses a platform dependent search method to locate the Jasper native library, and quite often this method fails. A typical example of such a failure looks like:

% java -classpath [...]/jasper.jar se.sics.jasper.SICStus
Trying to load SICStus.
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jasper
in java.library.path
	at java.lang.ClassLoader.loadLibrary(
	at java.lang.Runtime.loadLibrary0(
	at java.lang.System.loadLibrary(
	at se.sics.jasper.SICStus.loadNativeCode(
	at se.sics.jasper.SICStus.initSICStus(
	at se.sics.jasper.SICStus.<init>(
	at se.sics.jasper.SICStus.main(

This can be fixed by explicitly setting the Java property java.library.path to the location of (or jasper.dll), like this:

% java -Djava.library.path=/usr/local/lib [...]

If this works properly, SICStus should have be loaded into the JVM address space. The only thing left is to tell SICStus where the runtime library (i.e. sprt.sav) is located. You may choose to specify this explicitly by either givin a second argument when initializing the SICStus object or by specifying the property sicstus.path:

Example (UNIX):

% java -Dsicstus.path=/usr/local/lib/sicstus-3.8

Example (Win32):

% java -Dsicstus.path="c:\Program Files\sicstus3"

If you do not specify any explicit path, SICStus will search for the runtime library itself.

If everything is setup correctly, you should be able to call main (which contains a short piece of test-code) in the SICStus root class, something like this:

% java -Djava.library.path=/usr/local/lib \
         -classpath /usr/local/lib/sicstus-3.8/bin/jasper.jar \
Trying to load SICStus.
If you see this message, you have succesfully
initialized the SICStus Prolog engine.

It is similar under Win32, with the exception that the paths look slightly different.

Node:Jasper and Native Threads, Next:, Previous:Getting Started, Up:Jasper notes

Jasper and Native Threads

It is highly recommended that you run your JDK in native threads mode. This is the default under Windows. Under UNIX, most JDKs use native threads per default in version 1.2.

SICStus does not allow multiple native threads executing simultaneous in the emulator. In other words, all calls to SICStus have to be performed from the same Java (native) thread. If this condition is violated, a IllegalCallerException is thrown. There are also methods in the SICStus class to check whether the current thread is allowed to call SICStus methods, without throwing an exception. See the se.sics.jasper package documentation for more info.

The simplest way of avoiding IllegalCallerExceptions being thrown is to have a single, dedicated, Java-thread which is performs all the calls to SICStus. Other threads wanting to call Prolog can synchronize with the dedicated Java-thread using the methods wait() and notify().

Node:Known Bugs and Limitations in Jasper, Next:, Previous:Jasper and Native Threads, Up:Jasper notes

Known Bugs and Limitations in Jasper

Node:Java Examples Directory, Next:, Previous:Known Bugs and Limitations in Jasper, Up:Jasper notes

Java Examples Directory

There is an examples directory available in $SP_PATH/library/jasper/examples. See the file README for more info.

Node:Java Resources Online, Previous:Java Examples Directory, Up:Jasper notes


There are almost infinitely many Java resources on the Internet. Here is a list of a few which are related to Jasper and JNI.

Node:Visual Basic notes, Next:, Previous:Jasper notes, Up:Top

Visual Basic notes

The Visual Basic - SICStus Prolog interface consists of the following files:

In order to use the interface, perform the following steps:

Node:Berkeley DB notes, Next:, Previous:Visual Basic notes, Up:Top

Berkeley DB notes

As of SICStus 3.8, the library module library(db) has been replaced by library(bdb). The functionality is similar, but library(bdb) is built on top of Berkeley DB. Berkeley DB can be downloaded from:

library(bdb) has been verified to work using Berkeley DB version 2.7.5.

When using Berkeley DB on Windows, you may want to set %PATH% to contain the path to libdb.dll. Consult the Berkeley DB documentation for further info.

Node:The Emacs Interface, Next:, Previous:Berkeley DB notes, Up:Top

The Emacs Interface

The Emacs Interface was originally developed for GNU Emacs 19.34 and is presently being maintained using XEmacs 21.1 and tested with GNU Emacs 19.34.1. For best performance and compatibility and to enable all features we recommend that the latest versions of GNU Emacs or XEmacs are used.

Node:Installing the Emacs Interface, Previous:The Emacs Interface, Up:The Emacs Interface


Starting with SICStus 3.8 the Emacs interface is distributed with SICStus and installed by default. The default installation location for the emacs files is <prefix>/lib/sicstus-3.8/emacs/ on UNIX platforms and C:/Program Files/SICStus/emacs/ on Windows.

For maximum performance it is recommended, that the Emacs lisp files (extension .el) are compiled. This can be done from within Emacs with the command M-x byte-compile-file. See Installation, for further details.

Node:Installing On-Line Documentation, Previous:Installing the Emacs Interface, Up:Installing the Emacs Interface

Installing On-Line Documentation

It is possible to look up the documentation for any built in or library predicate from within Emacs (using C-c ? or the menu). For this to work Emacs must be told about the location of the info-files that make up the documentation. This can be done for the entire emacs installation or on a per user basis, see Installation, for further details.

The default location for the info-files are <prefix>/lib/sicstus-3.8/doc/info/ on UNIX platforms and C:/Program Files/SICStus/doc/info/ on Windows.

More recent versions of GNU Emacs and XEmacs should be able to automatically incorporate info files from a subdirectory into the main Info documentation tree. It is therefore recommended that the SICStus Info files are kept together in their own directory.

Node:Revision history, Next:, Previous:The Emacs Interface, Up:Top

Revision history

This chapter summarizes the changes in release 3 wrt. previous SICStus Prolog releases as well as changes introduced by patch releases.

Node:Changes in release 3, Next:, Previous:Revision history, Up:Revision history

Changes in release 3

Node:Changes introduced in 3#4, Next:, Previous:Changes in release 3, Up:Revision history

Changes introduced in 3#4

Node:Changes introduced in 3#5, Next:, Previous:Changes introduced in 3#4, Up:Revision history

Changes introduced in 3#5

Node:Changes introduced in 3#6, Next:, Previous:Changes introduced in 3#5, Up:Revision history

Changes introduced in 3#6

Node:Changes introduced in version 3.7, Next:, Previous:Changes introduced in 3#6, Up:Revision history

Changes introduced in version 3.7

Node:Changes introduced in version 3.7.1, Next:, Previous:Changes introduced in version 3.7, Up:Revision history

Changes introduced in version 3.7.1

Node:Changes introduced in version 3.8, Next:, Previous:Changes introduced in version 3.7.1, Up:Revision history

Changes introduced in version 3.8

Node:3.8 WCX, Next:, Previous:Changes introduced in version 3.8, Up:Changes introduced in version 3.8

Wide character support

Wide character handling is introduced, with the following highlights:

For programs using the default ISO_8859_1 character set, the introduction of wide characters is transparent, except for the string format change in the foreign interface, see below.

In programs using the EUC character set, the multibyte EUC characters are now input as a single, up to 23 bit wide, character code. This character code can be easily decomposed into its constituent bytes, if needed. The encoding function is described in detail in the SICStus manual.

To support wide characters, the foreign interfaces now use UTF-8 encoding for strings containing non-ASCII characters (codes >= 128). This affects programs with strings that contain e.g. accented characters and which transfer such strings between Prolog and C. If such a string is created on the C side, it should be converted to UTF-8, before passing it to Prolog. Similarly for a string passed from Prolog to C, if it is to be decomposed into characters on the C side, the inverse transformation has to be applied.

Utility functions SP_code_wci and SP_wci_code are provided to support the conversion of strings between the WCI (Wide Character Internal encoding, i.e. UTF-8) format and wide character codes.

Node:3.8 Debugger, Next:, Previous:3.8 WCX, Up:Changes introduced in version 3.8

Breakpointing debugger

A new general debugger is introduced, with advanced debugging features and an advice facility. It generalizes the notion of spypoint to that of the breakpoint. Breakpoints make it possible to e.g. stop the program at a specified line, or in a specified line range, or to call arbitrary Prolog goals at specified ports, etc. Highlights:

Node:3.8 ISO, Next:, Previous:3.8 Debugger, Up:Changes introduced in version 3.8

ISO compliance

SICStus 3.8 supports standard Prolog, adhering to the International Standard ISO/IEC 13211-1 (PROLOG: Part 1--General Core). At the same time it also supports programs written in earlier versions of SICStus. This is achieved by introducing two execution modes iso and sicstus. Users can change between the modes using the prolog flag language. Main issues:

Node:3.8 Generic, Next:, Previous:3.8 ISO, Up:Changes introduced in version 3.8

Generic new features

Node:3.8 Jasper, Next:, Previous:3.8 Generic, Up:Changes introduced in version 3.8

New features in library(jasper)

Node:3.8 CLPFD, Next:, Previous:3.8 Jasper, Up:Changes introduced in version 3.8

New features in library(clpfd)

Node:3.8 Bugs, Previous:3.8 CLPFD, Up:Changes introduced in version 3.8

Bugs fixed in version 3.8

Node:Changes introduced in version 3.8.1, Previous:Changes introduced in version 3.8, Up:Revision history

Changes introduced in version 3.8.1

Version 3.8.1 is a bugfix release only, no new features has been added.

Node:Generic limitations, Next:, Previous:Revision history, Up:Top

Generic limitations

On 32-bit architectures, the total data space cannot exceed 256 Mb. The Linux implementation of sbrk() returns memory starting at 0x08000000, so in practice the limit there is 128 Mb.

The number of arguments of a compound term may not exceed 255.

The number of atoms created may not exceed 262143.

The number of characters of an atom may not exceed 65535.

NUL is not a legal character in atoms.

There are 256 "temporary" and 256 "permanent" variables available for compiled clauses.

Saved states are not portable between 32-bit and 64-bit architectures, or from a system built with native code support to a system without native code support for the same architecture.

Indexing on big integers or floats is coarse.

Node:Questions and answers, Previous:Generic limitations, Up:Top

Questions and answers

Current support status for the various platforms can be found at the SICStus Homepage:

Information about and fixes for bugs which have shown up since the latest release can be found there as well.

Send requests for ordering information to

Send bug reports to

Bugs tend actually to be fixed if they can be isolated, so it is in your interest to report them in such a way that they can be easily reproduced.

The mailing list

is a moderated mailing list for communication among users and implementors. To [un]subscribe, write to

Table of Contents