Ann: SWI-Prolog 8.1.3


Dear Prolog user,

I’m happy to announce SWI-Prolog 8.1.3. Thanks to extensive feedback and
help, things are moving fast. Highlights:

  • SECURITY: fixed possible buffer overrun in the SGML/XML/HTML parser.
    This bug is related to error reporting against documents processed
    from http_open/3 on a long URI. With help from Keri Harris.

  • Goal expansion can now easily wrap a goal without running into
    non-terminating expansion. With input from Peter Ludemann and
    Paulo Moura.

  • Fixed various issues wrt. tabling and XSB emulation. The source
    now includes two of the tabling test suites from XSB. With help
    from Teri Swift and David Warren.

  • Improvements to garbage collection scheduling. This can cause huge
    speedups in some rare corner cases. Abramo Bagnara.

  • Fixed packaging issues for Debian and MacOS with help from Lev Lamberov
    and Paulo Moura.

  • Fixed swipl-ld.exe for Windows with help from Abramo Bagnara.

    Enjoy — Jan

SWI-Prolog Changelog since version 8.1.2

  • MAINTENANCE: Provide support for using AddressSanitizer
    (-fsanitize=address) See

  • DEBUG: Avoid c99 dependency for(int i=0; ... in DEBUG statement.

  • INSTALL: Added declaration for JNIDIR (requires updating jpl module)

  • PORT: Android minizip USE_FILE32API

  • TEST: Added XSB ai_tests set to our test suite.

  • FIXED: ‘$tbl_table_discard_all’/1 deleted worklists twice.

  • XSB: Fixed handling a redefined XSB module if the redefined SWI-Prolog
    module was already loaded.

  • TEST: Added xsbtests/basic_tests test suite from XSB Prolog to
    our tests. Added a Prolog driver to fit these tests into the
    SWI-Prolog/CTest framework. Also avoided some singleton in branch
    message and use include/1 to get the data set available from multiple

  • FIXED: :- table/1: undefined predicate check should ignore implicitly
    imported predicates.

  • FIXED: reloading a file with tabled predicates sometimes failed to
    rename the implementation.

  • XSB: Added dummy implementations for set_pil_on/0 and set_pil_off/0.

  • PORT: Conditionally deal with -fprofile-dir= and
    -Wno-maybe-uninitialized as these are not supported in the default
    MacOS toolchain. Paulo Moura.

  • FIXED: Reenable actually freeing worklists.

  • DOC: Updated demo/README and renamed to

  • FIXED: trie_gen/3: memory leaks

  • CLEANUP: Use new unification style extraction for trie terms for also
    for trie_term/2 and its internal usage in tabling.

  • TEST: Adjust test parameters for changed GC policies.

  • ENHANCED: Make gc scheduling dependent on the sizes of all stacks.

  • ADDED: Collect statistics over most recent garbage collections,
    including the time spent on GC relative to useful CPU time.

  • TEST: Moved trie tests from core to tabling for better balance.

  • FIXED: trie_gen/3: Variable database resizing.

  • FIXED: tries for complex nested terms. Bug introduced with new
    trie_gen/3 implementation.

  • PORT: swipl-ld.exe to configure for native MinGW tools.

  • FIXED: swipl.exe --dump-runtime-variables to provide the right
    value for PLLIBDIR on Windows. Abramo Bagnara.

  • FIXED: Avoid excessive GC because the system incorrectly believes it
    is nearly reaching the stack limit. This is only part of the solution
    to avoid excessive GC.

  • TEST: Test trie_gen/3 variable sharing.

  • DOC: expand_goal/2 discussing fixed-point computation for generating

  • ENHANCED: goal_expansion/2: when wrapping a goal, do allow the same
    expansion to work on arguments.

  • ENHANCED: Allow goal_expansion/2,4 to wrap a goal.

  • COMPATIBILITY: Allow basic saved states to work with --traditional.

Package debian

  • INSTALL: Use -DJNIDIR=$(JNIDIR), leaving installation of
    to CMake.

Package jpl

  • INSTALL: Allow installing in $JNIDIR to support Debian
    install. After discusion with Lev Lamberov.

Package ltx2htm

  • FIXED: read outside automatic variable.

Package sgml

  • SECURITY: Possible buffer overrun when handling parser errors and
    warnings if the file name is very long. This patch also puts a
    separate length constraint on the location such that not all space is
    used by the location part of the message. With help from Keri Harris.

Just wanted to send kudos for those responsible for the optimizations in garbage collection. Any of my tests that had significant time spent in GC were much improved, some by a factor of 10. Guess you hit my sweet spot.



Were any of these supposed to be updated?



I can’t interpret that. The top seems to suggest %PATH% cannot be extended. That is either an NSIS or Windows limitation. No idea what the bottom is about.


The bottom is files in swipl/bin that are not current. My concern is maybe the setup error caused things to not be installed.