# Ann: SWI-Prolog 9.2.9 (stable)

**URL:** <https://swi-prolog.discourse.group/t/ann-swi-prolog-9-2-9-stable/8684>\
**Category:** Releases\
**Created:** [December 20, 2024, 12:29pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-2-9-stable/8684 "2024-12-20T12:29:40Z")\
**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:** [December 20, 2024, 12:29pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-2-9-stable/8684/1 "2024-12-20T12:29:40Z")

</div>

Dear SWI-Prolog user,

SWI-Prolog 9.2.9 (stable) is ready for download. This update  
deals mostly with portability issues, some usability issues  
and a few minor fixes.

```
Enjoy --- Jan

```

# SWI-Prolog Changelog since version 9.2.8

- ADDED: trap/1: aliases for e.g. type\_error → type\_error(_,_) So one  
does not need to remember the number of arguments.

- FIXED: Preserve `incremental` property when creating a saved state.

- BUILD: Add CMake option -DSWIPL\_SO\_VERSIONS to remove SOVERSION  
properties.

- DOC: statistics/2 lost the keys `globallimit`, `locallimit` and  
`traillimit`. Reported by Jelmer Jellema.

- FIXED: print\_term/2: proper handling of operators(Ops) Needs to be kept  
consistent with write\_options([… ignore\_ops(IgnOps)]). Implemented  
consistency and deprecated the option. Reported by Mike Elston.

- ADDED: library(prolog\_colour): track CHR declaration locations

- ENHANCED: pack\_info/1: use colours and indicate autoload status.

- MODIFIED: pack\_install/2 option autoload(true) If present, the pack  
is installed as autoload pack regardless of `autoload` option in the  
meta-data. If the option is not present, the system asks the user to  
install as autoload library if the meta-data contains autoload(true).

- FIXED: Make packs that provide an autoload library work again.

- FIXED: cmake/TestSignalType.c for C++

- PORT: Make cmake test for signal handler compatible with c23

- FIXED: explain/1 to report the same predicate multiple times.  
This happens if the predicate is imported into multiple modules.

- PORT: read\_pending\_input/3 and friends: make 16 bit encodings work  
on Windows.

- FIXED: Pass command line arguments in class Prolog.

- DOC: gcd/2 and lcm/2 are not operators.

- FIXED: Use of undefined options in the toplevel. This makes the  
toplevel unusable if the Prolog flag `iso` is set to `true`.

- PORT: WASM: Get rid of deprecated allocate, ALLOC\_NORMAL and  
ALLOC\_STACK

- FIXED: WASM: Query.next() to set `done` to `true` on last answer.  
This must be `false` when used as iterator.

- FIXED: WASM: for(x of prolog.query(…)) lost last answer

- FIXED: prolog\_trace\_interception/4: setting up the hook good crash  
Backported from c1ce6d36d4e228536522ee49bad067c53a7f3b4b

- FIXED: library(main): superfluous choice point in argv\_options/3

- ADDED: format/2: support `~:D` The colon modifier for `D` forces  
the use of Prolog digit grouping using `_`.

- TEST: Added ISO ambiguous operator tests. Marked two tests as blocked  
as these currently fail.

- FIXED: #1331 Module issue in SICStus block/1 emulation. This patch  
also reformats the file, removes some dead code and remove the outdated  
restriction that it does not work on dynamic or foreign predicates.

- FIXED: libary(prolog\_pack): detection of valid download URLs.

- FIXED: Installing a pack should attach the pack itself. This  
incorrectly registered the directory of the pack as a directory that  
provides packs instead.

- ENHANCED: explain/1 to enumerate all instances of a non-qualified  
predicate.

- BUILD: `plunit` requires `clib` package.

- DOC: Update library(shlib) documentation.

- BUILD: Make sure to clear `DISPLAY` when running xpce steps  
(one more)

## Package bench

- FIXED: Avoid division by zero if no tests are executed.

## Package cpp

- DEPRECATED: Officially deprecate version 1 of the C++ interface.  
For now, we will keep SWI-cpp.h in the distribution. We do not plan  
any updates to keep it in sync with changes to SWI-Prolog or the  
C++ standard. Users of this old interface are strongly encouraged  
to update their program.

- DOC: removed all “(version 2)”

- DOC: Delete documentation for version 1 of the C++ interface

## Package http

- ADDED: htmx\_oob//2 to simplify emitting OOB data

- DOC: Fixed example code for apropos with HTML output.

## Package jpl

- TEST: #104 prolog\_in\_java test fails if multiple copies of junit\*.jar  
are found. Now first search for junit_4_.jar. On success, use first,  
else search for junit.jar. On success, use first.

- TEST: Cache JUNIT\_JAR in CMake. This provides better cmake performance  
and easier inspecting the configuration result.

- TEST: Fix finding hamcrest on Fedora 41

## Package mqi

- TEST: Specify encoding in test\_prologserver.py

- TEST: Specify encoding in test\_prologserver.py Fixes a problem for  
MSYS2. I hope my ad hoc fix is harmless.

## (test\_prologserver.TestPrologMQI.test\_variable\_attributes)

Traceback (most recent call last): File  
“c:/msys64/home/c7201178/swipl-devel/packages/mqi/python/test\_prologserver.py”,  
line 95, in setUp  
self.initialProcessCount = self.process\_count(“swipl”)  
^^^^^^^^^^^^^^^^^^^^^^^^^^^  
File  
“c:/msys64/home/c7201178/swipl-devel/packages/mqi/python/test\_prologserver.py”,  
line 123, in process\_count output =  
subprocess.check\_output(call).decode()  
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UnicodeDecodeError:  
‘utf-8’ codec can’t decode byte 0xff in position 237: invalid start  
byte ````

- COMPAT: Support both old and new abort exception

## Package plunit

- ENHANCED: PlUnit message for tests that succeed with a choicepoint.

- FIXED: Report generator state on failing forall(Generator) test.  
This was completely broken. Format has been changed to print the  
generator goal rather than just the variables.

## Package ssl

- PORT: Extended our BIO\_ctrl() callback. In Fedora 41, OpenSSL  
3.2.2, it appears we need to implement the BIO\_ctrl() methods  
`BIO_C_FILE_TELL` and `BIO_C_FILE_SEEK` for properly loading keys  
from files.

- COMPAT: Support both old and new abort exception

## Package swipy

- FIXED: Allow using the `janus` module from Prolog when loaded as  
Python module.

- FIXED: When loading janus\_swi into Python, use janus.pl from Python  
package.

- BUILD: Honour environment variable `SWIPL` for `pip install .`

- DOC: Document creating the Windows binary wheel in `scripts/README.md`

---

<div class="post-metadata">

**Author:** ![esad](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/esad/32/884_2.png) [@esad](https://swi-prolog.discourse.group/u/esad)\
**Post date:** [February 24, 2025, 10:21pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-2-9-stable/8684/2 "2025-02-24T22:21:01Z")

</div>

Are stable releases not tagged on github? I can see V9.2.0 but not any other V9.2.x tags?

---

<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:** [February 25, 2025, 8:29am UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-2-9-stable/8684/3 "2025-02-25T08:29:03Z")

</div>

They are tagged in [GitHub - SWI-Prolog/swipl: SWI-Prolog stable releases](https://github.com/SWI-Prolog/swipl.git). The two repositories are a bit of a thing from the past. The swipl-devel.git is where the development happens. swipl.git is synced on a new stable version (e.g., 9.2), after which fixes in the devel version are backported to swipl.git, producing 9.2.1, etc.

There is no sensible reason not to deal with stable and devel in one repo, except for limited understanding of git from my site when I created this. On the other hand, there is also little wrong with this and it is part of the various release scripts. If you want all in one view, clone one, add the other as remote and fetch it.
