# Ann: SWI-Prolog 8.3.27

**URL:** <https://swi-prolog.discourse.group/t/ann-swi-prolog-8-3-27/4157>\
**Category:** Releases\
**Created:** [July 13, 2021, 2:14pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-8-3-27/4157 "2021-07-13T14:14:16Z")\
**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:** [July 13, 2021, 2:14pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-8-3-27/4157/1 "2021-07-13T14:14:16Z")

</div>

Dear SWI-Prolog user,

SWI-Prolog 8.3.27 is ready for download. Quite a bit has happened. Highlights:

- A lot of work by @peter.ludemann on the Google protobufs library. See  
his announcement.

- A new package and library(stomp), providing an out of the box solution  
to communicate with STOMP compatible message brokers such as RabbitMQ.

- Several fixes to monotonic and incremental tabling.

- More SICStus 4 emulation by @dgelessus.

- clpqr enhancements: ISO exceptions and simpler as well as faster  
implementation of dump/3.

- Several enhancements to the development tools:

- Some enhancements to memory allocation as discussed here.

# SWI-Prolog Changelog since version 8.3.26

- FIXED: If reevaluation changes conditions for a trie we must recompile  
the trie.

- FIXED: tnot/1 table status evaluation during incremental re-evaluation.

- ENHANCED: cli\_enable\_development\_system/0: avoid loading xpce when  
creating a state.

- FIXED: Failure in incremental tabling if a leaf predicate is both  
tabled and dynamic.

- FIXED: Issue#861: blobs with PL\_BLOB\_NOCOPY|PL\_BLOB\_UNIQUE must only  
compare the pointer.

- BUILD: Issue#860: PGO building did not work with make on MacOS.

- ADDED: Initial partial library(clpfd) to SICStus 4 emulation.

- BUILD: Issue#859: Building main.pl docs now depends on xpce.

- PORT: Allocator detection.

- ADDED: trim\_heap/0 and a Prolog flag `malloc` to identify the malloc  
implementation and provide additional features when detected.

- ADDED: Integrated stomp into the build process

- ADDED: packages/stomp.

- FIXED: lazy monotonic tabling requires a proper completion check. Such  
a table is complete if the dependencies do not contain any invalid  
incremental tables and all lazy queues are empty. Dependency  
tracking must be recursive and has to deal with loops. This fix  
avoids non-termination whil reevaluating lazy monotonic tables that  
contain cycles.

- FIXED: While reevaluating a lazy monotonic node we should not consider  
it invalid.

- FIXED: lazy monotonic update to set the current IDG node properly.

- ENHANCED: explain/1 to support dicts, hide references from the  
cross-referencer and show file and line numbers for references from  
clauses.

- ADDED: Supply a depth with the tracer `r` command to retry  
immediately on a parent goal.

- ADDED: `[level] S` trace command to save a goal to the recorded  
database.

- ENHANCED: Command line debugger ‘h’ command

- ADDED: Command line debugger ‘g’ command to accept a negative number  
of frames as numeric parameter to print the outermost N frames rather  
than the innermost. As a result, the ‘-’ command (no spy) must be  
followed by the RETURN key.

- FIXED: Issue#853: prolog\_walk\_code/1 did not respect the module\_class  
option, scanning all modules.

- ENHANCED: `library(prolog_codewalk)`: avoid trying to find the file  
`-`.

- FIXED: Avoid permission error when using autoload/1 after autoload/2.

- ADDED: `library(main)`: cli\_parse\_debug\_options/2 and  
cli\_enable\_development\_system/0.

- ADDED: mapsubterms/3 to recursively substitute arguments in a sub term.

- FIXED: on\_signal/3 claims the signal is wrong on a type error on  
the handler.

- FIXED: Avoid a race condition between thread\_join/2 and thread\_detach/1  
and disallow multiple threads to join the same thread. Updated docs  
for thread\_join/2.

- ENHANCED: trace/1,2 to work better on imported predicates, applying  
the wrapper directly to the implementation.

- ADDED: File access mode `search` as an alias for `execute`.  
Improves compatibility with SICStus.

- FIXED: Prevent source analysis to loop on an unbound module export  
list.

- ADDED: library(file\_systems) to SICStus 4 emulation.

## Package clpqr

- ENHANCED: Use high level copy built-ins to realize dump/3 and  
projecting\_assert/1. Share code between these.

- MODIFIED: library(clpq) to throw ISO compliant exceptions

## Package plunit

- ADDED: show\_coverage/2: Produce annotated files with coverage  
information. This information now also shows the number of entries  
and exits/failures.

## Package protobufs

- TESTING: added many unit tests

- ADDED: protobuf\_serialize\_to\_codes/3 fixed: uint64\_codes et al handling  
of signed/unsigned improved: error handling for uint64\_codes et al  
renamed integer\_zigzag to int64\_zigzag, int32\_codes =\> uint32\_codes,  
etc. moved some code into protobufs.c (uint64\_int32, etc.) simplified  
code by using freeze/2 and when/2 instead of nonvar/1

- ADDED: protobuf\_parse\_from\_codes/3 (using output of protoc-gen-swipl  
plugin)

- ENHANCED: handle “group” add protobuf/unittest golden

- BUILD: Run developer and “demo” tests as part of cmake/ctest build  
Use installed protoc Refactor Makefiles

- TEST: Added unittest\*.proto and “golden” tests, edge case tests

- ADDED: Plugin for protoc (protoc-gen-swipl) Copy logic from  
descriptor\_proto\_expand.pl to protoc-gen-swipl

- FIXED: Some edge cases of negative or very large numbers Added  
round-trip tests Work-around issue #5 Added utf8 encoding directives  
Replace UTF8 strings by unicode codes, in case tests run in ASCII  
locale

- ENHANCED: Added repeated\_embedded, unsigned32, unsigned64

- PORT: Avoid UTF-8 in comment to allow building using non-UTF-8 locales.

- ENHANCED: handle repeated [packed=true]

## Package xpce

- FIXED: Allow autoloading library(pce\_dispatch).
