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
tests. - 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)
tests. -
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
thread_join/2. -
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
insrc
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.