Ann: SWI-Prolog 8.3.22

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 =>/2 as a goal. Boris Vassilev.

  • FIXED: Bug#810: Failed to re-initialize trailing of table operations
    in a nested transaction. Crashed. Eric Zinda.

  • ENHANCED: Handle $/1 as 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.

  • FIXED: $/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
    are clauses.

  • ENHANCED: locale_create/3: allow an atom for the name.

  • DOC: det property 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
    a file.

  • 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
    a continuation.

  • FIXED: Make cross referencer split head and guard in Head,Guard => Body rules.

Package bench

  • ADDED: PGO training data for determinism declarations.

Package xpce

  • FIXED: PceEmacs: Make ^C^E (export) work for => rules.

  • FIXED: Possible autoload hook in source navigator. Rick Workman.

1 Like