Ann: SWI-Prolog 8.3.11

Dear SWI-Prolog user,

SWI-Prolog 8.3.11 is ready for download. This version fixes some serious
(old) issues and brings the Redis interface to a next level. Highlights:

  • Together with Matt Lilley two memory issues that could crash the
    system were found. Both are related to thread_local/1 predicates,
    one for creating such predicates with a high (>18) arity and the
    other is a race condition between a dying thread releasing its
    local storage and the clause garbage collector.

  • David Tonhofer found a termination bug in format/2 using ~1r.

  • The libedit command line editor (default on non-Windows) was
    subject to an infinite C recursion when receiving a signal,
    causing a crash with SEGV.

  • Some more progress on incremental tabling management, propertly
    introducing opaque tables. Fixed a possible crash on 32-bit hardware
    (Debian tests by Lev Lamberov).

  • Lots of work on the Redis binding. Notable the default conversion
    of values is now to return a number (if the value satisfies numerical
    syntax) or an atom. Use Reply as string to force receiving a string.

    Enjoy — Jan

SWI-Prolog Changelog since version 8.3.10

  • TEST: Test file for destroying local definitions.

  • FIXED: Race between destroying thread-local definitions and clause
    garbage collection. With Matt Lilley.

  • FIXED: Thread-local definitions corrupted the argument declaration.
    Matt Lilley.

  • DOC: debug/0 does not affect trace points.

  • FIXED: Issue#702: call_with_inference_limit/3 determinism when the
    inference limit is exceeded. David Tonhofer.

  • ADDED: Deal with global predicates if the current file is not a module
    file. This provides coloring and meta-predicate handling for other
    predicates in a non-modular program. Unfortunately this still lacks
    whether or not predicates are called from other global predicates.

  • ENHANCED: Use global meta-predicate properties.

  • DOC: reset/3: document interaction between delimited continuations
    and choicepoints.

  • FIXED: Save/restore tabling status over break/0.

  • FIXED: Dependency of incremental tables on monotonic tables.

  • FIXED: Possible assertion failure in WFS handling for tabling on
    32-bit hardware. Lev Lamberov.

  • ADDED: Predicate property monotonic.

  • FIXED: atomic_list_concat/2,3 and atomics_to_string/2,3: wrong
    exception on atomic_list_concat([a,b|c], X) and posssible memory leak
    on errors (non-atomic data, cyclic list).

  • MODIFIED: PL_get_nchars() and friends. Due to some typo CVT_WRITE
    and CVT_WRITE_CANONICAL were the same constant. Also CVT_WRITEQ
    conflicted with CVT_VARIABLE. These constants have been renumbered
    to ensure consistent behaviour as documented.

  • FIXED: an opaque tabled predicate may depend on incremental and
    monotonic predicates without raising an error.

  • ADDED: introduce opaque as explicit attribute for dynamic and
    tabled predicates. An opaque table may depend on incremental and
    monotonic predicates without raising an error.

  • PPA: Support Ubuntu 20.10 (groovy) and reduce the places where the
    known distros are listed to one.

  • CLEANUP: Cleanly exit when running out of memory on pushSegStack().

  • FIXED: Issue#698: format/3 using “~1r”. David Tonhofer.

Package libedit

  • FIXED: Avoid double preparation of the libedit signal handling.
    Double preparation may lead to an infinite recursion in el_sighandler()
    and can happen if multiple threads prepare the library.

Package redis

  • FIXED: Documentation dependency

  • ADDED: Output Term as prolog as alternative to prolog(Term).

  • ADDED: redis_subscribe/4 and friends to accept channel keys in the
    A:B:… notation.

  • FIXED: redis_subscribe/4 Failed to broadcast due to auto type

  • FIXED: proper error when asking for a dict or pairs and only a single
    bulk is returned.

  • FIXED: Protocol resync after a possibly incomplete read.

  • FIXED: redis_hscan/4: failed after changing return to auto.
    Added test case.

  • MODIFIED: Report status replies as status(atom), providing the status
    as a lower case atom instead of an uppercase string.

  • MODIFIED: Use auto as default type. After discussion on Discourse.

  • FIXED: auto types number detection.

  • ENHANCED: Reporting connection failures.

Package ssl

  • FIXED: Possible buffer overflow when reading certificates with too
    long lines. Matt Lilley.

  • FIXED: SSL BIO gets binding to Prolog streams. Did not include
    the \n, did not 0-terminate the string and got EOF handling wrong.
    Affects loading private keys (and possibly more). Joined debugging
    with Matt Lilley.

  • TEST: Added location for running the installed test suite.

Package swipl-win

  • CLEANUP: Avoid C++ compiler warning about undefined timeout_ms.

Package table

  • FIXED: Handle empty table files.