# Ann: SWI-Prolog 8.3.23

**URL:** <https://swi-prolog.discourse.group/t/ann-swi-prolog-8-3-23/3882>\
**Category:** Releases\
**Created:** [April 28, 2021, 11:34am UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-8-3-23/3882 "2021-04-28T11:34:54Z")\
**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 28, 2021, 11:34am UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-8-3-23/3882/1 "2021-04-28T11:34:54Z")

</div>

Dear SWI-Prolog user,

SWI-Prolog 8.3.23 is ready for download. This for now finishes the  
enhanced support for _function style_ (deterministic) programming  
with a few bug fixes. Otherwise we see mostly contributed work:

- More SICStus (4) emulation by @dgelessus

- Isub word-simularity improvements by @swi

- Google protobufs enhancements by @peter.ludemann

- Better internal debug logging support by @dmchurch

- As a following from the struggles @dgelessus had with SICStus  
same\_functor/2-4, I have added functor/4 to handle simplify handling  
both atoms and zero-arity compound terms. If you think that could  
be improved further or there is a better alternative, please reply.

# SWI-Prolog Changelog since version 8.3.22

- PORT: Make Windows build work again due to changed debug  
infrastructure.

- BUILD: Issue#819: CMake Policy CMP0115. Wouter Beek.

- FIXED: same\_functor/4 and derived predicates to be fully compatible  
with SICStus and handle zero-argument compounds.

- ADDED: functor/4 to make dealing with zero-argument functors and  
atoms easier. This is a result of Issue#815

- FIXED: library(prolog\_colour): prevent `pce_arg` highlighting to  
cause a failure to highlight dict objects.

- DEBUG: Early/better internal debug output Initialize the global  
debug\_level as soon as possible if “-d” is passed first on the command  
line, to avoid missing early debug lines. Also, track use of the  
DEBUG() macro on a per-thread basis and use Serror as the default  
output stream when inside a DEBUG clause, so that statements that  
mix e.g. Sdprintf() and write\_term() will get printed to a single  
output. Finally, prefix debug lines with the debug channel and the  
file/line source.

- FIXED: Issue#815: same\_functor/4 (and friends) to be more SICStus  
compatible.

- ADDED: library(aggregate), library(between) and library(samsort)  
to SICStus 4 emulation.

- ADDED: sublist/[3,4,5] to SICStus 4 library(lists) emulation.

- ADDED: host\_type Prolog flag to SICStus emulation.

- ADDED: at\_end\_of\_stream/[0,1] to SICStus emulation.

- ENHANCED: SICStus emulation now disables quoted printing of atoms.

- FIXED: vm\_list/1 to handle clauses with breakpoints and list these.

- ENHANCED: Multiple clauses may be registered at a specific source  
line. We need to consider all of them for set\_breakpoint/4.

- FIXED: Context module handling in a tail-recursive transparent  
predicate.

- FIXED: `$/1` for goals doing variable balancing using C\_VAR\_N

- FIXED: Save det/1 flag in saved states and Qlf files.

- FIXED: Propagate error when tabling traps an update to a dynamic  
predicate that is involved in a table reevaluation.

## Package http

- ADDED: Support dynamic management of gzipped files.

## Package nlp

- ADDED: isub/4 mode isub(+Text1, +Text2, -Simularity, +Options) by @swi.

## Package protobufs

- ADDED: protobuf\_segment\_message/2 heuristics to match protoc  
–decode\_raw functionality

- ADDED: protobuf\_segment\_message/2 and export the low-level conversion  
predicates
