# Ann: SWI-Prolog 8.3.13

**URL:** <https://swi-prolog.discourse.group/t/ann-swi-prolog-8-3-13/3269>\
**Category:** Releases\
**Created:** [November 1, 2020, 4:00am UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-8-3-13/3269 "2020-11-01T04:00:00Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [November 1, 2020, 4:00am UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-8-3-13/3269/1 "2020-11-01T04:00:00Z")

</div>

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` ☹

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.

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

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

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

- ADDED: Started to deal with the relation between transactions and  
tabling. Currently deals with rolling back answers from _monotonic_  
tabling.

- 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
