Ann: SWI-Prolog 8.1.3


#1

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 CMAKE.md

  • 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
    modules.

  • 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 README.md

  • 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
    wrappers.

  • 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 libjpl.so
    to CMake.

Package jpl

  • INSTALL: Allow installing libjpl.so 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.

#2

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.