Ann: SWI-Prolog 8.1.12

Dear SWI-Prolog user,

I’m happy to announce SWI-Prolog 8.1.12. Most of the new stuff is about
stability and portability. Highlights:

  • Fix message queue handling on Windows. Now uses Windows condition
    variables introduced since Windows Vista (NT version 0x600). This
    avoids possible deadlocks and makes the implementation fully compatible
    to the POSIX version. Deadlock diagnosed and new implementation by Keri Harris.
  • Some work towards re-establishing portability to MSVC (Microsoft
    Visual C) compilers. See earlier announcement on the forum.
  • Some more Windows patches: thread_exit/1 and fixed/blocked various
  • library(archive): do not pad generated archives (Matt Lilley)
  • Tabling stuff: fixes to dynamic/2 directive. Race conditions and
    memory issues related to tables shared between threads. First steps
    preparing for incremental shared tabling: allow re-evaluation to be
    aborted (and resumed in this or some other thread).

Windows version is now built using Ubuntu 19.04, MinGW 8.3.

Enjoy --- Jan

SWI-Prolog Changelog since version 8.1.11

  • TEST: Windows: portable testing for end-of-stream handling.

  • TEST: Tests for exceptions during re-evaluating incremental tables.

  • ADDED: define exception handling while re-evaluating invalid
    incremental tables.

  • FIXED: Queue timeout handling for Windows. Now passes all (queue)

  • ENHANCED: freePrologThread() may be called from a different thread
    than the terminating one, notably for thread_exit/1. We now set LD
    to the local data of the thread being destroyed such that cleanup
    handlers act on the right data. This is like engines operating on a
    different OS thread. This fixes a problem in the Windows port where
    thread cleanup is not done right.

  • DOC: thread_exit/1 bug in Windows port.

  • FIXED: Wrong assertion for Windows causing a possible crash in

  • DEBUG: Avoid warnings when compiling the Windows version for debugging.

  • FIXED: asynchronous destruction of shared tables.

  • FIXED: Leave reclaiming call trie in case of a race to atom-GC.

  • PORT: VS2019 puts the .exe in src/{Debug,Release}, so we must add add a
    swipl.home in src as well.

  • PORT: VS2019: handling of _snwprintf() and ssize_t for swipl-ld.c

  • PORT: Various changes to make the core compile with VS2019.
    Now compiles and links with several warnings in single threaded mode
    without GMP.

  • MSVC: disable some warnings, support popcount and ssize_t.

  • PORT: Avoid installing Windows requirements we did not configure.

  • PORT: Perform alignment config for standard C compilers.

  • FIXED: condition variable deadline handling for Windows. With help
    from Keri Harris.

  • PORT: Set _WIN32_WINNT once globally (currently 0x600, Vista).

  • ENHANCED: Re-introduce making cv_timedwait() only return on timeout,
    thread signal or the CV being signalled. The loop was a bogus after
    44b66326, but most likely unintentionally.

  • PORT: use Win32 condition variables instead of Win32 events. This
    avoids race conditions that can lead to Prolog hanging

  • PORT: save_program/2: fixed finding Windows shared objects for the
    current architecture.

  • ADDED: When a I_ENTER instruction is encountered via D_BREAK and the
    hook replaces the goal with a new one (i.e. via the call/1 option)
    then skip the original body of the goal

  • FIXED: XSB emulation: is_most_general_term/1.

  • DOC: typo in incremental tabling example. Paulo Moura.

  • FIXED: predicate options declaration for dynamic/2

  • ADDED: Prevent generating dependency of a shared table on a private
    table or private (thread_local) predicate.

  • FIXED: dynamic/2: option thread(local/shared) was ignored.

Package semweb

  • TEST: block Unicode tests use characters outside the UCS-2 range.

Package xpce

  • CLEANUP: _WIN32_WINNT is set globally.
1 Like