Ann: SWI-Prolog 8.3.13

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 ninja install :frowning:

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, 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 original.

    The feedback threads on discourse for it are here:
    Learning how to use the Prolog Command Line Debugger? Try this new overview!
    and here:
    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 - #2 by jan),
    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_file, File)
    to domain_error(module_header, FirstTerm) to simplify debugging.
    Notably this error can be the result of term_expansion/2 that rewrites
    begin_of_file or 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
    using the debug flag.

  • ADDED: PL_put_term_from_chars(): flag CVT_EXCEPTION to 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_UTF8 is 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 common_config. common_data
    returned both the common data and config paths, while common config had
    no locations.

  • 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.

Package clib

  • 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.

Package cql

  • DOC: Add CQL to the section headers to improve searching.

Package http

  • ADDED: http_open/3 to accept unix_socket(+Socket).

  • ADDED: http_server/1,2: allow binding to a Unix domain socket.

Package ltx2htm

  • ADDED: Support tabulary environment.

Package pldoc

  • ADDED: Create a link from … flag `name` … if name is a
    current Prolog flag.

  • ADDED: `name/arity` to create a link as name/arity. Using
    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
    Eric Zinc.

Package redis

  • FIXED: Raise an exception if a Prolog term does not have valid syntax.

Package xpce

  • ENHANCED: Cleanup trace/spy dialog