Dear SWI-Prolog user,
I’m happy to announce SWI-Prolog 8.1.21. The main enhancements are
related to tabling, but there are quite a few smaller but important
fixes as well as many documentation enhancements thanks to the
continuous comments on documentation on this forum. Highlights:
-
Much better support for tabling with answer subsumption, also
known as mode directed tabling. These patches notably allow
answer subsumption and normal tabled predicates to have mutual
dependencies and provide well founded semantics for predciates
using answer subsumption. With these changes,
PLOW, A Meta-Interpreter
for Fuzzy (Probabilistic) Logic Programming developed for XSB now
runs on SWI-Prolog. -
Matt Lilley redesigned much of the library(ssl) handling of
certificates. This supports more reasoning about certificate
and more fine grained support of accepted certificates. Basic
usage (using the default system certificates or no certificate
checking) is compatible. Applications using more advanced
certificate handling may need updating. See the changelog and
documentation for details. -
When and where to prompt the user is rationalized and documented
after discussion here. -
format/3 now raises an exception on excess arguments.
-
Fixed a possible crash in stream_pair/3.
-
Several extensions to the XSB compatibility framework.
Enjoy — Jan
SWI-Prolog Changelog since version 8.1.20
-
FIXED: Compilation of single threaded version
-
ENHANCED: Tabling with answer subsumption. This elaborate patch is a
fundamental rewrite on how answer subsumption stores the aggregated
answers and how it relates to the default tabling. It realises the
following: - Support well founded semantics under answer subsumption- Support tabling SCCs (Strongly Connected Components) holding
both normally tabled goals and goals subject to answer subsumption. - Add XSB compatible not_exist/1. - Simplify notably the Prolog
code for tabling completion for
better performance.
- Support tabling SCCs (Strongly Connected Components) holding
-
FIXED: build without O_PLMT.
-
FIXED: crash in ‘$tbl_worklist_data’/2 (for table debugging).
-
FIXED: Issue#537: stream_pair/3 crashed if the first argument is not
a blob (atom or stream pair). Reported by Peter Ludemann. -
FIXED: xpce isue#17: predicate_label/2 should call
prolog_predicate_name/2 using a head rather than a predicate
indicator. Paulo Moura. -
PORT: Add
-with-zlib
to the MinGW build instructions for library
archive. Matt Lilley. -
FIXED: Docs says that prompting only depends on the
tty
property of
user_input
. Implementation also demandeduser_output
to be a
tty. Now according to docs, which is compatible with e.g.,bash
. -
DOC: Updated docs for prompt/2.
-
MODIFIED: Do not prompt if
user_input
is not connected to a terminal,
i.e., stream_property(user_input, tty(true)) isfalse
. After forum
messages by Peter Ludemann and Boris Vassilev. -
DOC: deprecate old meta predicates and explain +/1 vs. not/1.
-
FIXED: XSB get_residual/2: also deal with answer subsumption.
-
FIXED: table/1: answer subsumption (mode) specifications with only
indexed arguments. -
ENHANCED: tabling with answer subsumption: as normal tabling, only
add the unbound answer skeleton to the answer table. -
XSB: properly implement not_exists/1.
-
XSB: abort/1 is an XSB built-in rather than defined in
error_handler
. -
FIXED: Avoid predicate_property(_:Head, visible) with instantiated
Head creating empty predicates in all existing modules. This is
not a semantic problem, but it wastes resources. -
ADDED: Collect statistics on shared tabling: deadlocks and events where
a thread has to wait for a table to be completed by another thread. -
FIXED: mutex_statistics/0: keeping trackof known mutexes was broken.
-
FIXED: Create the
shared_table_space
Prolog flag. -
MODIFIED: resource_error(table_space) is now
one of resource_error(private_table_space) or
resource_error(shared_table_space). -
XSB: :- table/1: accept
as private
. -
MODIFIED: format/1-3: raise an exception if there are more argument
than are consumed by the format. Issue raised by Boris Vassilev
on the forum. Note that this may result in good programs now being
aborted with an exception. I have little clue as to how many problems
this may raise. Introducing a flag to choose between silent operation,
warning or error seems an overkill as well though. -
XSB: Added coninc/1,2 to the
gensym
module. -
XSB: Added
thread
module. -
XSB: provide thread_shared/1.
-
FIXED: Possibly use-after-free while inserting a node in a trie.
This patch also fixes the trie/tabling memory usage admin. -
ENHANCED: read_term/2,3 should not create a new module if the option
module(Module) is given but the target module does not exist. Now uses
user
as this is the default module from which new modules inherit.
Made this behaviour explicit in the documentation. -
DOC: Added library(thread) to main documentation.
-
ADDED: prolog:deprecated//1 to generate dedicated deprecated messages.
-
ADDED: tbacktrace/1,2: print the stack of another thread in the
console for debugging purposes. -
ADDED: library(thread): call_in_thread/2 to run a goal synchronously
in another thread, allowing to obtain information from a thread. -
DOC: Updated man/gen/swipl.bbl, the generated LaTeX bbl file used
for the HTML documentation. -
DOC: predicate_property/2 enhancements.
-
DOC: Add library(prolog_jiti) to the manual.
Package http
-
FIXED: Missing cut
-
MODIFIED: http_open/3: map cacerts_file(File) to cacerts options.
Package ltx2htm
- ENHANCED: Map some more mathematical symbols to HTML entities.
Package plunit
- DOC: Fix documentation link. Also removes some old files from
pre-cmake eras.
Package semweb
- ENHANCED: library(semweb/rdf_portray): recognise HTTPS URLs.
Joos Geurts.
Package ssl
-
MODIFIED: ssl_context/3 option processing. The option cacert_file(File)
has been deprecated in favor of cacerts(List) to ensure unambiguous
merging of options. This notably affects the hook http:open_options/2
when both cacert_file and cacerts options are provided. New rules:- Only use cacerts(List) - If there are multiple answers,
http:open_options/2 earlier values
for cacerts(List) overrule later. For each solution of this hook,
cacert_file(File) is mapped to cacerts([file(File)]) before options
are merged. - An explicit cacerts(List) in the option list
overrules defaults.
If a cacert_file(File) term is mapped the system prints a deprecated
message. - Only use cacerts(List) - If there are multiple answers,
Package table
- PORT: Fix for MacOS by Abramo Bagnara.