Dear SWI-Prolog user,
Release 8.3.25 is ready for download. Highlights:
- 
Ongoing cleanup and debugging of the core system by @dmchurch. 
 Notably PGO compilation integrated into CMake, better core
 debug output and selecting debug topics using wildcards.
- 
Several constraint and SICStus emulation enhancements by 
 @dgelessus. Notably fixes frozen/2,
- 
Fixed to delimited continuation (module awareness and choice 
 point handling). Affects (notably) monotonic tabling.
- 
format/3 argument handling fix by @Boris Enjoy — Jan 
SWI-Prolog Changelog since version 8.3.24
- 
FIXED: Silent failure in CLP(FD) domain calculation for truncated 
 division.
- 
ADDED: Prolog flag shift_checkto check for suspicious continuations.
- 
FIXED: flipped shift/1 and shift_for_copy/1 behaviour. 
- 
FIXED: Capturing the continuation inside a meta-predicate restores 
 the wrong module context.
- 
FIXED: frozen/2 leaves residual variables on backtracking. 
- 
DOC: frozen/2, copy_term/3 and attribute_goals//2 interaction. 
- 
FIXED: frozen/2 to allow attribute_goals//1 to modify the attributes. 
- 
FIXED: negative numerical argument for format from argument list 
- 
PGO: Updated docs and utility scripts to use the new CMake PGO 
 build type.
- 
BUILD: Added self-contained PGO process to CMake. This change makes 
 it possible to run a PGO build with a single invocation of the build
 process. To do so, use the “PGO” configuration in CMake rather than
 “Debug” or “Release”, which will:- Compile all libswipl objects with profile generation enabled. This
 uses auxiliary target names with “-pgo-instrumented” appended.
- Link the executable “swipl-pgo-instrumented” in src, using these.
- Use swipl-pgo-instrumented to create boot.prc (since no other swipl
 exists yet). Clear the PGO-data directory, then run the benchmark.
- Build the libswipl objects again, using the PGO data generated.
- Link the final swipl executable from these.
 The dependencies are set up such that if any source file changes, 
 ninja will recompile the instrumented version of the affected file(s)
 and then restart the process from step 3, recompiling ALL libswipl
 objects using the new PGO data.Tested with gcc 9/10 and clang 10/11. 
- Compile all libswipl objects with profile generation enabled. This
- 
DEBUG: Debug wildcard and complement; DEBUG_IF The -d command line 
 option now takes an optional asterisk (*) on the end of a debug
 flag name to enable all flags that begin with that name. Also,
 flag names can be prefixed with a caret (^) to disable that flag;
 only particularly useful in combination with the wildcard, to silence
 chatty channels. For example,swipl -d MSG_SHIFT*,^MSG_SHIFT_FRAMEwill enable all MSG_SHIFT channels except for MSG_SHIFT_FRAME. On the internal side, we now have the DEBUG_IF(cond, channel) macro, 
 which functions much like DEBUG(channel, statements) except it provides
 more control over the conditions, and it avoids statements in a macro.
 As a result, the statementDEBUG(MSG_CHANNEL, Sdprintf(...));is (for a named channel, at least) equivalent to int debug_active = DEBUGGING(MSG_CHANNEL); DEBUG_IF(debug_active, MSG_CHANNEL) { Sdprintf(...); }which itself is roughly equivalent to: #if O_DEBUG int debug_active = DEBUGGING(MSG_CHANNEL); if (debug_active) { ENTER_DEBUG(MSG_CHANNEL); Sdprintf(...); EXIT_DEBUG(MSG_CHANNEL); } #endifThis commit also includes some improvements to the GC debug messaging. 
- 
CLEANUP: Issue#835: Avoid singleton variable in branch when compiling 
 with optimization.
- 
TEST: Added when/2 test suite. 
- 
FIXED: Issue#818: when/2 conditions with nested disjunctions not 
 being displayed properly by toplevel and copy_term/3.
- 
ADDED: copy_term/2 to SICStus 4 emulation (same as SWI 
 copy_term_nat/2).
- 
ADDED: library(types) to SICStus 4 emulation. 
- 
ADDED: max_member/3 and min_member/3 (with an order predicate argument) 
 to library(lists).
- 
REFACTOR: This patch completes the first round of refactoring the VM. 
 It allows for the same source to create a VM as threaded code
 jumping to label addresses in a giant function as well as a VM
 that has an array of function pointers, one function for each
 VM instruction. This is work by @dmchurch.
- 
CMAKE: Added -DVMI_FUNCTIONS=ON
- 
ADDED: Allow foreach//2 from library(dcg/high_order) to work with 
 non-lists.
- 
FIXED: listing/1 and friends for compound terms using []as functor.
- 
FIXED: Make PGO build work again 
- 
ADDED: Define undo/1 as sandbox-safe 
Package debian
- PORT: use PGO for the Ubuntu PPA build.
Package pengines
- ADDED: tab/1 to Pengine I/O emulation, emitting