Dear SWI-Prolog user,
SWI-Prolog 8.3.22 is ready for download. Most of the changes concern
recent additions such as unification moved into the head and the /0 and /1 determinism checking. Besides this there are a few fixes to
If you are running 8.3.21 you are stronly adviced to upgrade as the
migrated head unification could result in wrong (unification) behavior.
I’m fairly sure the problems are fixed with 8.3.22. Still, for
production use it may be better to stick with 8.3.20 for a couple of
weeks until the dust has settled.
Moved unification and => rules has changed. Now a plain unification to a
head argument used as guard is migrated into the head and (thus) subject
to SSU. This should not be considered set in stone yet. Future
versions may further restrict that or introduce a single sided
unification that can be migrated without changing semantics.
Enjoy --- Jan
SWI-Prolog Changelog since version 8.3.21
ENHANCED: Error message when using
=>/2as a goal. Boris Vassilev.
FIXED: Bug#810: Failed to re-initialize trailing of table operations
in a nested transaction. Crashed. Eric Zinda.
$/1as control structure for goal_expansion/2 such
that var_property/2 is correct.
ENHANCED: lazy_list/2 to avoid duplicating the iterator closure.
This allows for using a complicated closure and using destructive
assignment in the closure to update the state.
FIXED: Decompilation (clause/2 and friends) for unifications moved
into the head had several bugs, mainly related to optimized-away
H_VOID before I_ENTER and friends. Reported by Edison Mera.
FIXED: H_LIST_FF translation for a unification against a list moved
to the head.
$/1: garbage collector crashes on GC inside the goal.
FIXED: Variable balancing, decompilation and error reporting of $(Goal)
if Goal introduced new variables.
ADDED: IDE support for det/1: highlighting and checking that there
ENHANCED: locale_create/3: allow an atom for the name.
detproperty for predicate_property/2.
FIXED: cb55f2c3da164d61c5f684482653bee1c31d51f3 for handling of -0.0.
ENHANCED: Issue#806: Also use SSU rules for the wrapper in max_member/2
and max_list/2. David Tonhofer.
MODIFIED: Issue#808: The functions max/2 and min/2 now return the
type used for the comparision when the two numbers are numerically
equivalent. David Tonhofer.
FIXED: Allow changing :- predicates to => or back while reloading
MODIFIED: Allow unifications in the guard of => rules to migrate to
the head. This patch also adds documentation that answers questions
on Discourse about the behaviour of the guard.
FIXED: Error reporting from $/1 crashed.
ENHANCED: Simplify !/0 if there is nothing to prune.
ADDED: $/1 to state that the argument goal must succeed
FIXED: When re-evaluating a monotonic table falsecount propagation
should not pass the node we are reevaluating. This was already the
case for incomplete tables, blocking this propagation for incremental
FIXED: Detection of which choice-point references are captured in
FIXED: Make cross referencer split head and guard in
Head,Guard => Bodyrules.
- ADDED: PGO training data for determinism declarations.
FIXED: PceEmacs: Make ^C^E (export) work for => rules.
FIXED: Possible autoload hook in source navigator. Rick Workman.