Release notes for SICStus Prolog release 3.8.5, September 2000. Copyright 1988-2000 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.
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.
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"
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
ftp://ftp.sics.se/archive/sicstus3/aux/crypt.tar.gz
The enclosed README files describes how to compile it.
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
sicstus-support@sics.se
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.
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:
spld.config
. It should be located
in the same directory as splfr
and spld
.
spld.config
, lets call it
hacked_spld.config
. Do not edit the original file.
CFLAGS=-g
-O2
. Edit these according to your needs. Do not add or remove any
flags.
spld.config
together with
spld
or splfr
like this
% spld [...] --config=/path/to/hacked_spld.configReplace
/path/to
with the actual path to the hacked configuration
file.
To compile the glue code file and user code, use the compiler options
assigned to INCR_CFLAGS
by ./configure
. In addition
also include -DSPDLL
. To ensure an up-to-date compilation
procedure run splfr
with --verbose
argument to see what it
does.
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 SHSFX= so
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 myresource.so
Libraries needed by the resource should normally also be included in the link command line.
Functions in C++ files which should be called from Prolog must use C linkage, 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.
This section describes how to distribute runtime systems on Target Machines, i.e., machines which does not have SICStus installed.
In order to build a runtime system for distribution on a target machine,
the option --moveable
must be passed to spld
. This
option prevents spld
from hardcoding any paths into the
executable.
Next, in order for SICStus to be able to locate all relevant files, the following directory structure is recommended.
myapp.exe lib/ +--- libsprt38.so +--- sicstus-3.8.5/ +--- bin/ | +--- sprt.sav +--- library/ +--- <files from $SP_PATH/library>
myapp.exe
is typically created by a call to spld
:
% spld --main=user --moveable [...] -o ./myapp.exe
In order for the executable to be able to locate sprt.sav
, the
variable SP_PATH
needs to be set. If the example above is rooted
in /home/joe
, then SP_PATH
should be set to
/home/joe/lib/sicstus-3.8.5
.
Unless the --static
option is passed to spld
, it might also be
necessary to set LD_LIBRARY_PATH
(or equivalent) to
/home/joe/lib
(in the example above) in order for the dynamic
linker to find libsprt38.so
. If the --static
option is used,
this is not necessary.
This section contains some installation notes which are platform specific under UNIX.
library(bdb)
or library(tcltk)
might not
work unless Berkeley DB and Tcl/Tk is installed in the standard
directories (e.g., /usr/shlib/
). In the case of
library(bdb)
this is further complicated by the fact that
Berkeley DB uses the name libdb.*
which conflicts with a builtin
library of the same name.
There are two solutions
LD_LIBRARY_PATH
Example:
bash> export LD_LIBRARY_PATH=/usr/local/BerkeleyDB/lib:/home/joe/mytcltk/lib csh> setenv LD_LIBRARY_PATH /usr/local/BerkelyDB/lib:/home/joe/mytcltk/lib
tcltk
or bdb
(or both) into the executable. Example:
% spld -D --resources=tcltk,bdb -o ./mysicstus
use_module(library(system))
) may not
work unless SHLIB_PATH is setup to include the directory that contains
libsprt38.sl
, e.g.:
hpux>setenv MYSP /src/sicstus/bin/release-3.8.3/hppa-hpux-B.10.20 hpux>unsetenv SHLIB_PATH hpux>$MYSP/bin/sicstus -f SICStus 3.8.3 (hppa-hpux-B.10.20): Fri May 5 20:50:33 EDT 2000 Licensed to SICS | ?- use_module(library(system)). % This will not work {loading ....system.po...} {module system imported into user} /usr/lib/dld.sl: Can't find path for shared library: libsprt38.sl /usr/lib/dld.sl: No such file or directory {SYSTEM ERROR: 'shl_load(....) failed in load_foreign_resource/1'} << halt >> hpux>setenv SHLIB_PATH ${MYSP}/lib hpux>$MYSP/bin/sicstus -f SICStus 3.8.3 (hppa-hpux-B.10.20): Fri May 5 20:50:33 EDT 2000 Licensed to SICS | ?- use_module(library(system)). % This will work {loading .... system.po...} {module system imported into user} {loaded ....system.po ....}
libsprt38.sl
, e.g. setenv LD_LIBRARY_PATH
/usr/local/lib
. See the similar problem with HPUX above.
spld
and splfr
utilities you may see
warnings like the following:
ld: 0711-415 WARNING: Symbol expand_file_name is already exported. ld: 0711-319 WARNING: Exported symbol not defined: normal_pathThese warnings can be ignored.
library(bdb)
,
library(db)
, library(tcltk)
, library(jasper)
.
spld
, the directory which contains
the executable must be in the user's PATH
variable.
tcsh> limit data datasize 6144 kbytes
This indicates that the maximum size of the data-segment is only 6 Mb. To remove the limit, do
tcsh> limit data unlimited datasize unlimited
NOTE: limit
is a shell built-in in tcsh
. It may
have a different name in other shells.
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
:
../*.{a,so,sl,dylib}
bin/sprt.sav
bin/jasper.jar
library/*.{tcl,po}
library/*/*.{s.o,so,sl,dylib}
library/*/*.po
sp_platform
InstallSICStus
)
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\SICStus Prolog\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).
The development system comes in two flavors:
The distribution consists of a single, self-installing executable
(InstallSICStus.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
splfr
as described in the user's manual.
splfr
and spld
should not have
embedded spaces. For file names with spaces you can use the corresponing
short file name.
Note that the license consists of three parts, the Site name (or user name for personal licenses), the License code, and the Expiration date. All parts are case sensitive, and spaces are significant. A common mistake is to enter the License code correctly but the Site/User name incorrectly.
If you have trouble with the license code use splm.exe
, as
explained in the letter with your license code.
Start
menu (e.g.,
Start\Programs\SICStus Prolog 3.8.5
) may not work immediately
after installation. Restarting after installing SICStus appears to cure
this. If this does not help you can add your own shortcut to, e.g.,
C:\Program Files\SICStus Prolog\bin\spwin.exe
.
Manual
or Release Notes
item in the
Help
menu may give an error message similar to
... \!Help\100#!Manual.lnk could not be found
. This happens when
Adobe Acrobat Reader is not installed or if it has not been installed
for the current user. Open C:\Program Files\SICStus
Prolog\doc\pdf\
in the explorer and try opening
relnotes.pdf
. This might bring up an configuration dialog for
Adobe Acrobat, configure Acrobat and try the Help
menu
again. Alternatively, you may have to obtain Adobe Acrobat. It is
available for free from http://www.adobe.com/.
We recommend that SICStus is installed by a user with administrative
privileges and that the installation is made For All Users
.
The first time the installer is run it will install necessary system
files for supporting the new Windows Installer
technology from
Microsoft. This will fail unless the user has administrative rights. A
typical symptom is an error message asking for msiexec
.
If SICStus is installed for a single user then SICStus will not find the
license information when started by another user. In this case you can
use the command line utility splm.exe
as described in the letter
containing your license code.
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.
myapp.exe sprt38.dll sp38\ +--- 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:
myapp.exe sprt38.dll sp38\ +--- 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.
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/[1,2]
). If it was
created by save_program/2
, the given startup goal is run. Then,
user:runtime_entry(start)
is run. The program exits with
0 upon normal temination and with 1 on failure or exception.
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
.
NOTE: the current working directory must be set to contain
main.sav
for these runtime systems to work.
For more info on how spld
works, see
The spld utility.
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 Runtime Systems on Target Machines.
Command line editing supporting Emacs-like commands and IBMPC arrow keys is provided in the console-based executable. The following commands are available:
Options may be specified in the file %HOME%\spcmd.ini
as:
Option Value
on separate lines. Recognized options are:
lines
save
%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).
The console window used for the windowed executable is based on code
written by Jan Wielemaker <jan@swi.psy.uva.nl>
.
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.
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:
sl
rows
cols
x
y
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.
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.
Sometimes <EOF> from the menu leaves a detached sicstus process running (not idle). You will have to terminate it with the task manager. The cause is an error in the SICStus interrupt handling code, present at least up to 3.8.5 (inclusive).
character_escapes
is set to off
.
absolute_file_name/2
etc.
~/
are expanded using the values of the
environment variable HOME
or HOMEDRIVE
and
HOMEPATH
. The form
~username/
is not
expanded. The form
$VAR
is expanded using the value
of the environment variable VAR. The form
%VAR%
is not recognized.
Blocking system calls, such as those used by library(sockets), are not interruptible by ^C in any kind of SICStus executable.
--resources
option to spld
is a no-op.
user_error
stream is line buffered.
top_level_events
option to tk_new/2
is not
supported.
stream_select/3
is not supported.
stream_interrupt/3
is not supported.
library(timeout)
is not supported.
library(sockets)
: The AF_UNIX
address family is (unsurprisingly)
not supported; socket_select/[5,6]
support only socket streams for
arg 4(5).
library(system)
: popen/3
is not supported.
kill/2
attempts to terminate the requested
process irrespectively of the 2nd arg. You should not use it as it
bypasses the killed process cleanup routines.
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%
:
bin\sprt.sav
bin\jasper.jar
bin\*.dll
bin\*.po
library\*.{tcl,po,bas}
library\*\*.dll
library\*\*.po
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:
http://www.ajubasolutions.com (formerly Scriptics)
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 another version of Tcl/Tk you have to recompile
library(tcltk)
, see Configuring the Tcl/Tk library module under Windows.
Note: You need to have the Tcl/Tk binaries accessible
from your PATH
environment variable, e.g., C:\Program Files\Tcl\bin"
.
Note: The Tcl/Tk interface module is not supported under: Mac OS X Server
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.
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)
.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.
Jasper requires at least Java 2 (a.k.a. JDK 1.2) to run. Except on Windows the full development kit, not just the JRE, is needed. Jasper does not work with Visual J++ or Visual Café. Jasper is only supported under the following configurations:
JDK 1.3 from Sun does not work. In particular, when using JDK 1.3, it is not possible to load library(jasper) into a development system. It may be possible to use JDK 1.3 with a run-time system, e.g., when Java is the top-level application. Set the environment variable JDK_USE_EXTRALIBS=no to make InstallSICStus/configure accept a JDK 1.3 installation.
Full support for JDK 1.3 is a priority, it will be added in a future release.
Sun's JDK 1.2.2 does not support native threads and therefore does not work.
JDK 1.3 (RC1) from Sun does not work. In particular, when using JDK 1.3, it is not possible to load library(jasper) into a development system. It may be possible to use JDK 1.3 with a run-time system, e.g., when Java is the top-level application. Set the environment variable JDK_USE_EXTRALIBS=no to make InstallSICStus/configure accept a JDK 1.3 installation.
Full support for JDK 1.3 is a priority, it will be added in a future release.
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/SICStus Prolog/bin
). For Java it is usually
C:\jdk1.3\jre\bin\hotspot
and C:\jdk1.3\bin
(for JDK 1.2.2
it would be C:\jdk1.2.2\jre\bin\classic
and C:\jdk1.2.2\bin
).
For example:
set PATH=C:\jdk1.3\jre\bin\hotspot;C:\jdk1.3\bin;%PATH% set PATH=C:\Program Files\SICStus Prolog\bin;%PATH%
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 -mThe
-m
flag is neither needed, nor recommended, on Windows.
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
(libjasper.so
or jasper.dll
), which the SICStus
class loads 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(ClassLoader.java:1133) at java.lang.Runtime.loadLibrary0(Runtime.java:470) at java.lang.System.loadLibrary(System.java:745) at se.sics.jasper.SICStus.loadNativeCode(SICStus.java:37) at se.sics.jasper.SICStus.initSICStus(SICStus.java:80) at se.sics.jasper.SICStus.<init>(SICStus.java:111) at se.sics.jasper.SICStus.main(SICStus.java:25)
This can be fixed by explicitly setting the Java property
java.library.path
to the location of libjasper.so
(or
jasper.dll
), like this:
% java -Djava.library.path=/usr/local/lib [...]
When Jasper is used in run-time systems, additional constraints apply as described in Runtime Systems on Target Machines.
If this works properly, SICStus should have been 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 giving 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\SICStus Prolog"
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" \ -Dsicstus.path="/usr/local/lib/sicstus-3.8" \ -classpath "/usr/local/lib/sicstus-3.8/bin/jasper.jar" \ se.sics.jasper.SICStus Trying to load SICStus. If you see this message, you have successfully initialized the SICStus Prolog engine.
It is similar under Win32, with the exception that the paths look slightly different.
The following Java system properties can be set to control some recently added features of the jasper package:
se.sics.jasper.SICStus.checkSPTermAge
A boolean, off by default. If true
then run-time checks are
performed that attempt to detect potentially dangerous use of the
SPTerm.putXXX
family of functions. The value of this flag can be
set and read with SICStus.setShouldCheckAge()
and
SICStus.shouldCheckAge()
.
The run-time checks throws an IllegalTermException
when there is
risk that a SPTerm
is set to point to a Prolog term
strictly newer than the SPTerm
. In this context
strictly newer means that there exists an open query that was
opened after the SPTerm
object was created but before the Prolog
term. See SPTerm and Memory, for more information.
java -Dse.sics.jasper.SICStus.checkSPTermAge=true ...or, from Prolog:
jasper_initialize( ['-Dse.sics.jasper.SICStus.checkSPTermAge=true'], JVM)
se.sics.jasper.SICStus.reuseTermRefs
A boolean, on by default. If false
then
SPTerm.delete()
will only invalidate the SPTerm
object, it
will not make the Prolog side term-ref available for re-use. The
value of this flag can be set and read with
SICStus.setReuseTermRefs()
and
SICStus.reuseTermRefs()
. There should be no reason to turn it
off.
To set this flag do:
java -Dse.sics.jasper.SICStus.reuseTermRefs=true ...or, from Prolog:
jasper_initialize( ['-Dse.sics.jasper.SICStus.reuseTermRefs=true'], JVM)
se.sics.jasper.SICStus.debugLevel
An integer, zero by default. If larger than zero then some debug info is
output to System.out
. Larger values produce more
info. The value of this flag can be
set and read with SICStus.setDebugLevel()
and
SICStus.debugLevel()
.
java -Dse.sics.jasper.SICStus.debugLevel=1 ...or, from Prolog:
jasper_initialize( ['-Dse.sics.jasper.SICStus.debugLevel=1'], JVM)
native
. This is due to a
security-restriction enforced on applets; they are not allowed to call
native code.
green threads
). This is the default under Windows. Under UNIX,
most JDKs use native threads per default in version 1.2.
On some platforms you need to explicitly specify the -native
option when calling java
. The following error is an example of
what may happen if you do not specify -native
:
% java -classpath .:[...]/lib/sicstus-3.8/bin/jasper.jar \ -Djava.library.path=[...]/lib \ -Dsicstus.path=[...]./lib/sicstus-3.8 Simple *** panic: libthread loaded into green threads Abort (core dumped)
Instead, do
% java -native [...]
See your JDK documentation for more info on command-line parameters to the JVM.
SPTerm
can corrupt the Prolog data areas. This is a
well understood, easily avoidable, problem that cannot easily be fixed
in Jasper (or SICStus), SPTerm and Memory. See Jasper Package Options, for a
flag that tells Jasper to give exceptions in potentiallly troublesome
cases.
SPTerm
will leak memory on the Prolog side. This is
not really a bug but may come as a surprise to the unwary, SPTerm and Memory.
null
object references between
Java and Prolog. A null reference will currently give an exception, this
will probably change.
% splfr simple.pl SICStus 3.8.5 (sparc-solaris-5.7): Mon Feb 21 10:43:17 MET 2000 Licensed to SICS {spk.ai82.c generated, 20 msec} yes In file included from /usr/local/jdk1.2/include/jni.h:35, from spk.ai82.c:94: /usr/local/jdk1.2/include/solaris/jni_md.h:20: warning: \ ignoring pragma: "@(#)jni_md.h 1.11 99/02/01 SMI
The warning can be safely ignored. You can suppress the warnings when
using gcc
by
passing the options --cflag=-Wno-unknown-pragmas
to splfr
.
There is an examples directory available in
$SP_PATH/library/jasper/examples
. See the file README
for
more info.
There are almost infinitely many Java resources on the Internet. Here is a list of a few which are related to Jasper and JNI.
The Visual Basic - SICStus Prolog interface consists of the following files:
vbsp.dll
(installed as SICStus\bin\vbsp.dll
)
vbsp.po
(installed as SICStus\bin\vbsp.po
)
vbsp.bas
(installed as SICStus\library\vbsp.bas
)
In order to use the interface, perform the following steps:
vbsp.bas
in your
Visual Basic project.
C:\Program
Files\SICStus Prolog\bin
in the PATH
environment variable.
If VB cannot find the SICStus run-time files it will report something similar to
File not found: VBSP
vbsp.dll
and vbsp.po
in a place where DLLs
are searched for (For example the same directory as your applications
EXE file, on the PATH
or the Windows-System directory). This is
true by default if C:\Program Files\SICStus Prolog\bin
is in the
PATH environment variable, as suggested in the previous item.
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:
http://www.sleepycat.com
library(bdb)
has been verified to work using Berkeley DB version
2.7.7. It does not work with Berkeley DB 3.x versions.
When using Berkeley DB on Windows, you may want to set the PATH
environment variable to
contain the path to libdb.dll
. Consult the Berkeley DB
documentation for further info.
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. For information on obtaining Emacs, see www.emacs.org. For information specific to GNU Emacs or XEmacs, see www.gnu.org and www.xemacs.org.
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 Prolog\emacs\
on Windows.
For maximum performance the Emacs lisp files (extension .el) shoule be compiled. This can be done from within Emacs with the command M-x byte-compile-file. See Installation, for further details.
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 Prolog\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.
This chapter summarizes the changes in release 3 wrt. previous SICStus Prolog releases as well as changes introduced by patch releases.
0'
notation denote escape sequences. Character escaping can be switched off.
call_residue/2
has been modified so that
goals that are disjunctively blocked on several variables are returned
correctly in the second argument.
setarg/3
has been removed. Its
functionality is provided by the new built-ins create_mutable/2
,
get_mutable/2
, update_mutable/2
, and is_mutable/2
,
which implement a timestamp technique for value-trailing with low-level
support.
unix/1
and plsys/1
have been
removed. Their functionality is provided by
prolog_flag(argv,X)
, by the new halt/1
built-in, and
by the new library(system)
module which also contains several new
predicates.
library(sockets)
module.
time_out/3
has been moved to the new
library(timeout)
module.
term_hash/[2,4]
, subsumes_chk/2
, and
term_subsumer/3
have been moved to the new library(terms)
module, which also contains operations for unification with occurs-check,
testing acyclicity, and getting the variables of a term.
+chars
, -chars
and [-chars]
for fast conversion between
C strings and Prolog lists of character codes. Several new interface functions
are available.
SP_term_ref
,
making the functions SP_show_term()
and SP_hide_term()
obsolete.
library(gmlib)
has been replaced by
the Tcl/Tk based library(tcltk)
. A version of library(gmlib)
converted to SICStus Prolog release 3 is available from
ftp://ftp.sics.se/archive/sicstus3/gmlib.tar.gz
.
library(objects)
module has been enhanced.
self
.
Prolog goals in methods must be prefixed by :.
library(charsio)
, the open_chars_stream/[3,4]
predicates
have been replaced by open_chars_stream/2
and
with_output_to_chars/[2,3]
.
library(assoc)
module now implements AVL trees instead of
unbalanced binary trees.
library(atts)
implements
attributed variables, a general mechanism for associating logical variables
with arbitrary attributes. Comes with a number of hooks that make it
convenient to define and interface to constraint solvers.
library(clpb)
and is implemented on top of library(atts)
.
library(clpq)
) and reals
(library(clpr)
), implemented on top of library(atts)
.
user:goal_expansion/3
is a new hook predicate for macro-expansion.
bb_put/2
, bb_get/2
, bb_delete/2
, and bb_update/3
are new built-ins implementing blackboard primitives.
prolog_load_context/2
is a new built-in predicate
for accessing aspects of the context of files being loaded.
user:file_search_path/2
is a new hook predicate
providing an alias expansion mechanism for filenames.
gcd/2
is a new built-in function.
walltime
measures elapsed absolute time.
ensure_loaded/1
and use_module/[1,2,3]
have the same semantics as in development systems.
SP_foreign_reinit_hook
is not supported.
~/.sicstusrc
is not found, SICStus looks for
~/sicstus.ini
.
library(sockets): socket_select/5
arg 1 may be a, possibly empty,
list of passive sockets, arg 3 returns a, possibly empty, list of new
streams.
library(system)
: The following new predicates are provided:
tmpnam/1
, directory_files/2
, file_property/2
,
delete_file/2
, make_directory/1
.
library(clpfd)
),
implemented on top of library(atts)
.
open/4
, enables opening files in binary mode.
library(charsio)
: New predicate with_output_to_chars/4
.
library(heaps)
: New predicates delete_from_heap/4
, empty_heap/1
, is_heap/1
.
library(queues)
: New predicate is_queue/1
.
library(sockets)
: New predicates: socket_accept/3
, and
socket_select/6
provide address of connecting
client. hostname_address/2
resolves name/ip-number.
SP_atom_length
returns the print name length of a Prolog atom.
toplevel_print_options
and debugger_print_options
are new
Prolog flags controlling the toplevel's and debugger's printing behavior.
is_mutable/1
is a new built-in which is true for mutables.
~@
is a new spec in format/[2,3]
for arbitrary goals.
library(clpfd)
)
has been enhanced by a programming interface for global constraints,
improved compilation to library constraints and other performance
enhancements, and by a number of new exported constraints.
library(objects)
: New hook predicate user:method_expansion/3
.
library(sockets)
: socket_select/5
has extended functionality.
format/[2,3]
fixed.
save_program/[1,2]
with native code fixed.
library(chr)
fixed, and a couple of new constraint handlers
fixed.
module/2
decl.
library(tcltk)
.
library(chr)
: A new library module providing Constraint Handling
Rules; see
http://www.pst.informatik.uni-muenchen.de/~fruehwir/chr-solver.html
library(jasper)
.
garbage_collect_atoms/0
, and
controlled by the agc_margin
Prolog flag. New statistics
options: atoms
, atom_garbage_collection
.
New interface functions: SP_register_atom
, SP_unregister_atom
.
call_cleanup/2
, which
replaces undo/1
.
source_info
Prolog
flag.
zip
and built-ins zip/0
, nozip/0
; new debugger
commands out n, skip i, quasi-skip
i, zip, backtrace n, raise exception.
Modules can be declared as hidden which disables tracing of their
predicates.
save/[1,2]
are gone. In most cases, save_program/2
can be
used in their place, with a little rearrangement of your code.
Predicates can be declared as volatile.
SP_restore
is the C equivalent of
restore/1
, which now only restores the program state, leaving the
Prolog execution stacks unchanged.
read_term/3
option: layout(-Layout)
.
New hook predicate: user:term_expansion/4
.
random:randset/3
returns a set in standard order.
db:db_canonical/[2,3]
are new; can be used to check whether two
TermRefs refer to the same term.
clpfd:serialized_precedence/3
and
clpfd:serialized_precedence_resource/4
are new; model
non-overlapping tasks with precedence constraints or sequence-dependent
setup times.
:Goal
are
translated according to the manual. Earlier
versions treated arguments occurring in the :
position of
meta-predicates specially.
SP_raise_fault
and interface macro
SP_on_fault
are available for handling runtime faults that cannot
be caught as exceptions.
SP_set_memalloc_hooks
is available for
redefining the memory manager's bottom layer. Related to that, there is
a new command-line option -m
.
-B
command-line option is gone in the start-up script, and
some new options have appeared.
-base
to override the executable used by
the start-script.
reinitialise/0
does not load any initialization files given in
-i
or -l
command line flags.
-S
to spmkrs
and spmkds
to
link the SICStus Runtime Kernel (and development extensions for
spmkds
) statically into the executable.
[File1,File2,...]
was broken.
require/1
did not find all directories.
clp[qr]:dump/3
, clp[qr]:expand/0
,
clp[qr]:noexpand/0
.
arrays:arefa/3
, arrays:arefl/3
, heaps:min_of_heap/5
are now steadfast.
library(clpfd)
predicates now check the type of their arguments.
Bugs fixed in relation/3
, serialized/2
, all_distinct/1
.
frozen/2
could crash on an argument of the wrong type.
SP_get_list_n_chars
does not require a proper list.
load_files(Files, [compilation_mode(assert_all)])
.
load_files(Files, [if(changed)])
, a non-module file is
not considered to have been previously loaded if it was loaded into a
different module.
if/3
goals in DCG rules.
system:mktemp/2
sometimes returned filenames with
backslashes in them.
object
in Jasper has changed to
object(Class)
.
splfr
, spmkrs
, spmkds
.
format/[2,3]
fixed.
save_program/[1,2]
with native code fixed.
library(chr)
fixed, and a couple of new constraint handlers
fixed.
module/2
decl.
library(tcltk)
.
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.
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:
add_breakpoint/2
, spy/2
, current_breakpoint/4
,
remove_breakpoints/1
, disable_breakpoints/1
,
enable_breakpoints/1
, execution_state/1
, and
execution_state/2
. user:debugger_command_hook/2
is a new
hook predicate.
The predicates nospy/1
and nospyall/0
have slighty changed meaning.
The predicate spypoint_condition/3
has been removed.
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:
sicstus
execution mode is practically identical to 3.7.1, except for
minor changes in error term format.
iso
mode is fully compliant with ISO standard, but no strict
conformance mode is provided.
sicstus
execution
mode, unless they conflict with existing SICStus predicates or
functions. This expansion of the language carries a remote risk of name
clashes with user code.
spmkds
and spmkrs
utilities for creating stand-alone
executables have been replaced by a common spld
utility which
takes several new options. Runtime systems do not always need a main
program in C. On Windows, the resulting executable can optionally be
windowed. The splfr
utility takes several new options.
The development and runtime kernels have been merged into a single one.
save_files/2
, save_modules/2
, and save_predicates/2
respectively. These predicates create files in a binary format, by
default with the prefix .po
(for Prolog object file), which can
be loaded by load_files/[1,2]
. The load_type(Type)
option
of load_files/2
has been extended. Partial saved states render
.ql
files obsolescent.
trimcore/0
reclaims any dead clauses
and predicates, defragmentizes Prolog's memory, and attempts to return
unused memory to the operating system. It is called automatically at
every top level query.
host_type
is an atom identifying the platform, such as 'x86-linux-glibc2.1'
.
source_info
Prolog flag, introduced in
release 3.7, has been extended beyond the Emacs interface. Line number
information is now included in error exceptions whenever possible. This
information is displayed in debugging and error messages (outside Emacs)
or causes Emacs to highlight the culprit line of code. Valid values are
off
, on
, and emacs
.
spy/[1,2]
, nospy/1
, listing/1
, abolish/1
,
profile_data/4
, profile_reset/1
,
save_predicates/2
, and gauge:view/1
.
SP_chdir()
and SP_getcwd()
provide access to the current working directory.
SP_load()
has been generalized to
correspond to load_files/1
.
SP_deinitialize()
is now documented.
sprt<xx>.dll
. SP_PATH
is only used as a last
resort. See Windows notes.
README
and INSTALL
in the source
distribution for documentation.
library(bdb)
provides an interface to the Berkeley DB
toolset for persistent storage, and replaces library(db)
. The
programming interface of the new module is similar to that of the old
one, with some new concepts added such as iterators. The sources
of the old library module are available from:
ftp://ftp.sics.se/archive/sicstus3/libdb.tgz
library(db)
is obsolete and will be removed in the next major
release.
spld
and
exist in three flavors: generic character based (sprt.exe
),
generic character based interactive (sprti.exe
), and generic
windowed (sprtw.exe
). See Generic Runtime Systems.
library(tcltk)
has been rewritten and greatly
expanded.
library(clpq)
and library(clpr)
: new predicates inf/4
and sup/4
.
library(gcla)
has been removed.
initialization/[0,1]
have been replaced by ISO compliant
initializations.
library(jasper)
will not
work using JDK 1.1.x.
jasper
to se.sics.jasper
,
according to JavaSoft guidelines. See Getting Started.
jasper.jar
, which is located in
$SP_PATH/bin
. See Getting Started.
jasper.dll
or libjasper.so
)
is now located in the same directory as the runtime kernel (default
<installdir>/lib
under UNIX, <installdir>/bin
under
Windows). See Getting Started.
jasper_call_instance/6
,
jasper_call_static/6
, etc.). This makes it possible to call Java
without having to generate any glue-code (i.e., without a C-compiler).
jasper_create_global_ref/3
, jasper_delete_global_ref/2
,
jasper_delete_local_ref/2
).
SPException.term
declared protected
instead of private
.
SPCanonicalAtom
to handle canonical representations of
atoms and to make sure that they are safe with atom-gc. New methods
getCanonicalAtom
and putCanonicalAtom
. New constructor for
SPPredicate
. getAtom
and putAtom
deprecated.
IllegalCallerException
is thrown if the current
thread is not allowed to call SICStus.
fd_degree/2
is new; returns the number of constraints attached to
a variable.
labeling/2
requires the list of domain variables to have bounded
domains. User-defined variable and value choice heuristics can be
provided.
element/3
is interval-consistent in its second and third
arguments. Use relation/3
if domain-consistency is required.
serialized/3
is new and replaces serialized_precedence/3
and serialized_precedence_resource/4
. A number of new options
control the algorithm. The space complexity no longer depends on the
domain size.
cumulative/5
is new and takes the same options as
serialized/3
.
all_different/2
, all_distinct/2
and assignment/3
are new and take options controlling the algorithms.
absolute_file_name/2
: could crash under IRIX; nested compound terms allowed
call_cleanup/2
: efficiency
close/1
: efficiency; handling the standard streams
format/[2,3]
: ~N didn't work as expected;
are now meta-predicates--needed by the ~@ format spec
load_files/[1,2]
: avoid changing directory; don't loop on duplicate exports
load_foreign_resource/1
: filenames containing periods on Windows NT
print_message/2
: in runtime systems
prolog_load_context/2
: value of term_position
reinitialise/0
: sequencing of events
save_program/[1,2]
: fastcode handling; file mode creation masks; in runtime systems
write_term/[1,2]
: the indented(true)
option and non-ground terms
library(db)
: efficiency of term deletion
library(heaps)
: delete_from_heap/4
library(objects)
: the new/2
method; cyclic dependencies
library(random)
: determinacy and efficiency
library(sockets)
: noisy startup on Windows; block buffering is now the default;
socket_buffering/4
added
library(system)
: sleep/1
admits floats as well as integers
library(terms)
: subsumes_chk/2
and variant/2
now don't unblock goals
+chars
; syntax
error messages were suppressed
print_message/2
interface
.ql
files
load_files/[1,2]
=\=
). Note
that X is nan, X =:= X
fails.
Version 3.8.1 is a bugfix release only, no new features has been added.
configure.in
: Removed multiple occurences of the -n32
flag
under IRIX if cc
is used instead of gcc
.
configure.in
: FreeBSD 3.x is now handled correctly.
configure.in
: On Linux and Solaris, SICStus is now always linked
with the POSIX thread library.
InstallSICStus
: spld
did not log verbose output to logfile.
spld
, splfr
: Eliminated use of ..
to specify
relative paths. Caused problems on Windows 95/98.
library(jasper)
: Green threads JDKs not supported any longer.
library(tcltk)
: 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.
multifile
+ discontiguous
combination fix
listing/[0,1]
, tell/1
, see/1
fixes
stack_shifts
(statistics/2 option) manual fix
load_foreign_resource/1
search algorithm fix
a =.. [b|c]
SP_term_ref
leaks in some functions
all_distinct/[1,2]
, assignment/[2,3]
, circuit/[1,2]
,
serialized/[2,3]
, cumulative/[4,5]
, fdset_member/2
, arithmetic
Version 3.8.2 is a bugfix release only, no new features has been added.
call_residue/2
: fix bug when the goal called copy_term/2
.
listing/[1,2], portray_clause/[1,2]
, top-level: cope with constrained/attributed variables.
portray_clause/[1,2]
,
write_term/[2,3]
with indented(true)
: do not juggle module prefixes.
clpfd
SP_raise_exception
.
sicstus.h
. Documented SP_to_os
, SP_from_os
.
SP_WcxOpenHook
: incorrect prototype.
library(bdb)
: a relative filename given in db_open/5
was
treated by SICStus as relative to the current working directory, but
should be relative to the given BDB environment.
library(clpfd)
: somewhat faster arithmetic, lingering bugs in
serialized/[2,3]
and cumulative/[4,5]
, labeling/2
options value/1
, variable/1
--with=<package>
options to spld
and splfr
to
override default installation path for third-party software packages.
spld
: Fixed bugs in argument handling. .pl
file arguments
are no longer compiled at spld
time, but passed directly to
SP_load()
.
library(jasper)
: Multiple threads are allowed to call SICStus
without IllegalCallerException
being thrown.
See Java Threads.
library(jasper)
: Argument-checking bug in
jasper_call_static/6
and jasper_call_instance/6
.
Version 3.8.3 is mainly a bugfix release. New features:
SP_calloc()
and SP_strdup()
.
pure
Prolog code, builtins
such as assert
are not affected although the prolog part of
libraries are affected. (The change is in the byte code dispatch
mechanism).
spwin.exe
) can now save a transcript of the
interaction with the Prolog top-level. The command is under the
File
menu. You may wish to increase the
number of save lines
in the Windows Settings
(under the
Settings
menu).
library(clpfd)
: new constraints disjoint1/[1,2]
, disjoint2/[1,2]
model non-overlapping lines and rectangles.
Bug fixes:
All Files
should now work in file
selection dialogs.
spld
and splfr
from working on Windows
95/98 has been fixed.
spld
and splfr
.
spld
warns when input files are ignored
spld
return 0 when
user:runtime_entry/1
succeeds and 1 on failure or exception.
SP_chdir
declares its first argument as const char *
.
-l
and -r
files.
once/1
.
prolog_flag/[2,3]
: fix for runtime systems.
SP_unify()
: undo any bindings on failure.
library(bdb)
: relative filename handling fix.
library(clpfd)
: GC interaction, overflow detection, performance fixes.
libjasper.so
or jasper.dll
).
+atom
maps to SPCanonicalAtom
instead of SPTerm
.
+double
specifier did not work.
Version 3.8.4 is mainly a bugfix release. New features:
abort/0
returns to the innermost top-level, and does not
switch off the debugger.
library(clpfd)
: Given a term Term containing domain
variables, fd_copy_term(Term,Template,Body)
will compute Template and Body where Template is a
copy of the same term with all variables renamed to new variables such
that executing Body will post constraints equivalent to those that
Term is attached to.
library(tcltk))
:
list(CommandList)
to the possible command
formats. It creates a TCL list by, in effect, calling the TCL
command list
with the result of converting each element of
CommandList. The result is that Tcl will treat the result as
a list with the same length as CommandList even if the
elements contains spaces or other special characters.
Current code that uses ListOfCommands
should probably often be
better off using list(ListOfCommands)
. See the manual for
details.
writeq(Command)
and
write_canonical(Command)
as legal command
specifications. Documented that write_canonical
is the
preferred way of passing Prolog terms from Prolog to Tcl and back.
Now the value of variables named _
are ignored. This makes
it possible to avoid errors if some uninteresting result is not in
the special command format. This used to be less of a problem
since such errors were silently ignored. (Note: in SICStus 3.8.5
this was changed to ignore all variables with names
starting with underscore
.)
_
library(tcltk)
always use
UTF8 so that non seven bit characters gets recognized by Tcl. This
transfers character codes unchanged between SICStus and Tcl so it
assumes that SICStus interprets character codes as UNICODE (as this
is what Tcl does).
tk_num_main_windows/2
and tk_main_window/2
no
longer segfaults on Windows if tk_new/2
has not been
called. Added a "tk_new called" check to some other routines as
well. The segfault occurred when, due to a bug in Tk, Tk uses
stubs to access Tcl. Presently Tk uses Tcl stubs by default only
on Windows.
CommandList
now
becomes properly NUL terminated.
prolog_call
now resets the FLI stack to avoid space
leaks when Tcl/tk is the master and Prolog the slave.
library('linda/client')
: New predicate shutdown_server/0
.
The server keeps running after receiving this signal, until such time as all
the clients have closed their connections. Courtesy of Malcolm Ryan.
Bug fixes:
skip_line/1
, at_end_of_file/0
, tab/2
.
include/1
directive.
save_program/[1,2], save_files/[1,2]
: check for I/O errors;
problems with '$ref'/2
terms; problems with SICStus Objects.
unload_foreign_resource/1
: false alarm in prelinked binaries.
library(tcltk))
: Bug fixes and enhancements, see the New
Features
section above for details.
spld
/splfr
on Windows: Errors are now properly reflected in
the exit code from these programs.
library(clpfd)
: disequations speeded up, bugs in
disjoint1/[1,2]
, disjoint2/[1,2]
, element/3
,
propagation, entailment detection, backward compatibility.
spld --static
, load (non-prelinked) dynamic foreign
resources. With this workaround loading a dynamic foreign resource into
a static SICStus executable will still, unnecessarily, load the shared
version of the SICStus runtime system (libsprt38.so
) but the
shared runtime system will not be used. This will be fixed in a
forthcoming release.
Version 3.8.5 is mainly a bugfix release. New features:
copy_term/2
and call_residue/2
now support finite domain
variables.
terms:term_variables_bag/2
is like
terms:term_variables/2
, but its output argument is a list of
variables in order of first occurrence.
bdb:db_open/5
is generalized so that a cache size can be provided.
clpfd:fd_neighbors/2
is a new exported predicates. It is the relation
that clpfd:fd_closure/2
is the transitive closure of.
Bug fixes:
current_atom/1
now terminates correctly.
once/1
is now handled correctly in ISO mode.
predicate_property/2
now handles built-ins correctly.
prolog_flag/2
alias current_prolog_flag/2
now behave as pure
relations in SICStus execution mode.
read/[1,2]
now handle character code 0 correctly.
save_files/2
, save_predicates/2
, and save_modules/2
do not replace given output file extensions. A .po
extension
will be added if none is given. Note, however, that load_files/[1,2]
will only recognize files with a .po
extension as .po
files.
statistics(trail,L)
and statistics(choice,L)
are more
accurate.
stream_code/2
now handles errors correctly.
stream_interrupt/3
raises an existence error under Windows.
stream_property/2
now handles alias/1
property for standard
streams correctly.
stream_select/3
now returns a valid list of streams, and
raises an existence error under Windows.
call/1
.
SP_cons_list
and SP_cons_functor
.
SP_open_query()
are safe.
character_escapes
flag is obeyed in ISO execution mode.
prolog-comment-region
now
uses triple percent signs, to cater for indent-region
.
clpfd:full_answer
functionality has been repaired,
affecting frozen/2
, clpfd:attribute_goal/2
and clpfd:fd_copy_term/3
. clpfd:fd_global/3
is now
a meta-predicate.
sockets:socket_select/[5,6]
are now steadfast;
better error handling.
sockets:socket_select/[5,6]
now works correctly with non-socket
streams that use file descriptors on systems where sockets and file
descriptors are treated the same (i.e., not Windows).
system:working_directory/2
is now insensitive to any
loads in progress. Its arguments are not subject to
absolute_file_name/2
processing--that was never intended.
timeout:time_out/3
now cleans up properly after abort.
library(bdb)
now handles wide characters, e.g. in error messages.
library(clpfd)
now cleans up properly after integer overflows,
and does not assume a 32-bit architecture.
clpfd:cumulative/[4,5]
now check that the resource limit is not
exceeded by any single task.
[-term]
. The problem occurred if the foreign function
did many calls to SP_term_ref()
or if it raised an exception.
spld
and splfr
on Windows 95/98.
spld
and splfr
tried to use a nonexisting file. The
file (sprt.exp
) is now included in the distribution.
halt/0
and abort/0
are handled better in runtime systems
of type --main=load
and --main=restore
.
library(jasper)
and
se/sics/jasper/SICStus
etc.) has been improved:
SPTerm
and SPQuery
now properly detect improper usage and
raise exceptions instead of crashing in the Prolog runtime system.
jasper_call/4
makes foreign
resources and splfr
strictly optional when calling Java from
Prolog.
SPTerm()
is no longer public, it was always
documented as "should really have been private". Use the contructor
SPTerm(SICStus)
instead.
IllegalCallerException
is no longer used. You
should change your code to reflect this. One possible change is to
change throws IllegalCallerException
into throws
SPException
, this works for the 3.8.4 version as well.
IllegalTermException
is new. It is signalled when
attempting to use a SPTerm where the corresponding term ref is no longer
valid. You need to update your code (typically adding throws
IllegalTermException
). One possible change is to use the less specific
throws SPException
instead of throws IllegalTermException
,
this should work for the 3.8.4 version as well.
SICStus.readFromString()
and new versions of
SICStus.openQuery()
etc.
SPPredicate
is now deprecated. The preferred method is to supply
module and predicate name explicitly.
call(M:Goal)
where M
is the module specified when creating the query. This
makes goal expansion and meta argument expansion do the right thing,
i.e., behave as if entered interactively.
SPTerm
object, making
the Prolog side term-ref available for re-use. See
SPTerm.delete()
.
JavaServer
etc is now more clearly marked as unsupported example
code. It represents an unfinished sockets based Jasper interface. It
does not belong in the se.sics.jasper package and will be removed at a
later date.
library(tcltk)
. When Tcl/Tk calls prolog it now ignores the
returned values of all unbound variables and variables with names
starting with underscore _
, In 3.8.4 it used to
ignored only anonymous variables.
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. An
experimental workaround for the Linux 128 MB limit is available
from sicstus-support@sics.se.
The number of arguments of a compound term may not exceed 255.
The number of atoms created may not exceed 262143 (67108863) on 32-bit (64-bit) architectures.
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.
Current support status for the various platforms can be found at the SICStus Homepage:
http://www.sics.se/sicstus/
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
sicstus-request@sics.se
Report bugs through the web interface
http://www.sics.se/sicstus/bugreport/bugreport.html.or to
sicstus-support@sics.se
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
sicstus-users@sics.se
is a moderated mailing list for communication among users and implementors. To [un]subscribe, write to
sicstus-users-request@sics.se