# Ann: SWI-Prolog 9.1.9

**URL:** <https://swi-prolog.discourse.group/t/ann-swi-prolog-9-1-9/6507>\
**Category:** Releases\
**Created:** [April 29, 2023, 2:30pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-1-9/6507 "2023-04-29T14:30:36Z")\
**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:** [April 29, 2023, 2:30pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-1-9/6507/1 "2023-04-29T14:30:36Z")

</div>

Dear SWI-Prolog user,

SWI-Prolog 9.1.9 is ready for download. This is mostly a bugfix and  
portability release. Highlghts:

- @peter.ludemann has done a lot of work on the  
second incarnation of the C++ interface, mostly making exception  
handling more C++ friendly. There are still some open issue wrt  
representing the exception and support for character encodings.

- Some more fixes to Windows file handling.

- Fix to abolish/1 followed immediately by asserting new facts  
could lead to a permission error due to a race condition between  
the GC thread and the abolishing thread.

- print\_term/2: better handling of compound terms with long functors.

# SWI-Prolog Changelog since version 9.1.8

- DOC: limitation of PL\_record\_external() with blobs

- ADDED: library(main) cli flag processing for debugging.  
See cli\_debug\_opt\_type/3 and friends.

- ADDED: argv\_options/4: typed `directory` and `directory(+Access)`.

- ADDED: print\_term/2: option auto\_indent\_arguments(Int) With this option  
(defaults to 4), dicts and compounds that are too wide ands whose  
funtor is at least twice this width, have their arguments printed on  
the next line.

- PORT: When using `-DSTATIC_EXTENSIONS=ON`, drop usage of dlopen()  
This is required for recent versions of Emscripten that give a runtime  
error on the usage of dladdr().

- TEST: Added test for #1168

- FIXED: Issue#1168: race condition betweem abolish and CGC Clause  
Garbage Collection concurrent with abolish/1 could leave the predicate  
with erased clauses while it was not marked dirty. As a result,  
a subsequent attempt to assert/1 to this predicate results in an  
error trying to amodify a static predicate. Reported by Paulo Moura.

- TEST: Create a new test directory to improve concurrency while testing.

- ADDED: Issue#1019: PL\_put\_wchars().

- TEST: Fix and disable some tests when running under Wine.

- PORT: Demand C11 early

- DOC: Document issues with standard order on rational trees.

- DOC: Issue#1164: clarify `answer_write_options` flag.

- DOC: Prolog flag `toplevel_residue_vars`.

- FIXED: Addresses #1160, residual constraints in tuples\_in/2 from  
clp(fd). Patch by @triska for Scryer Prolog.

- FIXED: Windows exists\_file/1 and exists\_directory/1 domain error.  
Avoid `Domain error: `foreign_return_value' expected, found `-1'`.  
Document that invalid names cause silent failure.

- MODIFIED: statistics/2 `cputime` and `infereneces` to include completed  
“child threads”. This patch causes threads to keep track of their  
“creator” thread. If the creator still exists when a thread dies,  
the time and inferences are recorded with the creator and reflected in  
the statistics keys. The new keys `self_cputime` and `self_inferences`  
provide the original.

- BUILD: When using `-DSTATIC_EXTENSIONS=ON`, do not install the  
libraries. This implies plugins are not installed as `*.a` files  
and `libswipl.a` is not installed. Only `bin/swipl` and the Prolog  
libraries and support files are installed.

- FIXED: swipl.cmake syntax error

## Package archive

- TEST: Disable write tests under Wine. These tests work fine under  
Windows.

## Package clib

- ENHANCED: prolog\_server/2: if tcp\_host\_to\_address/2 raises an exception  
or fails, just use the Peer in the thread alias, rather than having  
the server thread die

## Package cpp

- DOC: Fixed LaTeX errors and duplicate conclusion section.

- ENHANCED: C+±compatible exception handling + more wrapper functions  
and classes SWI-cpp2-plx.h contains wrapper functions (imported  
from SWI-cpp2.h) - throw PlException for Prolog errors - most  
SWI-Prolog.h functions have a wrapper. verify() methods removed from  
PlAtom, PlTerm, etc. - the wrapper functions do the checking. Some  
executable code has been moved to SWI-cpp2.cpp - can be inlined,  
if desired. PlException is now a subclass of std::exception,  
not a subclass of PlTerm. PlTypeError, PlDomainError, etc. are no  
longer subclasses of PlTerm, but are functions for creating suitable  
PlException objects. The string comparison operators are deprecated;  
use as\_string() and std::string comparison instead, which allows  
specifying the encoding. Added PlRecord, PlRecordExternal, PlControl  
(used by PREDICATE\_NONDET), PlStream. Fixed numerous bugs and  
misfeatures; added tests.

- TEST: Do not build and link the tests when building with  
STATIC\_EXTENSIONS

## Package http

- MODIFIED: reply\_json\_dict/2 to explicitly use UTF-8 by default.  
Where the other reply\_json variants used `application/json; charset=UTF-8`, reply\_json\_dict/2 used only `application/json`.  
This is fine according to the standards, but some clients insist on  
the charset. Ths patch makes all versions compatible.

- FIXED: library(http/http\_log): exception when logging was disabled.  
Harmless as the exception was printed but otherwise ignored.

## Package semweb

- ADDED: rdfe\_load/2: accept .nt (N-Triples) files.

## Package sgml

- ADDED: the `atom` transformation to the attribute value in xpath.  
The content attributes provided with `load_structure/3` can be atoms  
or strings depending on the `attribute_value/1` option. So adding  
a transformation of attribute values to an atom in `xpath/3` should  
be a useful feature, such as `string` transflation.

## Package swipl-win

- PORT: Changes for SWI-cpp2.h version 2

## Package xpce

- PORT: Add function prototypes.

- PORT: migration of regex library to ANSI C prototypes

- PORT: Convert gitwrite.c code to ANSI C.

- FIXED: directory-\>scan existence checking.
