Dear SWI-Prolog user,
The development version 8.1.7 has been uploaded. Most of the work is
on tabling, but there are more noteworthy developments:
-
Keri Harris implemented several enhancements to clause garbage
collection. This fixes some possible crashes and brings a
considerable performance improvement for programs with many
(thousands) of dynamic predicates. Also enhances the performance
of tight retract/asserta updates. -
ADDED: library(prolog_wrap) to install and remove wrappers
around predicates at runtime. -
Carlo Capelli enhanced MacOS/Linux Qt console handling of ANSI
sequences to support all the stuff SWI-Prolog currently uses. -
ADDED: message_queue_set/2 to change the size of existince message
queues. -
TABLING and XSB integration
This is under continuous development, sponsored by Kyndi and with
help of Terri Swift, David Warren and Fabrizio Riguzzi.- Use library(prolog_wrap) to get rid of renaming the original
definition. Also allows for declararing a predicate tabled
after defining it. - Fixes to handling non-ground positive delay elements during
simplification. - Some fixes to answer completion. Some part of this code is
still suspect. - About 40% performance improvement on our benchmark set.
- MODIFIED: renamed unknown/0 into undefined/0. Considering the
warning on the stability of the interface and the short-lived
unknown/0 there is no backward compatibility definition. - Several predicates have been added to the XSB dialect emulation
to run the OpenRuleBench benchmark set.
- Use library(prolog_wrap) to get rid of renaming the original
-
Pengines: provide .detach() to tell a pengine the client stops
listening for now, but might come back. Backed up in SWISH by
config-available/tasks.pl to allow detaching long running tasks
in authenticated environments. -
Windows: Some issues with Unicode characters > 64k. Jan Burse.
-
Provide PPA for Ubuntu 19.04 Disco Dingo.
On the short term development continues with tabling, notably sort out
remaining problems with the answer completion step for implementing well
founded semantics and improve performance.
Enjoy --- Jan
SWI-Prolog Changelog since version 8.1.6
-
MODIFIED: Tabling unknown/0 has been renamed to undefined/0 after
discussion with Terri Swift and David Warren. -
FIXED: We need the answer return template to avoid early completion
of answer_completion/1 (now /2). -
XSB: Added path_sysop/2,3 and concat_atom/2.
-
XSB: Added walltime/1.
-
FIXED: Propogation of last false answer if the worklist is not
explicitly negative. -
ADDED: declare numbervars/4 as sandbox-safe.
-
ENHANCED: No need for answer completion if there was no
simplification. David Warren. -
FIXED: Various issues with non-ground positive delay elements and
answer completion. Serious cleanup. -
FIXED: more_general_table/2 for answer completion.
-
FIXED: is_ground_trie_node()
-
ENHANCED: Do not explicitly join the global and local delay lists
when adding an answer, but instead have update_delay_list() joining
the two list while creating the conditional answer. -
FIXED: Updating positive delay elements from non-ground answers
from incomplete tables. This breaks delay_tests/gfp.P, which seems
sensitive to our suspect handling of this case. -
ENHANCED: inline delim/4, improving tabling performance with about 20%.
-
ENHANCED: merge answer and suspension clusters to reduce memory
and malloc(). -
ENHANCED: Simplify the work in updating the delay list for the next
completion step. -
ENHANCED: Merge getting a conditional answer and updating the delay
list into one foreign predicate ā$tbl_answer_update_dlā/3. -
CLEANUP: Simpler and more efficient tnot/1
-
FIXED: Add sandbox declaration to make the new wrapper based tabling
work again with Pengines. -
ENHANCED: improve performance of asserta/1 when there are lots of
erased clauses -
ADDED: message_queue_set/2 to modify properties of an existing queue.
-
FIXED: heap-use-after-free error (fairly benign; may lead to wrong
code size statistics). -
ENHANCED: do not consider dynamic predicates as dirty until clauses
have been retracted -
FIXED: Offload unregistration of dirty foreign/thread-local predicates
to the thread performing clause GC. This ensures that access to
DirtyDefInfo structures is no longer racy -
FIXED: Predicates do not need to be activated when setting a frameās
generation as the frame generation is guaranteed to be greater than
the current CGC starting generation -
FIXED: Use call((Args)) for calling wrappers to avoid the
arity >8 limitation for call/N under reset/shift. This is anyway a
step towards inlining the wrapped goal. -
ENHANCED: Use new wrap_predicate for tabling. This allows for
transparent reasoning over tabled predicates and making a predicate
tabled after it has been defined. Currently implies a small slowdown,
but eventually this will provide a speedup. -
FIXED: Issue#475: xinteger//1: missing cut and inconsistent handling
of negative integers over the two modes. -
ENHANCED: do not consider dynamic predicates as dirty until clauses
have been retracted -
ENHANCED: incrementally track dirty clause count to avoid O(N) cost
when considering clause GC -
FIXED: wrap predicates with 0-arity.
-
ADDED: library(prolog_wrap), providing wrap_predicate/4 and
some friends to manage dynamically wrapping and unwrapping Prolog
predicates using an arbitrary body term. With input from Paulo Moura,
Eric Toucher and Peter Ludemann on the forum. This is experimental
The interface and details may change in the coming weeks. -
FIXED: Issue#474 (Windows) several issues due to
sizeof(wint_t) == 2
-
DOC: Typo, layout.
-
CLEANUP: Avoid warning about ununsed IS_REC_DELAY(). Paulo Moura.
Package pengines
-
MODIFIED: Pengines handling of /abort through HTTP. The abort handler
(still) sends a signal to the Pengine. The Pengine will reply through
the handler that is waiting for it (create, ask, next, pull_respons)
with an abort message. This waiting request is no longer aborted
in JavaScript, which didnāt work anyway. The /abort handler itself
answers a 404 if the Pengine doesnāt exist or a JSONtrue
if the
signal was sent, without waiting for its reply. -
ADDED: /pengine/detach method that allows for detaching from a
connected Pengine, keeping it running in the background. This is
backed up by changes to SWISH that can be activated to allow long
running jobs.
Package swipl-win
-
FIXED: ANSI escape sequences translation and help_pager flag.
-
FIXED: autocompletion crash
Package xpce
-
CLANG: Add unneeded initialization to avoid a warning.
-
CLEANUP: Avoid some (benign, I think) errors trapped by Address
Sanitizer.
Package zlib
- TEST: Issue#473: zlib tests failing on Windows due to CR/LF encoding.