Ann: SWI-Prolog 8.3.1

Dear SWI-Prolog user,

I’m happy to announce SWI-Prolog 8.3.1. In addition to bug and
documentation fixes we have something new: monotonic tabling.
Highlights:

  • Fixed possible crash in setup_call_cleanup() cleanup handler
    by Keri Harris.

  • Fixed a possible crash in the GUI debugger related to
    backtracking.

  • Fixed possible deadlock on exit due to a bug in
    library(time).

  • MacOS installer to avoid dependence on Macport libraries.
    This hopefully makes the binaries run on 10.12 and later.

  • Support type-independent checking in atom_string/2 and
    friends for mode (+,+).

  • A new set of documentation fixes by Adrian Wong and several
    other doc patches after comments on Discourse. Adrian also
    fixed reference rewriting for the glossary section. Thanks!

  • Added scripts/gcov-swipl, explaining how to build for C
    coverage analysis and run swipl on some program and writing
    the coverage analysis files.

  • Added monotonic tabling. This is mostly an early prototype.
    The idea is to have truly incremental updates for dependent
    tables after adding clauses to a dynamic predicate. This
    can only work if the program that uses the incremental
    tables is monotonic though, i.e., adding clauses shall
    never invalidate an existing answer.

    See docs

Documentation and bugfixes will shortly be backported to 8.2.1.

Enjoy --- Jan

SWI-Prolog Changelog since version 8.3.0

  • ADDED: Monotonic tabling

  • FIXED: get_returns_for_call/2: module qualification

  • FIXED: Possible use-after-free

  • DOC: call/1.

  • BUILD: When building the MacOS bundle, tell CMake not to look into the
    Macport bin, lib and include. We want to use our own dependencies
    that are compiled for MacOS 10.12 and later rather than the Macport
    ones that are for the current OS and for others we want the MacOS
    native libraries to reduce our footprint.

  • FIXED: keep pending choicepoint frames visible to the stack shifter

  • FIXED: prolog_frame_attribute/3 getting local variables for a
    frame after backtracking to the next clause could unify with a
    non-initialized var.

  • DEBUG: Wrong CHK_SECURE assertion.

  • FIXED: Added missing release_def() for computation of the size
    property of predicates. May prevent clause garbage collection.

  • MODIFIED: prolog_listen/3: when listening on a dynamic predicate,
    assert the new clause before calling the event hook.

  • FIXED: Changed unviewable background color for DCG right hand context

  • DOC: Removed unix/1 docs from main manual as this is merely a partial
    Quintus emulation.

  • DOC: char_type/2: updated general description.

  • DOC: Use consistent command line option names

  • DOC: Fix typos in manual

  • MODIFIED: atom_string/2, string_chars/2, string_codes/2 and
    text_to_string/2 accept any text representation as input on both
    arguments. If both are instantiated, string comparison is applied.

  • DOC: Testing options

  • FIXED: Be more selective in classifying files as library files.
    Notably do not make the test files library files as this breaks the
    XSB emulation and thus test_installation/0.

  • TEST: Allow all XSB tabling tests to run in one Prolog instance to
    facilitate coverage analysis.

  • TEST: Avoid basic tabling tests to succeed with a choicepoint if
    there are (already) shared tables.

  • TEST: Include tabling tests when calling test.pl

  • BUILD: Redefine __assert_fail() in a more safe way that allows
    –keep-inline-functions.

  • MAINTENANCE: Added scripts/gcov-swipl to gather coverage information to
    access the completeness of our test set as well as PGO optimized build.

  • DOC: tcp_sockopt/2 must be tcp_setopt/2. Adrian Wong.

  • DOC: Fix typos in manual

  • BUILD: Fix PGO build to first install the library

  • DOC: Added documentation for dealing with releases

Package bench

  • OPTIMIZE: Extend the benchmark set with clpfd nqueens

Package clib

  • FIXED: library(time): pthread_cond_signal() was called without
    holding the mutex. Although allowed, this can result in unpredictable
    behaviour. Notably, if may cause cleanup of the library to deadlock.

Package http

  • TEST: Disable public network tests by default

Package jpl

  • DOC: jpl_class_to_raw_classname/2 updated

Package ltx2htm

  • FIXED: Prevent smart quotes in a code environment.

Package pldoc

  • ADDED: rewrite_ref/4 for gloss class Glossary references were broken
    (404) in doc_server because doc_server didn’t rewrite the glossary
    references.

    Adding rewrite_ref/4 for gloss class
    will enable rewriting of the glossary references in doc_server.

Package semweb

  • TEST: Disable public network tests by default

Package ssl

  • TEST: Disable public network tests by default