Dear SWI-Prolog user,
I’m happy to announce SWI-Prolog 8.3.13. Version 8.3.12 has lived for half an hour before discovering an issue with
This version fixes some issues and provides some useful extensions and documentation enhancements. Highlights:
Last release introduced a regression in PL_get_chars() that affected the
C++ interface and the Qt based swipl-win console on MacOS and Linux. Fixed.
Enhancements to PL_get_nchars(), fixing Redis interface for handling Unicode
and providing a significant speedup for non-ASCII messages.
Fix to the debugger where a redo could undo bindings in the wrong stack
frame (leading to wrong behaviour in debug mode). Old bug.
Fix to arg/3 when called as arg(-,+,–). Reported by Edison Mera.
Introduced when moving arg/3 to the VM in 8.3.7.
A couple of bug fixes in tabling.
Eric zink contributed a new section on the command line debugger that
was well received on his blog. This also led to some enhancements to
the Markdown pipeline for generating documentation, notably citations,
automatic links and tables.
Both the HTTP server and client can now use Unix domain sockets after
discussion on Discourse.
Enjoy — Jan
SWI-Prolog Changelog since version 8.3.11
DOC: spy/2 does not exist.
DOC: Reformatting textdebugger.md, use [@cite] and fix some code
annotations to use
DOC: CHR section names to include CHR to make them easier to find
and reduce ambiguity in search results.
DOC: Rewrote “Overview of the Debugger” I extended the text/command
line debugger overview to add more detail and examples for newer users.
It is pretty much a rewrite, but I reused some of the text from
The feedback threads on discourse for it are here:
Learning how to use the Prolog Command Line Debugger? Try this new overview!
Feedback please on proposed update to Tutorials/Beginner/Debugger.
I wrote it as a markdown file in attempt to avoid
learning latex :-). Seemed to work pretty well (writeup here:
Using markdown with pldoc to generate manual content),
but required using the latext \input command to get the input into the
master overview.doc and and update to CMakeLists.txt to build.
I confirmed that the HTML builds and looks right.
ADDED: transaction/2: option bulk(Boolean)
ADDED: transaction/2, providing additional options to transactions.
MODIFIED: When using use_module/1,2 and friends on a non-module
file the error has changed from
domain_error(module_header, FirstTerm)to simplify debugging.
Notably this error can be the result of term_expansion/2 that rewrites
begin_of_fileor the module header to something that is not a module
FIXED: Do not use sandboxing during autoloading. Note that the
autoload directive is not permitted in sandboxed code, so users cannot
load untrusted code using autoload/1,2.
FIXED: debugger could reset wrong variable when debugging a redo
action. May lead to incorrect behaviour in debug mode.
ENHANCED: xterm interactor font selection and size specification.
FIXED: set_prolog_flag/2: propagate errors from switching debug mode
ADDED: PL_put_term_from_chars(): flag
CVT_EXCEPTIONto raise an
exception on a failure rather than returning the exception term.
ENHANCED: PL_get_nchars(): immediately write to a UTF-8 string if
REP_UTF8is specified. This used to first write ISO Latin 1, then
wchar and finally transfer to UTF-8 for terms that cannot be represented
as ISO Latin 1.
FIXED: PL_get_nchars(): avoid pending exception in write conversion
if the term cannot be represented as ISO Latin 1.
FIXED: XDG path handling for
returned both the common data and config paths, while common config had
FIXED: incremental tabling with answer subsumption call to start
ADDED: Started to deal with the relation between transactions and
tabling. Currently deals with rolling back answers from monotonic
FIXED: arg/3 when compiled as B_ARG_VF did not correctly use the slow
route if the argument is unbound. Edison Mera.
TEST: wrong format/3 usage causing a failure unrelated to the test.
TEST: Relax XSB tabling test abol_test3b.P as reclaiming the tables
is not guaranteed.
FIXED: Possible race in shared table handling. Leads to “Oops,
worklist trie doesn’t point back at me!” messages.
FIXED: PL_get_chars() and friends handling of
CVT_WRITEQ. This is
(among others) used as fallback serialization in the C++ interface.
- ADDED: uri_resolve/3 and related predicates that take a base URI
to accept a string in addition to an atom for the base URI.
- DOC: Add CQL to the section headers to improve searching.
ADDED: http_open/3 to accept unix_socket(+Socket).
ADDED: http_server/1,2: allow binding to a Unix domain socket.
- ADDED: Support
ADDED: Create a link from … flag
`name`… if name is a
current Prolog flag.
`name/arity`to create a link as
double backticks creates a predicate indicator that is not a link.
ENHANCED: Use LaTeX package tabulary for dealing with tables that
have one or more columns with long text in cells.
ADDED: PlDoc Wiki tables to use a possible column alignment
specification and interpret the header.
ADDED: Markdown notation
[@cite;@cite;...]to allow for citations
in the Markdown in the documentation pipeline. After discussion with
- FIXED: Raise an exception if a Prolog term does not have valid syntax.
- ENHANCED: Cleanup trace/spy dialog