# Ann: SWI-Prolog 8.3.1

**URL:** <https://swi-prolog.discourse.group/t/ann-swi-prolog-8-3-1/2484>\
**Category:** Releases\
**Created:** [June 8, 2020, 4:44pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-8-3-1/2484 "2020-06-08T16:44:08Z")\
**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:** [June 8, 2020, 4:44pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-8-3-1/2484/1 "2020-06-08T16:44:08Z")

</div>

Dear SWI-Prolog user,

I’m happy to announce SWI-Prolog 8.3.1. In addition to bug and  
documentation fixes we have something new: _monotonic tabling_.  
Highlights:

- Fixed possible crash in setup\_call\_cleanup() cleanup handler  
by Keri Harris.

- Fixed a possible crash in the GUI debugger related to  
backtracking.

- Fixed possible deadlock on exit due to a bug in  
library(time).

- MacOS installer to avoid dependence on Macport libraries.  
This hopefully makes the binaries run on 10.12 and later.

- Support type-independent checking in atom\_string/2 and  
friends for mode (+,+).

- A new set of documentation fixes by Adrian Wong and several  
other doc patches after comments on Discourse. Adrian also  
fixed reference rewriting for the glossary section. Thanks!

- Added scripts/gcov-swipl, explaining how to build for C  
coverage analysis and run swipl on some program and writing  
the coverage analysis files.

- Added monotonic tabling. This is mostly an early prototype.  
The idea is to have truly incremental updates for dependent  
tables after adding clauses to a dynamic predicate. This  
can only work if the program that uses the incremental  
tables is _monotonic_ though, i.e., adding clauses shall  
never _invalidate_ an existing answer.

Documentation and bugfixes will shortly be backported to 8.2.1.

```
Enjoy --- Jan

```

# SWI-Prolog Changelog since version 8.3.0

- ADDED: Monotonic tabling

- FIXED: get\_returns\_for\_call/2: module qualification

- FIXED: Possible use-after-free

- DOC: call/1.

- BUILD: When building the MacOS bundle, tell CMake not to look into the  
Macport bin, lib and include. We want to use our own dependencies  
that are compiled for MacOS 10.12 and later rather than the Macport  
ones that are for the current OS and for others we want the MacOS  
native libraries to reduce our footprint.

- FIXED: keep pending choicepoint frames visible to the stack shifter

- FIXED: prolog\_frame\_attribute/3 getting local variables for a  
frame after backtracking to the next clause could unify with a  
non-initialized var.

- DEBUG: Wrong CHK\_SECURE assertion.

- FIXED: Added missing release\_def() for computation of the `size`  
property of predicates. May prevent clause garbage collection.

- MODIFIED: prolog\_listen/3: when listening on a dynamic predicate,  
assert the new clause before calling the event hook.

- FIXED: Changed unviewable background color for DCG right hand context

- DOC: Removed unix/1 docs from main manual as this is merely a partial  
Quintus emulation.

- DOC: char\_type/2: updated general description.

- DOC: Use consistent command line option names

- DOC: Fix typos in manual

- MODIFIED: atom\_string/2, string\_chars/2, string\_codes/2 and  
text\_to\_string/2 accept any text representation as input on both  
arguments. If both are instantiated, string comparison is applied.

- DOC: Testing options

- FIXED: Be more selective in classifying files as `library` files.  
Notably do not make the test files library files as this breaks the  
XSB emulation and thus test\_installation/0.

- TEST: Allow all XSB tabling tests to run in one Prolog instance to  
facilitate coverage analysis.

- TEST: Avoid basic tabling tests to succeed with a choicepoint if  
there are (already) shared tables.

- TEST: Include tabling tests when calling test.pl

- BUILD: Redefine \_\_assert\_fail() in a more safe way that allows  
–keep-inline-functions.

- MAINTENANCE: Added scripts/gcov-swipl to gather coverage information to  
access the completeness of our test set as well as PGO optimized build.

- DOC: tcp\_sockopt/2 must be tcp\_setopt/2. Adrian Wong.

- DOC: Fix typos in manual

- BUILD: Fix PGO build to first install the library

- DOC: Added documentation for dealing with releases

## Package bench

- OPTIMIZE: Extend the benchmark set with clpfd nqueens

## Package clib

- FIXED: library(time): pthread\_cond\_signal() was called without  
holding the mutex. Although allowed, this can result in unpredictable  
behaviour. Notably, if may cause cleanup of the library to deadlock.

## Package http

- TEST: Disable public network tests by default

## Package jpl

- DOC: jpl\_class\_to\_raw\_classname/2 updated

## Package ltx2htm

- FIXED: Prevent smart quotes in a `code` environment.

## Package pldoc

- ADDED: rewrite\_ref/4 for gloss class Glossary references were broken  
(404) in doc\_server because doc\_server didn’t rewrite the glossary  
references.

## Package semweb

- TEST: Disable public network tests by default

## Package ssl

- TEST: Disable public network tests by default
