# Ann: SWI-Prolog 8.3.29

**URL:** <https://swi-prolog.discourse.group/t/ann-swi-prolog-8-3-29/4367>\
**Category:** Releases\
**Created:** [September 1, 2021, 3:45pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-8-3-29/4367 "2021-09-01T15:45:15Z")\
**Posts on this page:** 3\
**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:** [September 1, 2021, 3:45pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-8-3-29/4367/1 "2021-09-01T15:45:15Z")

</div>

Dear SWI-Prolog user,

SWI-Prolog 8.3.29 is ready for download. This should be considered a  
pre-release of 8.4.0. If you are on the stable branch, please test your  
software with this version such that possible unnecessary regression on  
the stable series can be avoided. Higlights:

- Eric Zinda’s new network based interface to other languages has  
been renamed to `mqi` (_Machine Query Interface_) to avoid  
confusion with LSP (Language Server Protocol). This also  
renamed the git submodule, so to update a git tree do:

- By default, the toplevel now writes variable as \_A, \_B or just \_  
if the variable appears only once. Setting the flag  
`toplevel_name_variables` to `false` disables this behaviour.  
Especially the anonymous variables simplify interpreting  
answers a lot 🙂

- Added trap/1 and gtrap/1 to trap the commandline (or graphical)  
debugger on an error exception whose formal part unifies with  
the given argument. Note that this traps the debugger, even if  
the exception is caught.

- Various bug fixes for monotonic tabling, clause/2, format\_time/3,  
etc. See below.

- Avoid possibility of hanging in multi-threaded applications when  
compiling with some GCC versions (over aggressive optimization).

- Ubuntu PPAs are now build using PGO optimization. Also added  
Hirsute (Ubuntu 21.04).

- The troublesome library(uuid) now provides a pure Prolog replacement  
if the dependency on ossp-uuid cannot be found. In this case  
uuid/1 produces a random UUID.

- Make CHR work again in SWISH (or, more generally, in temporary modules).

# SWI-Prolog Changelog since version 8.3.28

- BUILD: Use PGO optimization for the Debian builds.

- FIXED: clause/2 (and related predicates) on clauses where unifications  
are moved into the head failed in a saved state.

- FIXED: clause/2 for unification that was migrated to the head and used  
nested in a term used as argument to some body call (using B\_ARGVAR  
instead of B\_VAR).

- ADDED: format\_time/3: handle `'%P'` on systems not using glibc.

- FIXED: Adding missing newlines in tracer commands

- TEST: Fixed answer tests for new toplevel output.

- ADDED: Prolog flag `toplevel_name_variables`, which causes variables  
in toplevel answers to be named \_A, \_B, etc. Singleton variables  
are printed as \_.

- ADDED: current\_temporary\_module/1 to library(modules).

- FIXED: Avoid optimizing memory load, causing an infinite loop when  
creating a new atom.

- FIXED: =../2 to avoid truncating to `int` (for arity \> 2g).

- ADDED: trap/1, notrap/1 as commandline utilities to trap exceptions.

- CLEANUP: Move the command line debug utils such as spy/1 from the  
boot files into a new library(prolog\_debug).

- FIXED: make sure the monotonic propagation flag is only set during  
monotonic propagation and not while reevaluating non-monotonic nodes.

- FIXED: Possibly loop adding a lazy monotonic dependency.

- FIXED: date\_time\_stamp/2 was broken in timezone handling after  
e68098ba2b38d7d9597def1b4fc0a8cef1ed43cb.

- FIXED: Possibly crash in completion detecting for lazy monotonic  
tabling.

- FIXED: format\_time/3 using date/9 term computed the weekday and year  
day of the UTC time rather than the local time. Mike Elston.

- TEST: one more test for lazy monotonic tabling.

- FIXED: We must remove the queued answers or a recursive call will keep  
re-evaluating them. This triggered `tabling_monotonic_lazy_14` after  
fixing the issues from `tabling_monotonic_lazy_16`. The disadvantage  
is that if we get an exception during the propagation we cannot retry.  
There are probably more troubles with that and we should probably  
just abolish the involved tables.

- FIXED: If we call an invalid table we must re-evaluate the table  
immediately, also if this is a lazy table and we are inside lazy  
answer propagation.

- ENHANCED: Avoid recording duplicate dependencies for lazy monotonic  
tabling.

- ENHANCED: trace/1,2: add recursion depth to output to make it easier  
to understand.

- FIXED: Inconsistent behavior of current\_prolog\_flag/2 and  
prolog\_flag/2 in SICStus emulation. With SICStus emulation active,  
current\_prolog\_flag/2 and prolog\_flag/2 now always give the same  
results, and always take priority over the autoloadable prolog\_flag/2  
from library(quintus).

- FIXED: write\_term/2,3 numbervars for ‘$VAR’(N) terms where N is a  
GMP integer.

- PPA: Groovy is no longer supported. Added Hirsute

## Package archive

- PORT: Support libarchive versions without `raw` or `mtree` formats.

## Package chr

- FIXED: Make chr work in temporary modules (Pengines, SWISH)

## Package clib

- ADDED: uuid\_property/2 to get the version and (for 1 and 2) time  
stamp of the UUID.

- ENHANCED: Always install library(uuid), providing (currently) a  
random UUID in case the OSSP-UUID dependency was not available for  
building SWI-Prolog.

## Package xpce

- FIXED: gtrap/1 is not a meta-predicate.

- ADDED: gtrap/1 to call trap/1 with the graphical debugger.

---

<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:** [September 3, 2021, 1:09pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-8-3-29/4367/3 "2021-09-03T13:09:27Z")

</div>

Oops, forgot to upload. Most of this stuff is scripted, but the MacOS version cannot be built in a Linux container (legally), so I have to login to my Macbook ☹ Uploaded. Should be there in max two hours or immediately from one of the [backend servers](https://eu.swi-prolog.org/download/devel)

---

<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:** [September 9, 2021, 8:13am UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-8-3-29/4367/5 "2021-09-09T08:13:03Z")

</div>

Looks like a bug. Requires some reorganization, so for now just use dynamic/1 🙂
