write/[1,2]
is now much faster when writing atomic terms.
assertz/1
and friends are now faster when asserting facts,
i.e. clauses without bodies.
library(terms)
:
the new predicate term_hash/3
allows more control over
the hashing behavior and hash algorithm used.
Notable new features: a new, better, default hash algorithm and several other algorithms, including the 4.0.4 version, are available; it is possible to obtain a full 32-bit hash value; it is possible to get an instantiation error or hash value when the term being hashed is nonground.
term_hash/[2,4]
has been changed to use a better hash
function by default. The new hash function gives less collisions in
general, and gives the same value on all platforms.
Please note: The change of hash function is an incompatible change that may affect programs or data that depend on the old hash algorithm. The old behavior can be obtained as follows:
%% Pre 4.0.5 version term_hash_4_0_4(Term, Hash) :- term_hash(Term, [algorithm('sicstus-4.0.4')], Hash). term_hash_4_0_4(Term, Depth, Range, Value) :- term_hash(Term, [algorithm('sicstus-4.0.4'), depth(Depth), range(Range)], Hash).
library(debugger_examples)
updated.
user:error_exception/1
is now called with the
exception term specified by ISO Prolog, i.e. the same term that is
seen by catch/3
and on_exception/3
. It used to be called
with an internal representation of the exception.
This affects error exceptions, i.e. those with functor
error/2
. The old (pre 4.0.5) value passed to
user:error_exception/1
is the second argument of the
error/2
structure.
Please note: This is an incompatible change. Old code that
uses user:error_exception/1
may need to be rewritten.
If the old code looked like:
%% Pre 4.0.5 version user:error_exception(Old) :- do_something(Old).
it can be rewritten as follows (which will also work in older versions of SICStus Prolog):
%% >= 4.0.5 version user:error_exception(New) :- ( New = error(_, Old) -> true; Old = New), do_something(Old).
trimcore/0
is now more thorough when releasing memory back to
the operating system. This also affects the trimcore
-variant
used by the top-level.
malloc()
et al. as
memory manager instead of the default custom allocator.
malloc()
is selected when starting sicstus with the new option
-m; when initializing the SICStus run-time with the
environment variable SP_USE_MALLOC
set to yes
; for
SICStus run-times built with the new spld option
--memhook=malloc; and when calling
SP_set_memalloc_hooks()
with the new option
SP_SET_MEMALLOC_HOOKS_HINT_USE_MALLOC
.
See SP_set_memalloc_hooks.
library(clpfd)
:
unification with domain variables as well as
propositional combinations of arithmetic constraints have been accelerated.