# Ann: SWI-Prolog 9.2.8 (stable)

**URL:** <https://swi-prolog.discourse.group/t/ann-swi-prolog-9-2-8-stable/8556>\
**Category:** Releases\
**Created:** [October 24, 2024, 7:30am UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-2-8-stable/8556 "2024-10-24T07:30:29Z")\
**Posts on this page:** 2\
**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:** [October 24, 2024, 7:30am UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-2-8-stable/8556/1 "2024-10-24T07:30:29Z")

</div>

Dear SWI-Prolog user,

SWI-Prolog 9.2.8 (stable) is ready for download. It provides a  
large number of backports from the development series, dealing  
with portability, stability and license issues. It also provides  
some isolated new features to simplify “forward compatibility”.

```
Enjoy --- Jan

```

# SWI-Prolog Changelog since version 9.2.7

- BUILD: Make sure to clear `DISPLAY` when running xpce steps While  
the build works without a DISPLAY variable, an invalid variable causes  
the build to fail.

- TEST: Disable collation\_key/2 test for MacOS Macos Sequoia (15)  
wcsxfrm() returns garbage.

- FIXED: Avoid corruption in setjmp()/longjmp() Clang demands using  
a volatile variable for protecting the throw environment’s parent.  
This is probably correct, although it seems weird to place this  
variable in a register.

- ENHANCED: Add Prolog navigator to `theme/dark.pl`

- FIXED: expand\_term/2 to succeed twice when expanding a toplevel  
list. Results in duplicate clauses when compiling `[f(1), f(2)].`.  
Reported by Uwe Neumerkel.

- FIXED: pack management: find available versions from wildcard URL.  
Patch by Nicos Angelopoulos

- PORT: Added FreeBSD signal names to the name/number map. Contributed  
by Dewayne Geraghty

- ENHANCED: file\_autoload\_directives/3: deal with library(main) hooks.

- ADDED: PL\_print\_message() for calling print\_message/2 from C

- FIXED: print\_term/2: indentation of right argument of infix term.

- FIXED: Allow breakpoints in arg(C,T,F) I.e., arg/3 calls with a known  
argument and the 3th index being a _first var_. These map to the  
`B_ARG_CF` VM instruction.

- DOC: Added documentation for PL\_for\_dict()

- FIXED: Windows format\_time/3 implementation for time stamps \> 32 bits.  
While the Windows `time_t` is 64 bits, it doesn’t seem to localtime()  
seems broken handling large time offsets.

- ADDED: date\_time\_stamp/2: allow leaving components unbound from  
the right.

- DOC: #1323 Wrong claim on default for `prefer_rationals` flag.

- ADDED: is\_message\_queue/1 to test the existence of a message queue.

- FIXED: pack\_publish/2 reporting (claimed failure)

- ADDED: `swipl pack publish --server=URL ...` Allows publishing at  
an alternative server.

- FIXED: Package manager, `swipl pack publish .` Broken detection of  
git directory and failure do deal with

- FIXED: Possibly memory leak in LibBF arithmetic A thread race condition  
may lead to loosing cache values from get\_trig(). Fixed using C11  
atomics.

- FIXED: Use stack variable after return for LibBF bignums This leads  
to incorrect results and crashes when using really big bignums.  
The LibBF bignum implementation is by default used for the WASM  
version and the MacOS binaries.

- ENHANCED: install\_pack/1,2 to prefer https over http for downloading.  
Unless `insecure(true)` or `swipl pack install -k <pack>` is given,  
possible HTTP links are automatically rewritten to HTTPS.

- ENHANCED: pack\_install/1: warn if files are downloaded over HTTP

- MODIFIED: argv\_options/3: with type (bool|sometype) We now consider  
the option boolean unless written as `--opt=value` Before, the  
option was considered boolean if it was the last argument or the next  
argument started with a `-`.

- FIXED: argv\_options/3 handing of `boolean|Type` on last option

- ENHANCED: Arithmetic performance. This patch reverts  
18d5d539af0807808ba6fee6ec66394aaec589f1 except for clang as it does  
cause a significant slowdown on some systems.

- PORT: Call gettid via its glibc wrapper if possible

- LEGAL: Resolved license issues for dialect/xsb/basics.pl Hi Jan,  
As the coder of a number of (but by no means all) the predicates  
in XSB’s basics.P, I’m perfectly fine with you releasing under the  
BSD-2 license. Regarding the issues with XSB’s licenses, we’ll have  
to consider it and come to some decision. Best, -David

- DOC: Updated limits section

- DOC: Update 32/64 bit notes

- FIXED: #1317 thread\_exit/1 can crash after changes to thread\_signal/2.

- FIX: include stdbool

## Package cpp

- TEST: Fixed file tests for Windows where Prolog and OS paths differ,

- FIX: add missing PlStringBuffers in calls to PL\_chars(), PL\_nchars(),  
PL\_wchars()

- DOC: adding warning to PlTermv

- DOC: Added C++ version of foreign.doc’s calc.c example

- MODIFIED: Return type wrappers changed to `bool`, matching SWI-Prolog.h  
This matches the changes in SWI-Prolog.h with commit a1e914f

- DOC: added blob example (wrapped pointer)

- ENHANCED: PlTerm::get\_file\_name() returns std::string

## Package http

- COMPAT: Support both old and new abort exception

- FIXED: http\_reply\_file/3: be more tolerant about if-modified-since  
Recent systems provided file times in sub-second, while HTTP typically  
looses this.

- FIXED: Steadfastness of http\_timestamp/2

- ADDED: http\_parse\_header\_value/3: support `expires` For compatibility,  
this is not converted by default.

- ADDED: http\_timestamp/2: support mode (-,+), i.e., parsing

- ADDED: Allow for throw(http\_reply(hangup)) to simply hangup the line.  
This is not a valid reply, but can be used to quickly terminate  
connections as well as for testing error scenarios.

## Package semweb

- FIXED: Make RDF GC thread stop gracefully.

- COMPAT: Support both old and new abort exception

## Package sgml

- DOC: xsd\_time\_string/3 XSD strings in table were wrong.

## Package swipy

- DOC: Python signal handling

- ADDED: janus.heartbeat() to make Python process interrupts while  
Prolog runs.

- ADDED: propagate keybaord interrupt.

- ENHANCED: Cooperate with Python sys:exit() Calls from Prolog to  
Python, where Python raises a SystemExit() exception are mapped to  
Prolog unwind(halt(Status)) exceptions or, for older versions into  
abort/0, recording the exit status requested. Consisently, when  
control comes back from Prolog to Python, the unwind(halt(Status))  
raises SystemExit(Status) or, abort with recorded exit status raises  
this Python exception.

- PORT: Avoid compiler warnings on 32 bit platforms

## Package xpce

- ENHANCED: #38 Support themes in navigator.

- FIXED: #38 Avoid loading the GUI tracer when trace/util.pl is loaded.  
The navigator loads this, but should not load the GUI debugger itself.

- FIXED: Class tabbed\_window: avoid sending -\>resize\_window when freed.

- COMPAT: PceEmacs: implemented `C-x 5 2` and `M-,`

- FIXED: Pass on unwind() exceptions from e.g. timer events calling  
Prolog.

- ADDED: GUI tracer term viewer: allow pinning.

- ADDED: PceEmacs Prolog mode: auto-fill the mode line properly.

- COMPAT: Support both old and new abort exception

- ADDED: Configure how the GUI tracer behaves if another threads hits it.  
The default now is to block such threads. Alternatively it may be  
set to `nodebug`, meaning the thread continues in nodebug mode or  
`trace`, meaning it opens a secondary trace window. The latter is  
how it used to work.

- FIXED: Argument indentation on next line

- ADDED: PceEmacs: Indent dict values relative to the key when on  
next line

- FIXED: PceEmacs language\_mode\<-argument\_indent Should fail if there  
is no argument.

- ADDED: Allow disabling the message capturing popup for the session.

- SCALE: Predicate browser of profile/1 GUI.

- LEGAL: Resolved license issues wrt xdnd.[ch] by Paul Sheer (LGPL)  
This turns xpce on X11 effectively into LGPL. On Windows, this code  
is not used and thus BSD-2 is effective.

- FIXED: Types for AllocColor

- PORT: Changed XPM Windows emulation from K&R to ANSI C Modified using  
[GitHub - license-fn/un-obsolize: Convert obsolete (K&R) C function declarations and definitions to ANSI equivalents.](https://github.com/license-fn/un-obsolize.git)

- FIX: conflicting declarations noticed only by clang (not gcc)

---

<div class="post-metadata">

**Author:** ![mgondan1](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/mgondan1/32/803_2.png) [@mgondan1](https://swi-prolog.discourse.group/u/mgondan1)\
**Post date:** [October 27, 2024, 7:47pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-2-8-stable/8556/2 "2024-10-27T19:47:44Z")

</div>

Updated on MSYS2, all tests pass.

🔊 📢 📣 📯 🔔 🎼 🎵 🎶 🎤 🎧 🎷 🪗 🎸 🎹 🎺 🎻 🪕 🥁
