Dear SWI-Prolog user,
SWI-Prolog 10.0.0 (stable) is ready for download. Below is the full
changelog since version 9.2.9, the previous stable version. Overall,
version 10 is closely compatible to version 9.2. It mainly provides a
lot of changes “under the hood”, updating the C code to support modern
standards and replacing platform specific code with portable
alternatives. As a result, the system behaves much more the same
regardless of the hosting OS as it did. Below are the highlights
of these changes.
-
The 32-bit Prolog data model has been removed. The system can
still be built for 32-bit platforms, but the core Prolog “cell”
that is used to represent Prolog data is now 64 bits. Support
for 32-bit Windows has been discontinued. 32-bit support is
mainly used for the WASM (Web Assembly) version. -
The GUI toolkit
xpcehas received a major update:- Instead of based on the X11 or Win32 APIs, it is now based
on the popular and portable SDL3, Cairo and Pango libraries.
This notably brings native Cocoa support for MacOS (no need
for XQuartz) and support for Wayland on Linux. Through these
libraries it still supports X11 and Win32. - Much improved and portable support for fonts, colours and images.
- Support for dynamic changes to the display configuration (hot plug
and remove of additional monitors). - Generate PDF rather than PostScript through the Cairo library.
- Support multiple Prolog threads accessing the GUI using a Python
GIL style of locking where callbacks on Prolog release the XPCE
lock, allowing other Prolog threads to interact with XPCE. - The GUI console provided by
swipl-win.exeor the Qt based
equivalent have both been replaced by Epilog, a terminal
emulator with Prolog specific menus and functionality written
in XPCE (based on the old code for Windowsswipl-win.exe). - The editor provides additional methods to support integration
with LSP (Language Server Protocol). Notable generating
LSP compliant incremental change messages and translating
between LSP line+UTF-16-offsets and Emacs positions. Together
with JSON RPC libraries this provides the basics for integrating
LSP in the SWI-Prolog IDE tools.
- Instead of based on the X11 or Win32 APIs, it is now based
-
The GNU readline command line editor is removed. The BSD libedit
interface has been improved and a Windows port of BSD libedit
is included with the Windows port. This brings uniform command
line editing to all platforms, both for running Prolog in a
system console and using theswipl-winEpilog console.
Command line history now builds on top of libedit. -
With the XPCE Epilog terminals we no longer need support to
open a second console based on the X11xtermterminal. -
Many development tool enhancements. More use of colours and
hyperlinks in messages, making them more readable and allow
Ctrl-click to edit the source location related to the message.
Many improvements of dark theme support. Default use of
the dark theme if preferred by the OS is detected (depending
on SDL3 support for this on the platform). -
Provide Freedesktop.org Desktop integration files. May be installed
usingswipl sys desktop [--global] install -
The WASM version is much more mature. It now supports engines,
allowing for multiple asynchronous Prolog tasks to proceed in the
browser. It also provides a yield based debugger that is compatible
with the control flow demanded by a browser. Both have been used to
implement Tinker, a Prolog
playground running in your browser. The performance of the WASM version
has been improved drastically, reducing the gap with native performance
from approximately 10 times to less than 3 times. -
Performance has been improved. Clause indexing more robustly chooses
the best index and predicates use first argument indexing on the first
argument that is not a variable in all clauses. Better handling of
exceptions using setjmp()/longjmp() as well as support for gcc -O3
have resulted in up to 30% speedup on x86_64 using gcc 15. All
platforms show some improvement as a result of these changes. -
All libraries are now distributed as
.pland compiled.qlffiles.
On systems with tight space requirements (e.g., WASM), the.plfiles
may be excluded from the distribution. This change reduces the
startup times for applications that use a lot of (large) libraries
significantly. -
Dicts have been slightly modified to prepare for compatibility with
upcoming PIP proposals. Notably using a variable as tag is deprecated
in favour of#{k:v, ...} -
JSON support has been moved from the
httppackage to a newjson
package. In addition to the JSON reader and writer, the package
provides libraries for JSON Schema and JSON RPC client and server. -
Tries and tabling now support attributed variables.
-
SWI-Prolog adopted the C11 and later
booltype. All API functions
inSWI-Prolog.hhave been updated accordingly. The internals have
been updated to avoid name conflicts with thebooltype and many
internal interfaces have been migrated to usebool. Usage in the
packages is slowly emerging. Some last remains of K&R style
function declarations have been modernized. Incomplete function
types are no longer allowed by the most recent C standards. These
have been removed. Together these changes make the code compile cleanly on
all modern C compilers. -
The SWI-Prolog C API now implements some sanity checks, notably on
the life-time ofterm_thandles. -
Linux snap packages have been replaced by a
flatpak package.Enjoy — Jan
SWI-Prolog Changelog since version 9.2.9
-
CLEANUP: Remove traces of GNU readline
-
BUILD: Include script to build gcc version on MacOS
-
PORT: Support older gcc and clang versions that do not provide
__auto_type -
ENHANCED: On ELF systems that have
objcopy, add the state as an
ELF section. This makes the system a valid ELF executable on which
all ELF tools work normally. -
ADDED: qsave_program/2: option zip(true) to create a clean .zip file.
-
FIXED: #1414 crash in C_CUT due to reset clause pointer from undo/1.
-
MODIFIED: PIP-0105: write_term/2 option
max_textto exclude ellipsis.
As we already exclude the quotes and escape sequences, excluding the
ellipsis is more consistent. After remarks by Joachim Schimpf. -
FIXED: #1411 Windows issue for handling max_text on UTF-16 pairs.
-
TEST: Relax thread queue timeout tests and provide more accurate
failure feedback. -
FIXED: Save history for new directory using
swipl-win -
ENHANCED: On (Linux/Unix) systems with hot-pluggable CPU or running as
virtual machines, the cpu_count Prolog flag should be set to the number
of online processors (SC_NPROCESSORS_ONLN) instead of the configured
maximum number (SC_NPROCESSORS_CONF). Using the online count avoids
situations where cpu_count reflects offline or non-present CPUs. If
SC_NPROCESSORS_ONLN is not defined by the system, we fall back to
the old SWI-Prolog behaviour. -
BUILD: show options in generated file
-
MODIFIED: write_term/2:
max_depth(+Depth)to use Unicode…
If the encoding of the output supports Unicode. Otherwise the ASCII
sequence...is emitted. -
ADDED: write_term/2: support max_text(+Length) for quoted output.
-
ADDED: PIP-0105: write_term/2 support for
max_text(+Length)Actually
calledtext_maxin the proposal. Considering all other options
and flags are namedmax_*, I think this should change.This commit only implements this option for unquoted atoms and strings.
-
FIXED: with_tty_raw/1: kept lock on stream.
-
ADDED: PIP-0105:
write_term/2optiontruncated(-Bool). Bool
is unified totrueif the term has been truncated due to the
max_depthoption. -
ADDED: PIP-0105
write_term/2optionportable(Bool) -
DOC: Update CMAKE.md, section components
-
TEST: saved_states, disable timeout under MSYS2 (#1406) * TEST:
saved_states, disable timeout under WindowsOn Windows, stream timeout only works for sockets. * DIST: Added
packages/libedit/libedit to tar archive -
ADDED: Using the option
--home=dir, setSWI_HOME_DIR.
This ensures that sub processes can access Prolog’s home and, when
calling Prolog, execute the same Prolog system. -
TEST: Base saved-state tests on new prolog(Tool) option of
process_create/3. -
FIXED: Allow
swipl -o exe -c input.plto pass--home=dir
option. -
PORT: Properly install runtime dependencies for MSVC build This now
depends in CMake > 3.21 install() optionRUNTIME_DEPENDENCY_SET -
PORT: Build
swipl-win.exeunder MSVC Now compiles cleanly.
swipl.exeruns fine, including line editing. The GUI is unresponsive
though. -
FIXED: format/1-3: reset last tab stop on a newline. Spotted by
Joachim Schimpf with the PIP tests. -
ADDED: ansi_format/4, formatting with colours to a stream.
-
PORT: MSVC
-
MODIFIED: format/2 handling of non-list arguments Now, the second
argument is only considered a single argument if it is not or [|].
Notable partial lists or lists not ending in[]are now threaded as
(invalid) argument list. -
ENHANCED: Errors for arithmetic expression
[Code]if list holds no
single code. -
PORT: MSVC compatibility.
-
TEST: Fixed test for format/2
~6s. -
DOC: format and friends. Move documentation of deprecated
writef/2
and friends to the library documentation. Updated the format/1-3
documentation. -
PIP: PIP-0110: make
~<n>semit padding if text is too short. -
TEST: Use
swipl.batfor testing saved states on Windows. 1. allows
for “external” swipl.bat under Windows (see swipl.sh in l. 133)
2. invokes saved state with -x if swipl.bat is used -
PORT: Work around broken MSVC
-
TEST: PIP-0110: added PIP format/2 tests.
-
COMPAT: Extended ECLiPSe test driver to accept
should_output -
MODIFIED: PIP-0110: format/2 using
~Nto ignore the argument.
Most implementations ignore the argument. Others interpret it
inconsistently. New code should use~N~2nas replacement for
~3N. -
MODIFIED: PIP-0110: distributing extra spaces over
~tUsed to
distribute these spaces from the middle. Now distributes them from
the right, compliant with SICStus and ECLiPSe. -
ADDED: PIP-0110: format/2 format specifier
F. This is likef,
but using uppercase letters for non-normal floats. -
PIP: PIP-0110: format/2:
~ato only accept atoms and compact strings. -
PIP: PIP-0110 (format) compatibility: handle expressions for
* -
PIP: PIP-0110: format/2:
~ato only accept atoms and compact strings. -
PIP: PIP-0110 (format) compatibility: handle expressions for
* -
RELEASE: Merged development version
-
PORT: Better MacOS Homebrew support
-
FIXED: Typo in updated history code. Caused !/0 to be redefined …
-
FIXED:
!<num>history handling if command contains a . in the
middle. -
FIXED: library(ansi_term): use initialization/1 If not used, the
setup init_color_term_flag/0 will not run when using .qlf files. -
MODIFIED: Use
booltypes for profiling API Should have low impact.
Used by xpce. -
FIXED: Disable Epilog if threads in single threaded version.
-
MODIFIED: halt/1: forward to main thread. If halt/1 is initiated
from a thread other thanmain,mainis signalled to terminate
the process. If the main thread does not do so within the time
specified by the Prolog flaghalt_grace_time(default 1 second),
the process is forcefully terminated. -
MODIFIED: Commandline history handling. Comandline history handling
used a double administration, both saving command as Prolog facts and
in the commandline editor. Now the commandline editor is in charge.
Visible changes to the user:- If library(editline) is not available, there is no history.
- Without any settings, the history depth is 100. The fact that
the history is enabled is shows using numbers in the prompt. - Substitution using e.g.,
!!,!<num>, etc. are always enabled. - Setting the Prolog flag
historyto 0 orfalsedisables the
history. An integer value sets the depth.
-
COMPAT: Use new prolog:message_action/2
-
ADDED: prolog:message_action/2 hook. This separates side effects on
messages from printing messages, allowing side effects to take place
even if an earlier print hook suppresses the message. -
FIXED: Use library broadcast to tell other components of modified
break-points. -
TEST: Do not run the “unprotected” tests if
protect_static_code
is set. -
FIXED:
'$clause_from_source'/4, used for setting break-points. -
DOC: Do not run test_installation twice
-
ENHANCED: xref_source/2: emit warning on late meta_predicate/1 This
directive must appear before the predicate is being used (called). -
PPA: Added Ubuntu 25.10 (Questing Quokka)
-
FIXED: Install of non-qlf json compatibility wrappers.
-
ADDED: packages/json
-
ADDED: call_in_thread/3. Extends call_in_thread/2 with options.
-
DOC: term_size/2: cells are always 8 bit in recent versions.
-
ENHANCED: Messages for managing spy points.
-
ENHANCED: listing/0,1,2 to respect the terminal width. If the output
is a terminal, tty_size/2 is used to determine the line width. -
DOC: test_installation/0: document permission requirements on the
working directory. -
ADDED: Implement read_term/1: implement reading attributed and
labeled terms. This patch supports Var{Attr: Value, …} if the
Prolog flagvar_tagis set toattvar. This allows reading terms
with attributes. It also supports labeled subterms that allows to
read terms that are directed graphs rather than trees. This includes
cyclic terms. For this we reserve the attributed=. For example?- A = X{= : f(X)}.Binds A to a cyclic term equivalent to executing
X = f(X). This is
part of ongoing discussions in the PIP working group. It is currently
implemented by ECLiPSe and SWI-Prolog. -
DOC: Updates documentation for using of # anonymous dicts.
-
TEST: Update tests for use of # anonymous dicts
-
MODIFIED:
Dict.put(Path, Value): create new dicts as#{...}. -
MODIFIED: select_dict/3 handling of
#tag The#tag matches any tag
at the other end and the dict holding the remainder has the#tag. -
MODIFIED: write_term/2 using attributes(write) This now writes
Var{Att1: Value1, Att2: Value2, ...}, which is valid syntax for
read_term/2 if the Prolog flagvar_tagisattvar. -
ADDED: read_term/2 and friends to respect the new
var_tagflag. -
ADDED: Prolog flag
var_tagDefines how Var{…} terms are
interpreted. This commit only implements setting and getting the flag. -
MODIFIED:
:</2and>:</2: match#tag The tag#matches any
tag on the other side without instantiating the tag. -
FIXED: instantiation errors on prolog_frame_attribute/3 on exceptions.
-
FIXED: Exception details from
'$tmp_file_stream'/4 -
ERROR: Domain error:
encoding' expected, foundtxt’The txt does not make sense * CLEANUP: Fixed more compilation warnings
when using -O3 -
BUILD: Fix PGO building for AppleClang
-
BUILD: Fix PGO build for Clang. This now does optimize.
-
BUILD: Changed default optimization for gcc to -O3 Earlier tests showed
no noticeable difference, but using gcc-15 and setjmp()/longjmp out
of the way we get about 15% improvement. -
SANDBOX: Declare string quasi quotation syntax as safe.
-
TEST: Fix format_time/3 tests by setting correct timezone.
-
WASM: Set defaults for best performant build.
-
ENHANCED: Move setjmp() out of the VM main function Using setjmp()
harms register allocation, which slows down the VM. Some data points:
Clang: 6% (Clang-17 on Apple M1 as well as Clang-20 on AMD3950X),
GCC: 13% (GCC-15 on AMD3950X), WASM: 35% (Emscripten 4.0.15 on Node.js
22.19 on AMD3950X). MinGW-14: 18% (Windows binary running on AMD3950X
under Wine). -
TEST: Fixed ration number writing test to work regardless of flags.
Test failed when run withrational_syntaxset tonatural. -
ENHANCED: Get rid of setjmp/longjmp() in PL_next_solutions() This
improves performance by about 12%. It does make a couple of scenarios
for stack overflow handling impossible though. This patch merely
introducesO_THROWas C macro to enable/disable this. -
WASM: Make setting CFLAGS and LDFLAGS in BuildType.cmake work The
if/elseif/… selection triggered on Clang. -
WASM: Compile VM using
-O2This produces a smaller binary with
slightly better performance. -
WASM: When using a monolithic PL_next_solution(), use
-O1in
Debug mode Otherwise local variables with non-overlapping scope are
not merge, causing an Emscripten compiler error -
WASM: Do not build
swipl-winAlso cleanup handling platform-dependent
cmake options -
FIXED: Provide random_property/1 when compiled with LibBF.
-
FIXED: When a REPL loop receives the halt/0,1 exception, make
it return. Before, if non-threaded or the REPL loop runs in the
main thread, terminate the process. Otherwise halt/0 was ignored.
The behaviour for the main thread is still the same, but prolog/0
succeeds in other threads if the thread calls halt/0.Possibly we should add a flag to control this behaviour, i.e. whether
or
not halt/0 inside prolog/0 terminates the process or merely the
REPL loop. -
DOC: Update most links to
swipl-winand related functionality -
PORT: Replace incomplete function pointer types by
void*C11 and
later do not allow forforeign_t (*function)(). -
CLEANUP: Delete obolete components - snap build instructions -
packages/swipl-win (Qt console) - Various files supporting this. -
CLEANUP: Deletes Qt console.
-
CLEANUP: Remove old swipl-win.exe code.
-
PORT: Carefully detect that
gitis the sane thing on MacOS.
With help from @ridgeworks -
FIXED: Update library(threadutil) for Epilog support.
-
STYLE:
darktheme: avoidnavy_bluecolor for global predicates. -
ENHANCED: Allow set_stream(S, alias(user_input)) without locking S.
-
CLEANUP: Synchronise handling of the
tty_controlflag between Windows
and Unix. Needs further cleanup, notably a separate definition of
the indexes for the boolean flags. -
MODIFIED: Moved enabling ansi colors on the Windows console to be
used only with tty control. -
CLEANUP: Remove non-functioning PL_wait_for_console_input() This
fixes Windows console input without the commandline editor. -
FIXED: Handle command line argument
--foreign=copy -
FIXED: qsave_program/2 determinism.
-
FIXED:
Parse -<base>'<digits>Reported by Joachim Schimpf. Thanks. -
MODIFIED: MacOS: change default working dir of the app to ~/Prolog
~/Documents is subject to TCC (Transparency, Consent, and Control),
showing a confirm dialog on any file access until we get SWI-Prolog
signed. -
DOC: clarify the use of Key and Priority in library(heaps)
-
CLEANUP: Avoid unused function warning when compiling for Windows
without thraeds. -
FIXED: #1381 building single threaded version for Windows.
-
TEST: term_hash/2,4: WASM produces different results due to 32
bit limit. -
FIXED: Starting interactive mode failed if the history cannot be
initialised. This prevents running Prolog interactively if there is no
HOME directory or the config directories and files cannot be created. -
FIXED: prolog:translate_bindings/5 looped As
CA1_LPROCarguments
were resolved against the head module rather than the body context,
this predicate called itself rather than the local defininion in
toplevel.pl.This predicate is used by Pengines and SWISH.
-
TEST: term_hash/2 for LibBF on little endian machines.
-
TEST: Update term_hash/2 tests for big endian results.
-
MODIFIED: Removed
'$open_xterm'/5This predicate allowed for using
thextermapplication to provide a console for a background thread.
This is now covered by Epilog. Also,xtermis no longer widely
supported. -
TEST: term_hash/2: hash depends on GMP vs LibBF. Handle and document.
-
THEME:
dark: darker colour for unused import background -
FIXED: WASM: Avoid leaning strings in
Prolog.get_chars() -
WASM: Added
Prolog.__with_strack_strings()This interface allows
for cleanup of temporary strings. It provides a WASM version of
PL_STRINGS_MARK() ... PL_STRINGS_RELEASE() -
FIXED: edit/1 to merge all locations considered identical.
-
TEST: Fixed test for simplified ansi_format/3.
-
FIXED: Inherit the Prolog flag
max_integer_sizein new threads. -
MODIFIED: term_hash/2: extended range As tagged integers now have
the same range on all platforms, the range for term_hash/2 has been
extended to the max tagged integer.You can get the old hash by masking the lower 24 bits.
-
BUG: The test values for big endian are not updated as I do not
have access to big endian hardware right now. Please submit the
corrected values. Seetests/core/test_hash.pl. -
ADDED: set_thread/2 Generic interface for modifying thread properties.
Currently controls the debug status of a thread. Will absorb most
other properties. -
DOC: thread_property/2 did not document the debug property.
-
FIXED: swipl-win: print backtrace on uncaught exceptions in Epilog.
-
FIXED: Simplification in 057d69387e240ebf90af8f9c9d5783c5203887fa
was wrong. -
FIXED: #1384 message printing is disabled after an uncaught exception
inside a transation Assert and erase listen inconsistently to
P_TRANSACT, causing a clause for user:thread_message_hook/3
to remain. -
THEME: Support dark theme in selections in text objects.
-
DOC: Cmake font options
-
THEME: Redefine
graphical.selected_foregroundand
graphical.selected_background -
THEME: dark: fixes for GUI tracer breakpoints and redo ports.
-
ENHANCED: ls/0,1: create hyperlinks for Prolog source files. File
presentation style can be tweaked using the shell:file_style/2 hook. -
THEME: dark theme to improve readability of => rule guards.
-
BUILD: Avoid relying on environment variables for xpce steps Somehow,
usingcmake --envdoes not work correctly on all platforms.
This patch adds and uses an-DSDL_VIDEO_DRIVER=dummycommandline
option for the Prolog build steps. -
FIXED: incorrect inclusion of cluster data in default text profile
data First attempt at new format incorrectly tried to merge callee
data into predicate overall times -
FIXED: predicate_label/2: support
[]as functor name -
ADDED: prolog_trace_interception/4: support
haltHalting from the
callback no longer works since halt/1 is implemented as an exception.
This caused “Exit Prolog” from the GUI debugger to be ignored. -
THEME: Make quasi-quotation syntax readable in dark theme [no ci]
-
UNICODE: Updated library(unicode/blocks) Updated to version 16.0.0
of the Unicode standard. -
THEME: dark theme to fix up cycle menus.
-
ENHANCED: Update profile/1,2 text output Enhanced default version
of show_profile/1 -
FIXED: Prevent building the pack.pl app when there is no
library_pack The library is build conditionally starting from
2793ca547c3b185f50d2ce803c582874fc583b70.Signed-off-by: Nicola Vetrini nicola.vetrini@bugseng.com
-
PPA: Fixed plucky version to include the GUI
-
THEME: dark: improve colour for option_name and SSU rule guard.
-
FIXED: prolog_read_source_term/4L respect
:- encoding(+Enc) -
FIXED: Avoid Unicode characters in otherwise ASCII files Files used
Unicode variations on ’ and - -
FIXED:
swipl-wininstallation for MacOS when not creating a bundle. -
PPA: Updated scripts/make-ppa to setup building without gui for
older distros -
ADDED: Empty
lighttheme file. -
FIXED: Code generation for unification moved to the head. Minimal test
case:p(X, Y) :- X = f(Y), Y = a.. Issue occurs if a variable is
accessed (Y) before its unification must be moved to the head. -
FIXED: Building; typo in prolog_pack/http fix
-
BUILD: Avoid installing some libraries with missing dependencies -
Do not install library(prolog_pack) if http support is missing.- Do not install SICStus timeout compatibility if multi-threading
is not enabled.
- Do not install SICStus timeout compatibility if multi-threading
-
FIXED: library(prolog_xref): added some missing hook declarations.
-
THEME: Dark theme declarations for class list_browser and the profiler.
Requires the SDL version of xpce. -
ENHANCED: Improve
darktheme Only applies with new SDL based xpce -
PORT: Fixed MacOS installer to include transitive dependencies and
fix the @rpath. -
BUILD: Fixed PGO build with
-DEPILOG=ON -
BUILD: Ensure proper GUI environment for building the manual.
-
ADDED: Support
-Dtheme=<theme> -
PORT: Update scripts/macos-deps.sh Update most ports, add SDL3,
SDL3_image, cairo and pango. -
ADDED: Working directory handling for MacOS app.
-
PORT: Create a MacOS bundle based on Epilog.
-
ENHANCED: interactor/0,1: use epilog when available. In the long
term we will drop xterm support as well as native win32 support. -
EPILOG: Deal with
--win-appoption in a way that also supports
epilog. -
ENHANCED: Remove thread context for threads running the REPL loop.
This avoids the complicating[Thread xyz]note on messages in
alternate consoles such as Epilog or SSH shells. -
ADDED: Prolog flag
toplevel_thread. This flag istruein a thread
that is currently running a REPL loop. -
FIXED: Edit from PceEmacs using popup could raise an error.
E.g. ERROR: prolog_edit:is_file_spec/1: No rule matches
prolog_edit:is_file_spec(20_625_830) -
BUILD: Add CMake
-DEPILOGoption This option prepares the core
for the upcoming Epilog configuration. It must be used with the
sdlbranch ofpackages/xpce. Effect:- Drop library(readline)
- Drop swipl-win, either Windows version or Qt version.
- Create a new swipl-win that is a copy of
swiplthat sets the
epilogflag. Depending on the platform some more additions
may be needed.
-
PORT: Find MinGW DLL dependencies more dynamically This provides two
CMake functions to find the direct and indirect MinGW DLLs that must
be included into the distribution -
ADDED: Allow storing the tty screen size with a stream. This is
required for environments where we use a non-tty I/O device such as a
pipe or socket while there is a notion of a tty size. Currently used
for Epilog on Windows. -
MODIFIED: print_term/2: print dict tags and compound functors using
the current write options. Both used to be printed hardwired using
~q(quoted). -
FIXED: When
rational_syntaxisnatural, write /(Int,Number) with
spaces. This ensures such a term is not read as a rational number. -
FIXED: Use autoload_call/1 to avoid reporting undefined predicates.
-
MODIFIED: Make the code walker ignore calls to autoload_call/1.
-
ADDED: autoload_call/1: call Goal after autoloading.
-
PORT: Avoid errors on sharing violations.
-
FIXED: Windows: comparing string equality with surrogate pairs
Comparing strings with surrogate pairs could signal inequality while
the strings are equal. -
FIXED: Unification to chars or codes of wchar_t text on Windows.
-
PORT: Discontinue 32-bit windows builds.
-
PORT: Support library(editline) (libedit) on Windows. This provides
cross-platform commandline editing with Prolog-sensitive completion. -
ADDED: Windows: tty_size/2 to also work on Windows consoles.
-
WASM: Deal with new PL_prompt_string() API
-
MODIFIED: Signature for PL_promot_string() and PL_prompt_next() These
API functions now use the Prolog stream as argument to facilitate
better support for Windows. -
ADDED:
IOSTREAM*control message to get the WindowsHANDLE -
FIXED: wait_for_input/3: use Swinsock() from pl-stream.c rather than
a local macro This ensures proper error messages if the input is not
a socket. -
MODIFIED:
PL_dispatch()and friends now useIOSTREAM*instead
ofint. This is a first step to merge simultaneous handling of
console outout and GUI dispatching for POSIX systems and Windows to
a common design. -
WINE: Waiting for windows console input now works for wine.
-
PORT: Make installing
INDEX.plfiles work on Windows. Concurrency
may cause sharing violations. This patch retries renaming the index
file several times. -
FIXED: Possible early reclaim of closure blob after unwrapping
a predicate. PL_unregister_atom() was called twice. -
ADDED: Incorporate epilog into the toplevel. These patches prepare
for the XPCE basedswipl-win. May be started by using thesdl
branch of xpce and run asswipl -Depilog [arg ...] -
ADDED: ‘$run_state’/1 to query the current run state Can be used to
detect code is running as part of the cleanup hooks. -
BUILD: Use
SDL_VIDEODRIVER=dummyfor running Prolog steps This
makes sure the new SDL based xpce does not try to open graphics and
is harmless on other targets. -
FIXED: Move swipl-win history support to library(win_menu). This
library is loaded as source and thus conditional compilation applies.
library(prolog_history) is compiled to .qlf. Now the code is also
where it belongs. -
FIXED: When generating
_Xvariable names, avoid query variable names.
Consider the below example by Jan Burse. Using _A in the answer is
at least confusing. We must not only skip variable names that appear
in the projection, but also variable names from the query that are
not in the projection.?- length(L,2), f(L) = R, S = [_A]. L = [_A, _B], R = f([_A, _B]), S = [_A]. -
FIXED: Terminal REPL loop using thread_exit(io_error) on an io_error
during read. -
FIXED: Termination of a REPL loop due to error state of the streams
This did not properly close the query, crashing the system in the
thread cleanup. -
FIXED: thread_join/2: could leave
L_THREADmutex locked on error. -
ADDED: Allow thread_signal/2 to raise native signals by number.
This can be used to raise e.g. SIGINT in a thread to debug it. -
FIXED: enable_line_editing/3 to avoid conditional compilation.
This is needed to make library(threadutil) work as .qlf module. -
FIXED: write/1,2 to take rational number syntax from module
user.
Before, only write_term/2,3 supported “natural” rational number syntax. -
FIXED: Make the stream macros
Suser_inputsafe when called from a
non-Prolog thread Called from a non-Prolog thread caused these macros
to crash. They now return NULL. The main-thread I/O can be obtained
usingSinput,SoutputorSerror. -
ADDED: Allow hooking into the terminal link generation.
-
FIXED: Various details for the
sysapp -
ADDED: Prolog flag
linux -
FIXED: QLF format to store references to predicates in the current
module by functor. Otherwise, if a predicate is imported the clause
will point at the import location, bypassing the predicate resolution
that happens when loading the source. -
BUILD: Avoid cmake warnings.
-
ENHANCED: jiti_list/0,1 - Provide collision stats - Order predicates
alphabetically - Use tty hyperlinks when supported to allow jumping
to the definition -
FIXED: ansi_hyperlink/3: Fix position logic Make sure the column admin
is not updated when writing the escape sequences. This allows mixing
with format/1-3 tag specifiers. -
ENHANCED: Make sure that small clause index tables have no collisions.
-
ENHANCED: Use Fibonacci hashing for clause indexes.
-
ENHANCED: Index performance on common arguments. Given a predicate
with many clauses that has one or more arguments with only a few
possible values and (thus) many clauses in the hash buckets for each
of these values force fast failure when using a query with a value
that does not appear in that argument.For example, suppose we have a business database that records the legal
status in one of the columns (arguments). A query with a non-existing
lega status should fail quickly. In the old system, the small number
of values could easily lead to a hash colission, causing the system to
try all clauses with the legal status of the collision.This issue was reported by Abramo Bagnara
-
FIXED: #1364 nb_set_to_list/2 could skip elements.
-
FIXED: version/1: avoid redefined warning.
-
FIXED: ansi_get_color/2: avoid errors on swipl-win (Qt)
-
ENHANCED: Windows: use native fonts for bold and support
bold+underlined. -
ADDED: Freedesktop.org Desktop integration files. This patch adds
a directorydesktopwith icons and desktop integration files.
A particular version can be activated as desktop application usingswipl sys desktop [--global] installThe activation canbe removed using
swipl sys desktop [--global] remove -
ADDED: Windows
swipl-win.exe: support underlined fonts Support
\e[4mto print underlined text. -
ADDED: Windows: swipl-win.exe : support hyperlinks. This patch enables
terminal escape sequences to embed hyperlinks.file://links
are then mapped to edit/1 and other links are opened in the browser.This patch also fixes several issues and provides cleanup to the
swipl-win.exe console code. -
FIXED: Report correct number of clauses when loading .qlf files
Reported 0 (zero) clauses for all .qlf files. -
FIXED:
?- edit(file('myname.pl')).to create a new file. -
FIXED: Do not precompile several files This patch stops precompiling
the libraries win_menu, threadutil and check_installation. The sources
are full of conditional compilation that also depends whether or not
swiplorswipl-winis started.Using runtime conditionals is possible, but would lead to many
undefined predicate warnings. -
FIXED: Create menu in Windows and Qt consoles. Broken due to
conditional compilation that excluded the call to init_win_menus/0
from the .qlf file. -
BUILD: prohibit building in the source directory.
-
TEST: Include clpfd test with tabling.
-
DOC: Constraints and tabling
-
TEST: Merge XSB attributed variable tests. This updates several of the
tests, documents what tests cannot be executed due to incompatibilities
and extends the XSB dialect emulation to deal with a later part of
the attributed variable interface.The tests both deal with basic attribute handling and with (simple)
tabling
that involves attributes. -
FIXED: Support attributed variables in “fastheap” terms. These are
used by tabling and delimited continuations. -
FIXED: Handling attvars in answer tries.
-
FIXED: library(prolog_source): undefined html_write:html_meta_head/3
-
XSB: Added basic attributed handling to emulation Library
machinenow exports get_attr/3, put_attr/3, del_attr/2 and
install_verify_attribute_handler/4. -
ADDED: library(prolog_profile): Prolog flags for defaults -
profile_portsprovides the default “mode”, nowtrue-
profile_sample_rateprovides the default sample rate (200) -
DOC: clause/3: describe properties of clause references.
-
DOC: retractall/1 and logical update view section.
-
DOC: Moved some sections in the “Database” section of the manual.
-
BUILD: Better support for cmake < 3.20
-
PPA: Updated releases - Added Plucky Puffin (25.04) - Removed Focal
Fossa (20.04) and Bionic Beaver (18.04)The latter two fail to build the Janus interface due to too old
Python versions. -
ADDED: Support attvars in trie_gen_compiled/2,3 This patch also
fixes an issue in trie_gen_compiled/3 that caused unintended variable
sharing between the key and value. -
FIXED: Allow building with installed .QLF files when the VM changes.
A VM mismatch raised a fatal error during boot. This is now relaxed
to a normal exception. -
ADDED: Partial support for attributed variables in tries. This first
step deals with inserting and generating. Trie compilation is not
yet supported (crashes on unexpected key in the trie). -
FIXED:
swipl qlfapp: report incompatible .qlf files -
BUILD: Provide additional .qlf dependencies.
-
FIXED:
swipl qlfapp: dependency warnings andcleansubcommand -
FIXED: trie_gen_compiled/3: crash if value is cyclic or contains
attributes. -
INSTALL: Enable compiling .qlf files by default.
-
ENHANCED:
swipl qlfapp - info:
- by default list all info - list:
- add-u(--update) to only list out-of-data .qlf files
- Produce machine format if output is not a terminal. -
ENHANCED: Add macro expansion dependencies to .qlf files.
-
ADDED:
swipl qlf infoto accept multiple files. -
ENHANCED: source_file_property/2 performance Speedup
source_file_property(File, load_context(…)). -
ENHANCED: Distinguish different file dependencies in .qlf files.
-
ENHANCED: qlf file record included files These are also shown by
swipl qlf info -s <file.qlf> -
ENHANCED: Record included files in .qlf files with path translation.
-
FIXED: source_file_property/2 to work without sources.
-
FIXED: qlf_make/0 for out-of-date computation for aggregate .qlf files.
-
FIXED: Allow for discontiguous autoload/1 and autoload/2 directives.
-
FIXED: dicts_to_compounds/4 if dicts have non-atom tags.
-
DOC: Singleton section was outdated. After comment by Jan Burse.
-
PORT: Deal with dropped support for partial literals in phrase/2,3
-
MODIFIED: ISO: phrase/2,3: do not allow for partial lists as terminal
-
FIXED: WASM: Missing (chr) dependency caused build to fail.
-
WASM: Added table for mapping HTML attribute names to DOM attributes.
-
FIXED: prolog_load_context/2 for
fileto work correctly for .qlf. -
FIXED: Only emit hyperlinks if
hyperlink_termis true. -
ADDED: Start a new library(dom) based on html//1
-
MODIFIED: WASM: Move library(dom) to the dialect
tau. We plan on an
alternative library(dom). As a consequence, we move the Tau emulation
library to the newly added Tau support in SWI-Prolog’s dialect support. -
FIXED: library(dom) set_attr/3: allow for atoms as values.
-
BUILD: Support cmake < 3.20
-
FIXED: Using tabling when configured for debugging with autoloading
disabled. -
WASM: Enhanced error message when evaluating
:=/2 -
FIXED: Clear
FR_SKIPPEDafter skip/up in yield-based debugger. -
FIXED: continue in trace mode after hitting a spy point. This was
broken when using Prolog defined tracing in recent rewrites. -
FIXED: Retrieving source info for
Head --> "terminal", ... -
DEBUG: Attempt to improve visible trace points in the debugger.
-
FIXED: xref_public_list/3 on absolute .pl file on qlf-only release.
-
FIXED: file_autoload_directives/3: Handle absence of sources Use
public xref_public_list/3 rather than a private predicate from
boot/autoload.pl that is designed for source only. -
FIXED: library(dom) get_by_id/2: getElementById() returns
null
on failure -
WASM: library(dom): Tau-Prolog compatible handling of set_style/3 and
get_style/3 Several DOM style strings are translated to Prolog terms. -
ADDED: library(dom): remove_class/2.
-
WASM: Move bind/4 from library(dom) to library(wasm) Also added wait/3.
-
DOC: Added library(wasm) and library(dom) to documentation server.
-
DOC: library(wasm)
-
ADDED: WASM: Prolog.promise_event()
-
WASM: bind/4 can now handling JavaScript objects without using the
database -
WASM: Updated
bind.htmldemo. -
ADDED: Complete the Tau-Prolog compatibility library(dom).
-
ADDED: WASM: Allow for nested
#(Value) -
WASM: Prolog.bind(): added options.
-
BUILD: Install pldoc/hooks.pl instead of the .qlf file This is an
include file that is used by the web server to customise PlDoc. -
FIXED: library(prolog_colour): handle non-ground directives. E.g.
:- use_module(mymodule, [op(_,_,_)]). -
MODIFIED: prolog:xref_update_syntax/2 This hook is now called both with
the raw and expanded terms. Directives are called as (:- Directive)
rather than the plain term.The hook was (no longer) used, so this should have limited impact.
It is now introduced for library(http/html_write). -
FIXED: library(prolog_xref): missing multifile declaration.
-
FIXED: library(prolog_colour): style mismatch for multifile heads.
-
ADDED: Support access to public predicates for library indexes
-
ADDED: xref_public_list/2: get information from library INDEX.pl
Using the INDEX.pl file provides a fast and simple way to get the
library exports and meta-predicate information. Still need to deal
with public predicates. -
MODIFIED: INDEX.pl files. Thes files used to contain
- index(Name, Arity, Module, File)
This is now modified to
- index(Head, Module, File)
Where Head contains (where known) the mode and/or meta-predicate
indicators. The index files now also contain the op(Pri,Type,Name)
terms from the export list.This provides faster and simpler access to meta-predicate and
operator relations between modules. -
FIXED: edit/1 using edit(file(File)).
-
FIXED: edit/1: find e.g. library(lists) if only qlf files are
installed. -
DOC: #1358 prolog_stack_frame_property/2
-
ADDED: prolog_colourise_term/4: option current_variable(Name)
This causes the marking to mark the named variable with the class
current_variable. -
WASM: Prolog.consult(): added
engine:trueoption. This allows
loading files to proceed asynchronously. -
ADDED: xref_source/2: stream(In) option This allows processing
arbitrary data. -
WASM: Do not install the package build tools.
-
ADDED:
qlfappswipl qlf info -e file.qlfShow exports of the
.qlf file. -
ENHANCED: library(prolog_xref) without sources Get exports from
.qlf files. -
MODIFIED: edit/1: use dicts for representing (partial) locations.
As a result, hooks info the editing infrastructure need to be updated. -
ENHANCED: edit/1 - Feedback on locations - Code simplification and
modernizing -
CLEANUP: edit/1 - Avoid deprecated us of absolute_file_name/3. -
Avoid proposing .qlf files. -
ADDED: prolog_file_directives/3 This predicate used to be part of
library(prolog_xref). It is now public from library(prolog_source). -
DOC: Update CMAKE.md to include instructions on Python installation
Added a list of the options useful for installing Janus -
DOC: install with symlinks
-
WASM: Use lz4 compression for data file.
-
WASM: Demo server to serve library sources.
-
WASM: Support library(chr). The package was compiled, but only
partially installed and thus non-functional. -
WASM: Enable adding packages in the node version This was disabled
due to issues with Emscripten opendir(), but these seem resolved. -
WASM: Support INSTALL_QLF and INSTALL_PROLOG_SRC CMake flags
-
WASM: Remove several libraries that cannot be supported
-
BUILD: Allow qlf builds without PlDoc and xpce
-
DOC: WASM function Prolog.query() Documented
nodebugandstring
options. -
WASM: Prolog.query(): add option
{string:"atom"} -
ENHANCED: Generalise user interaction on answer Allow reusing the
toplevel answer user interaction by using an alternative input. -
ENHANCED:
qlfapp to report .qlf files without sources. Used to
report these as out of data. -
FIXED: We must insert I_CONTEXT in multifile predicates Multifile
predicates are typically installed in modules usingtarget:head :- body, where body is executed in the containing module. This is
achieved using an I_CONTEXT VM instruction. Before, when the predicate
contains one such clause, it setP_MFCONTEXTand inserted a
I_CONTEXT for each subsequent clause. When using .qlf files though,
the files may be loaded in different order than when creating the
.qlf files, leading to clauses without an I_CONTEXT instruction to
follow clauses with this. -
ENHANCED: library(prolog_xref): cleaner exception handling.
-
ENHANCED: Allow cross-referencer to deal with .qlf files
-
BUILD: Added CMake option
-DINSTALL_PROLOG_SRC=OFFThis can be
used together with-DINSTALL_QLFto ship the Prolog libraries as
.qlf files without including the sources. -
FIXED: Handle autoload/1,2 declarations in aggregate .qlf files
-
FIXED: load_files/2: resolve to files loaded from .qlf Some qlf
files may load multiple source files. When looking for a file in
e.g. use_module/1,2, first try the file system, but on failure ee
whether we loaded a .qlf file that registered the required file. -
FIXED: Use canonical .pl files for all admin purposes. Despite the
fact that code is loaded from .qlf files, use the .pl file from which
the .qlf file is compiled for admin purposes. -
ADDED: ‘$qlf_module’(+File, -Dict) This predicate extracts properties
for a module without loading it. This is required to make autoload/1,2
work if we remove the source files. -
MODIFIED: absolute_file_name/3: distinguish file types
prologand
sourceThese used to be synonyms. Nowprologincludes.qlf
andsourcedoes not. -
INSTALL: Install .qlf files if these have been build.
-
ADDED: library(prolog_qlfmake) This library allows for compiling the
entire library to .QLF files. -
ADDED: Prolog flag
source. This flag can be used to ignore the
.qlf files in the library and load the .pl (source) files instead. -
ADDED: library(prolog_qlfmake) This library allows for compiling the
entire library to .QLF files. -
FIXED: Do not keep an erased clause when doing an incremental
compilation -
ENHANCED: qcompile/1: preserve predicate properties When compiling
clauses for another module as commonly done as a return of
term_expansion/2, preserve the multifile and dynamic properties,
such that the module can be loaded as qlf and later loading of the
module into which the clauses are added does not wipe the predicate. -
FIXED: Debugging the fail port of Prolog defined built-in predicates.
-
FIXED: If engines are enabled without threads, call the main engine
main. -
WASM: Fixed abort handling.
-
WASM: Fixed yieldable using Prolog.call() running in engine.
-
ENHANCED: trap/1: stop trapping direct catch. Do not trap the debugger
forcatch(SytemPred, _, _). Such calls are very unlikely interesting
to the debugger. -
ENHANCED: logic to trace a call to a system predicate Consider system
with a stack user ← meta ← system as a debug frame. For example,
trace char_code/2 in the code below.p1 :- catch(char_code(_,_), error(_,_), fail). -
FIXED: finish command of GUI debugger. This fix adds skip(Frame)
to the possible replies from prolog_trace_interception/4 and deletes
prolog_skip_frame/1. -
FIXED: prompt1/1 called in mode (-) must fail if there is no “first”
prompt. -
ADDED: Prolog.call(): allow passing the goal using Prolog.Compound()
-
FIXED: Prolog.Compound() constructor
-
ADDED: wasm_query/1, support running a single query interactively.
-
BUILD: Avoid CMake generating paths with double “/”
-
BUILD: Updated cmake_minimum_required to 3.10 as adviced in CMake 3.31
-
FIXED: Handling skip in the gui tracer. Incorrectly detected that
an exit was from a skipped frame. We could also consider to move
this into the exit port, e.g., present the port as exit(skip).The GUI tracer can be simplified as process_trace_action() is dealing
with more details of handling the user continuation. -
CLEANUP: Remove restoring REDO port from tracePort() This is dealt
with in the VM backtracing code and (thus) never reached. -
WASM: Fixed Prolog.consult() in strict mode
-
FIXED: #1352 open_resource/2: Unknown procedure: ‘$rc’:zip_close/2
-
ADDED: ansi_hyperlink/3: better handling of URLs
-
WASM: Rename shell to “tinker”. Tool will be named “SWI-Tinker”
-
WASM: More URL handling.
-
FIXED: PL_put_chars(): unregister atom when using
PL_ATOM. -
WASM: Support single character input from the user (get_code/1, etc.)
-
ADDED: prompt1/1 can retrieve current prompt using a variable.
-
BUILD: #1350 Auto-include utf8proc if documentation is requested.
-
WASM: Support include/1 from files loaded using a URL
-
FIXED: Sandbox: declare distinct/1,2 as safe (uses tries).
-
WASM: Allow reusing a query in the shell.
-
WASM: Added options to Prolog.consult() This allows for
Prolog.consult(file1, file2, ..., {module:"project"}) -
WASM: Give proper warning on
?- [user]. -
WASM: Added decoding of ansi hyperlink sequence
-
WASM: Handle read/1 and friends in shell
-
MODIFIED: (Undocumented) PL_prompt_string() now returns UTF-8
-
WASM: Added tty_size/2 and get_single_char/1 to shell
-
WASM: Added upload and download buttons for WASM shell.
-
WASM: Simple debugger for the browser shell.
-
WASM: Added decoding of ANSI escape sequences
-
WASM: Prolog.call() provides
nodebugoption. Also add Prolog.Term()
class that allows for creating terms from term handles or strings. -
WASM: Split shell demo into multiple files.
-
WASM: Reorganised directory
-
WASM: Fixed dealing with heartbeat events.
-
DEBUG: Use swipl-web.js rather than swipl-bundle.js for debugging
-
WASM: Minimally working Prolog tracer in the browser
-
WASM: Fixed standard I/O flushing. Notably writing to
user_error
was flushed on a newline. -
WASM: Fixed Prolog.write()
-
ENHANCED: Error message when using WASM await/2 in synchronous query.
-
FIXED: We must discard foreign environments While unwinding an
exception, before we discard a frame, which may call the foreign
cleanup handler, we must discard newer foreign environments. -
FIXED: Extended query solutions from
inttoint64_tOtherwise,
PL_new_solution() is limited to 2G solutions. -
FIXED: PL_yield_address(): preserve foreign environment
-
FIXED: State handling using PL_yield_address().
-
FIXED: library(block) (SICStus emulation) warns about append/3.
Reported by Peter Ludemann. -
FIXED: wrap_predicate/4: possible double free after unwrapping The
copy of the predicate held in the closure should not copy the lingering
list and we must avoid lingering the wrapped supervisor as it becomes
owned by the closure. -
ADDED: Yield based debugger support This patch introduces a large
number of changes to the VM as well as the debugger code. It allows
interacting with the Prolog debugger using yield, i.e., instead of
calling a hook when a Prolog port is passed it makes PL_next_solution()
return. The environment can examine the state, make calls on this
Prolog engine and finally set how the session must be continued and
resume PL_next_solution().The interaction is similar to user:prolog_trace_interception/4, used
to drive the GUI debugger using callbacks. Given this, it becomes
possible to write a debugger for the WASM version for using in
the browser. This can either be a traditional console debugger or
a graphical debugger similar to the native debugger.This patch reorganises notably the backtracking and exception handling
code in the VM, splitting these large pieces of code into many VM
helper functions. It also reorganises several parts of the builtin
debugger to facilitate code reuse between the callback and yield
based debuggers.This is a squash commit of the
trace-yield-statebranch. -
ADDED: print_prolog_backtrace/3: show_files(+How) option
-
CLEANUP: Delete VMI profiling code. As we have VMI functions and
much better profiling tools this merely complicates the sources. -
MODIFIED: abort/0: disable debug mode.
-
ADDED: WASM: options parameter to Prolog.query() and Prolog.forEach()
to control running in a dedicated engine. -
DOC: Class Engine
-
WASM: Improve Query and Engine interaction and benchmark suite
-
DOC: Docuemnt scripts/configure in CMAKE.md
-
MODIFIED: By default enable engines in single threaded version.
The impact on performance and size is minimal. -
ADDED: Support Prolog engines in the WASM JavaScript interface
-
ADDED: PL_current_engine() Although we can also fetch the current
engine using PL_set_engine(), this API is simpler and faster and
notably easier to handle for e.g., the WASM version. -
WASM: Use (hard) links to populate the wasm-preload directory. This
makes incremental builds work correctly if Prolog files are changed. -
ENHANCED: No longer trigger AGC from CGC We used to trigger this if
there are a fair amount of clauses that have been erased for which
we have a clause reference. As we remove these clauses anyway from
the indexes, they only cost memory and thus leaving the decision to
normal AGC seems fine.In due time we should probably consider atom sizes when considering
AGC. -
ADDED: PL_set_query_data() and PL_query_data() These allows attaching
user data to a Prolog query. This allows for efficiently tracking
the role and status of a query in an application. -
ADDED: Better engine corouting support from C using PL_WITH_ENGINE()
-
WASM: Missing build dependency
-
CLEANUP: conditional dead code when using engines without threads.
-
WASM: Associate await/2 state with the engine This is part of
supporting multiple engines in the WASM version. -
ADDED: PL_query_arguments() This finds the arguments of the primary
goal of a query. -
ADDED: Support engines in single-threaded version This patch revives
an old proof-of-concept option to include engines in the single
threaded version. The code compiles and tests again. Added Prolog
flagenginesto indicate the system has engine support. -
DOC: Extended state values for PL_next_solution()
-
ADDED: Provide
SWIPL_HOMEmacro fromswipl-ld -
TEST: Move tests from src/Tests to tests This simplifies navifating
the source tree. It notably allows us runninggit grepin the
srcdirectory for C code without false hits from the Prolog tests. -
BUILD: Support multiple Emscripten environments in
scripts/configure -
PORT: WASM: Silence unused main warning. Main is a tiny function
that pulls in no extra dependencies, so keeping it in is easier than
leaving it out. -
PORT: Support Emscripten 4 - All source must be in
--pre-jsas the
--post-jsis loaded
after the module is initialized and thus we cannot initialize
Prolog
there. - Bug in Query constructor, passing an integer rather
than a string. -
FIXED: Compilation on single-threaded systems.
-
FIXED: debugging/0 fails to report spy points. Because debugging/0
runs the implementation in nodebug mode it never reports that debug
mode is on and the set spy points. -
PORT: Avoid C23 static_assert() without message
-
MODIFIED: Only include
<windows.hif
SWIPL_WINDOWS_NATIVE_ACCESSis defined This provides the types and
prototypes for the Swin* functions that provide access to underlying
HANDLE and SOCKET objects. -
ADDED: swipl-win console
^Ybound to paste_quoted. -
ENHANCED: Simplify shallow backtracking code
-
ADDED: jiti_suggest_modes/0,1 Inspect the created JIT indexes, looking
for arguments for which we could create an index, but the predicate
is never called with the argument instantiated. -
ENHANCED: Handling of candidate deep indexes.
-
MODIFIED: predicate_property/2 indexed(-Indexes) property Now returns
the indexes as a list of dicts. This supports new features and is
easier to extend as indexing is further refined. -
ADDED: Low level support to compute all useful hash indexes and
their properties. Accessible from Prolog as ‘$candidate_indexes’/3 -
DOC: Clarified PL_get_arg() and _PL_get_arg().
-
FIXED: indexableCompound() This function is used to see whether
a deep index is possible. It could generate wrong results, both
missing indexes and making useless indexes. -
TEST: Cleanup reload test Layout and use assertion/1 such that we
can more useful feedback -
ENHANCED: explain/1 Several enhancements, notably list predicates with
certain properties and provides some more detail on various objects. -
FIXED: Cleanly destroy claused indexes on free.
-
FIXED: Detection whether a compound can be used for deep indexes.
This incorrectly considered H_VOID/H_VOID_N to be indexable.
Also documents and usesbool. -
FIXED: addClauseToListIndexes() could skip indexes
-
ENHANCED: Inserting new clause indexes
-
FIXED: Crash in clear_frame_vars() when compiled for debugging
-
ADDED: library(prolog_colour): colour mode/1 directives. Coloured as
meta_predicate and therefore still accepts the non-mode specifiers. -
ADDED: check/0: print dummy mode declarations.
-
FIXED: Control-C + abort while printing output may exit REPL.
If the abort is handled by PL_handle_signals() called from flushing
the output, the stream is set in error state. If releasing the
stream re-raises the exception it should clear the error state from
the stream. -
CLEANUP: Remove unused supervisor instructions S_ALLCLAUSES and
S_NEXTCLAUSE -
DOC: JIT indexing for vs [|] and “primary” index
-
ADDED: mode/1 and predicate_property/2 property mode(-Head)
-
ENHANCED: Generalize S_LIST supervisor for any argument. The S_LIST
supervisor is now used to select between an[]and[_|_]clause
regardless of the argument. -
FIXED: Clause analysis that involves multiple calls to skipArgs()
In this case we need to keep context for dealing withH_VOID_N,
skipping N void arguments. -
FIXED: reexport/2: allow for op(Priority,Associativity,Name) Consistent
with use_module/2 as (now explicitly) claimed. Reported by Rick
Workmann. -
FIXED: alloc_assessment(): check for malloc() failure
-
ENHANCED: bypass most indexing code for non-indexable predicates
-
ENHANCED: Change default index argument
-
ADDED: Prolog flags to query and change the JIT clause indexing.
Experimental. The meaning and names of the flags are likely to change. -
FIXED: library(prolog_colour): misleading colouring of
Dict.field
Field was flagged as an error (no_function). -
DOC: sort/4 stable sort example. Suggested by Pierpaolo Bernardi.
-
ASAN: Avoid runtime errors on
field[1] -
PORT: More C99 unspecified array at end of struct issues.
-
PORT: Use portable definition of
struct clause -
PORT: Use C99 constructs for a portable version of
struct functor
Structs may usetype name[]as last field for a dynamic array. -
ENHANCED: Simplify generating a joined key for multiple arguments.
-
ENHANCED: app
splfrto use new argv_options/4 ability to pass
unknown options. -
ADDED: argv_options/4: option unknown_option(pass) This passes
unknown options to the positional argument list without warning.
This is intended for processing some options while some downstream
component processes the remaining options. -
MODIFIED: Turn SICStus
splfrscript into a SWI-Prolog app Allows
forswipl splfr [option..] input ...Patch also fixes typing in
sicstus.h, check the return of
PL_put_term() and adds SP_cons_functor(). -
DOC: spellchecked documentation
-
CLEANUP: Clause indexing code. Split into smaller functions,
usebooltype, avoidgoto, add more comments, etc. This is a
preparation before improvements. -
ADDED: foldall/4. Suggested by Boris Vassilev.
-
DOC: clarified (new) destructive assignment complexity.
-
ENHANCED: Use improved sharing in nb_set_dict/3. This patch makes
nb_set_dict/3 call the low-level code for nb_setarg/3, providing
better code reuse. -
ENHANCED: nb_setval/2: avoid quadradic complexity.
-
ENHANCED: nb_setarg/3: avoid copying the old value. If the new value
contains the old, the old value is not copied, making many applications
linear instead of having quadratic cost. -
CLEANUP: Pack context for copy_term/2 and friends into a struct Also
type and declaration cleanup -
ADDED: swipl pack remove: --dir=DIR option
-
ADDED: swipl pack info: --dir=DIR option Give info on packs installed
below DIR -
ADDED:
swipl pack rebuild [--dir=dir] [pack ...] -
ADDED:
swipl pack list --dir=DIRoption to list packs installed
in DIR. -
FIXED: dict_same_keys/2 could overflow the global stack.
-
ADDED: trap/1: aliases for e.g. type_error → type_error(,) So one
does not need to remember the number of arguments. -
FIXED: Preserve
incrementalproperty when creating a saved state. -
BUILD: Add CMake option -DSWIPL_SO_VERSIONS to remove SOVERSION
properties. -
DOC: statistics/2 lost the keys
globallimit,locallimitand
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. -
FIXED: merge_options(+Dict, +List, Merged) Resulted in no matching
rule exception. -
ADDED: library(prolog_colour): track CHR declaration locations
-
FIXED: Handling of home during boot session.
-
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 ofautoloadoption 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).If autoloading is not enabled, the
INDEX.plfile that may appear
in the pack is removed.This patch also adds
swipl pack install --autoload ... -
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
-
ENHANCED: gui tracer support for
Head ==> Bodyrules. -
ENHANCED: Set
non_terminalproperty for clauses forHead ==> Body -
WASM: Include ABI file to make the home search work.
-
FIXED: New home search to actually try the compiled in value.
-
ENHANCED: Verify sanity of the Prolog home directory This patch
validates that the home directory contains a file ABI holding the
ABI information and compares this. On failure, it reports a detailed
report on why Prolog could not find its home directory. -
FIXED: explain/1 to report the same predicate multiple times.
This happens if the predicate is imported into multiple modules. -
ADDED: library(exceptions) This library provides catch/4 and error/2
to define error types and catch based on types rather than unification.
Experimental. -
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.
-
ADDED: Prolog flag
unknown_optionwith values {ignore,warning,error}.
As a result of PIP-105. May change, but unlikely as their was clear
agreement.This flag disables the
isoflag from reporting errors on unknown
options
because this breaks large parts of SWI-Prolog’s libraries. The user
can
now explicitly enable this as well as make the system pring warnings to
investigate possible issues. -
FIXED: Use of undefined options in the toplevel. This makes the
toplevel unusable if the Prolog flagisois set totrue. -
PORT: WASM: Get rid of deprecated allocate, ALLOC_NORMAL and
ALLOC_STACK -
FIXED: WASM: Query.next() to set
donetotrueon last answer.
This must befalsewhen used as iterator. -
ENHANCED: Allow suppressing autoload warnings.
-
TEST: Move test_rwlocks.pl from
librarytothreadtest dir.
This test should not run in the single threaded version. -
FIXED: WASM: for(x of prolog.query(…)) lost last answer
-
FIXED: Handling return values in stack expansion. Introduce
moreboolto correctly distinguish functions returning
true/false/*_OVERFLOW from those raising exceptions and only returning
true/false. -
FIXED: prolog_trace_interception/4: setting up the hook good crash.
-
CLEANUP: Updated library(option). Updated documentation and make
more use of => to capture type issues. merge_options/3 now also
supports dicts. -
ENHANCED: prolog_frame_attribute/3: Better argument validation.
Also various minor cleanup (e.g., morebool). -
FIXED: library(main): superfluous choice point in argv_options/3
-
ADDED: format/2: support
~:DThe colon modifier forDforces
the use of Prolog digit grouping using_. -
FIXED: format/2 handling of Unicode characters Regression from
a49fe8cb40fc15b7325a4e4836304cbe6d9ccef0 -
ADDED: library(prolog_locale) to setup grouped printing of integers.
-
ADDED: write_term/2 options format_float(+Format) and
format_integer(+Format) Using a format seems a more sensible way to
control writing numbers from write_term/2. This patch removes the
previously introduced radix(+Radix) option. If we want this back we
will implement it on top of format_integer(+Format).This patch also contains a lot of small code cleanup and some
optimization
to low-level I/O. -
ADDED: write_term/2: option radix(Radix). Experimental. Under
discussion as PIP-105. The current implementation writes, unlike XSB,
the radix prefix. We either need more options or we should consider
another alternative such as integer_format(+Format)As this patch cleans up a lot of the code regarding numeric output and
most will be needed anyway, it is merged despite the fact that the
radix option may vanish eventually. -
ADDED: format/2 specifier
~hThis provides compatibility to
SICStus. It also makes write/1 output for floats compatible to SICStus
for deciding between fixed point and exponential notation. -
FIXED: ISO compatible parsing for
fy 2 yfand similar cases. -
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. -
ENHANCED: Avoid spurious tracing in push_msg/2.
-
DEBUG: First print the Prolog stack “safe” on a crash. This guarantees
that the stack is printed, including details on the clauses involved
and progress in each clause. Next, the stacks are printed with
arguments. This however may crash if the crash is caused by corrupt
data on the stacks. -
ADDED: Support SSU DCG rules as
Head[, Guard] ==> DCGBody. -
FIXED: libary(prolog_pack): detection of valid download URLs.
-
FIXED: Build order planning. This reverts
1cf4acbe722604857a2627ecc161f80e16f330ed. That patch was broken.
The reported failure probably had some other cause. -
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. -
TEST: rwlocks unit tests for safety and reliability
-
BUILD:
plunitrequiresclibpackage. -
ENHANCED: Implement distinct/1,2 and reduced/1,3 using tries.
This reduces the overhead over 5 times. -
DOC: Update library(shlib) documentation.
-
ENHANCED: Re-implement library(nb_set) using closed hash tables.
This provides better performance at lower memory usage. It comes
with a few modifications:- The term representation is different. This only affects
applications that access the internals. - gen_nb_set/2 enumerates the elements in hash order rather than
in standard order of terms. - Invalid usage now traps nu matching rule errors due to the usage
of => rules. Used to fail or succeed incorrectly.
- The term representation is different. This only affects
-
BUILD: Make sure to clear
DISPLAYwhen running xpce steps
(one more) -
BUILD: Make sure to clear
DISPLAYwhen 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: build order for dependencies in packs. Based on #1326, but
fixing build_order/2 rather than reversing afterwards. -
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.
-
FIXED: Flush pending output on halt/1.
-
FIXED: select_dict/3: deal with attributed variables.
-
CLEANUP: Split
select_dict/3and:</2code. Although there is some
shared functionality, the merge complicates things more than it solves. -
ADDED: library(dicts): mapdict/2,3,4
-
ADDED: ‘$get_dict_kv’/4,6,8
-
ADDED: dict_same_keys/2 Similar to same_functor/2. This is a building
block for a future mapdict/3 predicate. -
FIXED: select_dict/3: possible crash. Could crash if the first
argument dict did not have unbound keys. The new implementation is
also faster, building the new dict opportunistically rather than in
a second scan. -
FIXED: Build failure on systems without sem_timedwait()
-
FIXED: Avoid message when assertion/1 is interrupted by abort
-
ADDED: Prolog flag
halt_grace_time: graceful timeout limit -
CLEANUP: Getting Prolog flags from C
-
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_CFVM instruction. -
FIXED: Possible memory leak in various C API functions using
BUF_MALLOCThese functions could “stack” intermediate results,
overflowing the string stack when used excessively inside a single
foreign predicate or outside calls from Prolog (i.e., using “main”
in foreign code). -
ADDED: PL_get_stream(): SIO_TRYLOCK flag to allow failure if the
stream is locked. -
ADDED: catch/3: support constraints on the
Ball. -
FIXED: Bail out with fatal error if we cannot allocate a foreign
frame for an exception. -
FIXED: Generate a fatal error if there is no local stack emergency
space -
FIXED: Partial unification while searching for a matching catch/3.
As the partial unification is not undone, we may fail to find the
right catch frame. -
FIXED: Memory leak in PL_get_wchars() when using
BUF_MALLOC. -
FIXED: Avoid error message when calling halt/0,1 from
-ggoals.
Reported by Jos de Roo -
MODIFIED: cancel threads using unwind(halt(Status)) Older versions used
'$aborted' -
MODIFIED: PL_halt() return status and new flag. If the flag
PL_HALT_WITH_EXCEPTIONis used, PL_halt() tries to raise an
exception and returnsfalse. If the halt was cancelled, the return
is nowtrue(wasfalse). Otherwise, the function does not return. -
ENHANCED: halt/1: use the unwind(halt(Status)) if possible.
-
CLEANUP: Removed
'$aborted' -
DOC: Status of unwind(…) exceptions.
-
MODIFIED: Re-implement thread_exit/1 based on
unwind(thread_exit(Term)). -
ADDED: Allow unwind(halt(Status)) to halt from an exception.
-
MODIFIED: Introduced unwind(Term) exceptions.
-
ADDED: parse_time/3: support RFC1036 and ASCTIME formats These formats
are old HTTP timestamp formats. -
DOC: Added documentation for PL_for_dict()
-
FIXED: Windows format_time/3 implementation for time stamps > 32 bits.
While the Windowstime_tis 64 bits, it doesn’t seem to localtime()
seems broken handling large time offsets. -
MODIFIED: parse_time/2,3: interpret missing timezone as local time.
This patch fixes parsingYYYY-MM, which used to be a day too early. -
ADDED: date_time_stamp/2: allow leaving components unbound from
the right. -
DOC: #1323 Wrong claim on default for
prefer_rationalsflag. -
ADDED: is_message_queue/1 to test the existence of a message queue.
-
ADDED: with_stopped_threads/2 to run a goal while other threads
are stopped. This is a utility for supporting the debugger. -
MODIFIED: interactor/0,1 to run thread in normal mode.
-
FIXED: pack_publish/2 reporting (claimed failure)
-
ADDED:
swipl pack publish --server=URL ...Allows publishing at
an alternative server. -
ENHANCED: argv_usage/1 to put a newline before the footer section.
-
FIXED: Package manager,
swipl pack publish .Broken detection of
git directory and failure do deal withrequires(prolog:flag(_Value)).to test for existence of a Prolog flag.
-
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.
Unlessinsecure(true)orswipl pack install -k <pack>is given,
possible HTTP links are automatically rewritten to HTTPS. -
FIX: missing dot that one had interesting side effects

-
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=valueBefore, 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|Typeon last option -
PORT: Add gettid() detection
-
PORT: Call gettid via its glibc wrapper if possible
-
ENHANCED: Arithmetic performance. This patch reverts
18d5d539af0807808ba6fee6ec66394aaec589f1 except for clang as it does
cause a significant slowdown on some systems. -
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.
-
APPLE: Add code signing for creating the .dmg image The image is
signed if$CODESIGN_IDis set to the certificate id to be used
withcodesign -s. Unfortunately, this is not the whole story.
As a result, we can no longer load shared object that are not part
of the disk image, which means we cannot use Xquartz, Python or Java. -
MODIFIED: Apple: better support MacOS bundle hierarchy Make the binary
bundle match the MacOS guidelines. In particular- Move the Prolog “home” to Contents/Resources/swipl
- Move modules (*.so files) to Contents/Plugins/swipl
- Remove the need for
swipl.homeby using compiled-in relative
path to find the home. - Added a flag
bundleto make the system aware it is using the
bundle hierarchy. - Moved
foreignpath definitions frominit.plto the
library(shlib), where we now use conditional compilation to get
the paths right for the target platform.
-
FIX: include stdbool
-
DOC: Explain issues and features of the C-API Boolean functions.
-
DOC: Fix bool types for PL_* functions
-
MODIFIED: Return type of most C API functions is now
boolThis
should have very few consequences to applications, even preserving
binary compatibility. The change adopts the upcoming C23 standard
and makes it easier to understand the API. -
CLEANUP: Use
trueandfalsethroughout the core C code. -
COMPAT: Adopt stdbool.h This patch avoids conflicts the type
bool
and its valuestrueandfalseas defined in<stdbool.h>while
these will be promoted to C keywords in the upcoming C23 standard. -
FIXED: Race conditions in thread_signal/2 and friends.
-
TEST: Avoid interference between thread_wait tests. Tests send
concurrent signals using a detached thread that could still be running,
affecting subsequent tests. -
TEST: Test for getting an I/O error on a broken pipe may succeed.
Turns out the pipe size on Asahi/Fedoare 40 is 256K. Now writing a
max of 1.2Mb rather than 100K. -
ADDED: Prolog flag
dir_sepComplementspath_sepandpath_max
to get properties on the file naming conventions and limits. -
FIXED: #1311 Possible stack corruption in PL_unify_text() Cause of this
crash is a failure to verify return from PL_new_term_ref(). There were
more issues with the code though. Lack of local space could corrupt
a string living on the stack. We can discard the term reference. -
INSTALL: modify cmake ilink to install symlink in CMAKE_INSTALL_PREFIX
This ensures that when installing package selections to different
install prefixes, the links end up in the right location. This is
used by package maintainers to generate multiple packages from the
same build. -
FIXED:
swipl-win.exe: Run/New thread menu -
SNAP: added libxinerama1
-
DEPRECATED: file search from a source file relative to CWD Searching
relative to CWD when loading a source file was supported up to
version 9.3.8. 9.3.9 disabled this, but the implications appear
too severe. This patch re-enables the old behaviour with a warning.
The Prolog flagsource_search_working_directorycan be set to
falseto disable searching the working directory. -
FIXED: possibly early GC of arguments for call_cleanup/2 Also affects
'$bags':cleanup_bag/2. The early GC can happen if a signal arrives
when these predicates are being called and the signal handler calls GC. -
FIXED: use_module(M, [Pred as Alias]) for meta-predicates
-
DOC: #1303 EBNF description of sequence//3 and sequence//5.
-
FIXED: print_term/2 to add a space behind : when printing dicts
vertically. This avoids syntax error due to symbol glueing and
looks prettier. -
FIXED: Handle “apps” from packs
-
FIXED: Handling of indirect data types in delimited continuations.
-
BUILD: Added CMake options SWIPL_CC and SWIPL_CXX This selects the
defaults for thec_ccandc_cxxflags. Distributions should
normally set these to the common C and C++ compiler of the platform.
Local builds typically leave them default, setting these flags to
the same as used to build SWI-Prolog. -
FIXED: #1300 Modify prefix block operator to plain term if there is
no argument. -
TEST: make string_upper/2 test succeed if
LANG=C -
FIXED:
qlfapp to not import the compiled library intouser.
This leads to conflicts. -
MODIFIED: drop library(checkselect) and library(checklast). These
modules help debugging reordered arguments for select/3 and last/2
from old non-(de-facto)-standard to common practice long ago. -
DOC: Improved docs for prolog_alert_signal/2.
-
FIXED:
swipl pack install .to install using a symlink. -
MODIFIED: absolute_file_name/3 relative to source Up to this patch,
predicates that used absolute_file_name/3 (including load_files/2,
use_module/1, etc) interpreted plain non-absolute names relative
to the source and on failure, relative to the working directory.
As of this patch we only consider files relative to the source. -
PORT: Another iteration trying to tame MacOS.
-
PORT: Deal with wcsxfrm() nor immediately returning required size
-
FIXED: Type for PL_get_intptr_ex(). Breaks on Win32
-
CLEANUP: Make all code clean for clang-18 -fsanitize=undefined
-
ENHANCED: Added ‘c_cxx’ flag and env SWIPL_CXX for packs
-
FIXED: #1292: possible stack corruption in exception handling.
Probably can only be triggered ifSECURE_GCis enabled which wipes
the unused parts of the stacks in trimStacks(). -
SANDBOX: Allow for term_singletons/2
-
FIXED: #1292 Possible stack corruption after exception.
-
FIXED: unification of zero-arity compounds
-
FIXED: Possible assertion error due to unify refactoring.
-
FIXED: thread_signal/2: may raise exception and succeed.
-
CLEANUP: Refactor unify() Split into a function that deals with
everything except compounds and one that does the whole thing.
This makes the function a lot easier to understand. This rewrite
has no measurable performance implication and should make it a bit
easier to optimize it further. -
ENHANCED: Simplify H_VAR
-
ENHANCED: Low-level unification to constants Speeds up unification
from foreign code to atoms and small integers. -
ENHANCED: make/0: no longer try to update the indices of system
libraries. These libraries are properly maintained by the build and
installation process while the time stamps are often wrong after the
installation process. -
FIXED: Do not wait longer than 30 seconds after a crash. This deals
with situations where error reporting and cleanup hangs due to
a deadlock.Normally, after a fatal crash report and if the system is connected to
a terminal, it waits for user input such that the user can attach a
debugger to analyse the state. We now wait at max 30 seconds to avoid
indefinite waiting if there is no human in the loop after all. -
DOC: time/1: we do support per thread CPU time on MacOS.
-
FIXED: Properly export
environment_framein foreign predicate redo.
The incorrect setting causes problems in the new consistency checks
forterm_tas well as confusing backtraces. -
PORT: Possibly collapsing VM instructions on 64 bit Visible using
gcc 14 on arm64 (Asahi Linux) -
WASM:
SWIPL()initialization changed in Emscripten Where
SWIPL(Module)used to return a Promise that would complete
returning the sameModule, it now returns a new module object
that is independent from the agument passed. -
ADDED: PL_free_term_ref() In addition, this patch distinguishes
term_t originating from predicate arguments (which cannot be freed
and to which we cannot “write” (PL_put_*())) from user allocated
term references. -
ADDED: Validate arguments to the C API PL_() functions. This commit
validates term_t, atom_t and functor_t parameters to the PL_()
functions that terminates the process if it finds invalid data.These tests may be disabled using
cmake -DVALIDATE_API=OFF. The
validation has very little impact on the raw Prolog performance as
most internal use of the C api bypass the public API function. It
may have measurable impact on packages that use the C interface in
a very time critical way. -
ADDED: PL_api_error() to signal invalid use of the API
-
FIXED: =@=/2: attributed variables must be handled as normal variables.
-
FIXED: Determine file exports under conditional conditional
compilation. -
FIXED: Process multiple predicates from export/1 directives.
To determine file exports, we considered only a single predicate
for export/1. -
FIXED: Stops repeated crash reports While recursive crashes where
dedected, no appropriate action was taken, leading to endless error
reports. -
FIXED: ‘$open_xterm’/5: raise exeption if we cannot run xterm.
Used to hang, waiting for output from the xterm process. -
MODIFIED: Renamed
open_xterm/5as private'$open_xterm'/5.
open_xterm/5 was not documented. This patch removes the implementation
completely if the OS lacks the required POSIX pty support and renames
the predicate to'$open_xterm'/5if xterm consoles can be supported.
In addition, this patch adds conditional compilation to console support
inlibrary(threadutil)if neither the Windows support nor the xterm
support can be provided. -
FIXED: Build dependency of documentation on
utf8procpackage -
ENHANCED: call_in_thread/2 error handling.
-
TEST: test_interrupt: skip test if alert signals are required but
they are disabled. -
DOC: fix typo and improve cmake instructions
-
FIXED: thread_create/3: handling of
c_stackoption. While the
size was documented to be in K-bytes, it actually is in bytes.
Updated the docs for that. Allow for c_stack(0) to use the mininum. -
ADDED: thread_get_message/3 and thread_send_message/3:
signals(BoolOrTime) option. -
MODIFIED: Change default for the Prolog flag
toplevel_print_anon.
This flag is now by defaultfalse, hiding toplevel variables that
start with an underscore. -
FIXED: Generating variable names may conflict with user variables.
-
FIXED: Links to FAQ pages.
-
FIXED: Trie handling of floats on 32-bit hardware
-
CMAKE: Fixed
-DCMAKE_BUILD_TYPE=SanitizeDefaults to
-fsanitize=address. -
FIXED: Enabled pre-check for left-shift of large integers This both
avoids possible GMP exceptions and allocating huge amounts of memory. -
ENHANCED: Clarify shifting negative integers This patch also avoids
relying on undefined C behavior. -
FIXED: shift (<< and >>) of zero.
-
FIXED: Handle source files with epoch time stamp Flatpak seems to
set the modification time of all times in the sandbox to the epoch
(0). This was used as a special value to indicate the source file
was not a file. We now keep a seperate flag and use the integer
0 to indicate something is not a source file in the Prolog world.
It is probably better to use something else, but this avoids type
issues in possibly unknown dependent code. -
ENHANCED: Crash reports Avoid recursive crash reports and
only print the GC and shift stacks if the environment variable
SWIPL_DEBUG_GC_STACKis set. -
DOC: Add
--sigalert=NUMtoswipl --help. -
FIXED: trie_gen_compiled/3: deal with small integer value
-
FIXED: trie_gen_compiled/2,3: add indirect data (big integers,
strings, rational) -
FIXED: trie_gen_compiles/2,3: possible stack corruption
-
FIXED: #1277 crash in trie_gen_compiled/3.
-
CLEANUP: Avoid to undefined sanitizer warnings.
-
CLEANUP: Avoid UBSAN error Test for arity > 0
-
CLEANUP: workaround for an UBSAN error UBSAN complained about a left
shift of -1 -
CLEANUP: avoid UBSAN error in mkvmi.c The error is raised because we
have e5 -= 0 for e5 == NULLelse-branch of if ( !e4 || (is_vmh && !e5) )
<=> e4 && !(is_vmh && !e5)
<=> e4 && (!is_vmh || e5)Consequence is e4-- (which is fine) and e5 -= is_vmh which is either
a noop* for is_vmh == 0 or fine for is_vmh != 0 && e5 != NULL.The noop case raises the error if e5 == NULL. * CLEANUP: Use
unsigned intfor variable table bitmap.
This avoids an officially undefined shift in C. -
FIXED: Possibly undefined too large shift
-
FIXED: bf_set_si for -INT_MIN avoid undefined behavior raised by UBSAN
-
PORT: !1269 Deal with the type
z_crc_tused by minizip zlib This
works around a type conflict over get_crc_table(). Some headers define
this as returningz_crc_t*without defining this type while others
(Fedora 40) defines the function asuint32_t*and definesz_crc_t.
This patch makes CMake check for thez_crc_ttype and, if defined,
use this definition. -
ADDED: qsave_program/2:
--foreign=copyto copy DLLs for Windows. -
ADDED: library(www_browser): support host relative links.
-
ENHANCED: Added toplevel options +, - to modify max_depth This option
also changes ‘w’ to merely drop portrayed(true) andpto add it. -
DOC: write_term/2: document interaction between portrayed and
numbervars -
FIXED: Do not name binding variables if the answer options to not
handle'$VAR'(N) -
RELEASE: update-macports: verify we can download the source file This
avoids forgetting to update the source file as well as the CDN delay. -
DEBUG: Save C backtraces at GC and SHIFT start
-
DEBUG: Improve crash context printing Make all fatal errors
(sysError(), assertion failure and fatal signal) call new function
printCrashContext() that prints more extensive information about
the crash -
FIXED: notrace/1 could raise a representation_error(size_t)
exception This exception is raised if the trace skip level =
SKIP_REDO_IN_SKIP. -
FIXED: call/1 (I_USERVALL0) GC issue call/1 did not correctly make
the goal available to GC if stack expansion is required. -
MODIFIED: term_string/2,3, atom_to_term/2 and read_term_from_atom/3
now raise exception on empty input These predicates used to
produce the atomend_of_file. Now they raise the exception
syntax_error(end_of_string). -
PORT: Fix case conversion for Unicode characters on Windows.
-
TEST: Disable case test for u00ff on Windows.
towupper(0xff)
returns 0x9f on Windows. -
FIXED: prolog_walk_code/1: no matching rule from goals reached from
a :- initialization. -
BUILD: Extended
scripts/configureto includetermux -
FIXED: Stack shifter Foreign frames may hold references to the local
stack in addition to global stack references. -
PORT: Include Ubuntu 24.04 (Noble Nombat) in PPA builds
-
PORT: Use -funwind-tables on ARM systems with glibc, also for clang
-
CLEANUP: Remove various unused macros and join macros that are now the
same Also document the current state of the Prolog data representation. -
ENHANCED: Removed accessing Prolog data using relative addresses This
patch removes accessing Prolog data using relative addresses to the
stack bases. This was long ago introduced to facilitating access to
all memory on 32-bit systems using multiple threads.Now all prolog data is 64 bits, also on 32-bit systems and hence we can
access all memory using a tagged pointer. -
PORT: Deal with Android
android-execinfolibrary. -
FIXED: generation of swipl.pc pkg-config file Now uses LIBSWIPL_DIR to
get the correct -L flag when the system is installed as global library. -
FIXED: Reconsult when the loaded code sets the
traceflag on
a predicate. This was due to a conflict over the predicate flags.
As theflagsfield was widened, we can avoid these problems. -
PORT: #1265 Deal with static_assert() after label
-
FIXED: WASM: fix fid arg position in this.query call in
__call_yieldable -
FIXED: #1262 upcase_atom/2 and friends on ISO → wide If input is
ISO-Latin-1 and the converted character requires wide characters
the system trapped an assertion error. Now correctly converts to
wide characters. -
FIXED: Clang handling of
max_integer_sizeClang cannot handle
setjmp()/longjmp in PL_next_solution(), but it can in the simple
evalExpression() function. This does not have measurable impact on
performance, so we enabled this as default. This fixes limiting the
integer size for WASM and Clang builds on Linux. This problem did
not surface on the MacOS version. -
FIXED: Compute new stack size when we reach the limit. Suffered from
integer overflow on 32-bit machines and got several edge cases wrong. -
CLEANUP: Allow for gcc
-WconversionWith 64 bit word it is easy
to get conversion errors. Compiling with-Wconversionhelps
tracking these. -
FIXED: comparison of MPZ and MPQ with 64 bit integers if long is
4 bytes -
FIXED: Push string when stack > 128Mb on 32-bit hardware
-
DEBUG: Added
scripts/gdbinitShare gdb script with useful debugging
commands. [no ci] -
FIXED: Normalize LibBF numbers created from 64 bit integers on VS2022
VS2022 does not support 128-bit integers and therefore we must use
32-bit “limbs” -
PORT: VS2022: void* arithmetic, wrong order for SIZEOF_WORD
-
FIXED: forAtomsInClause() handling of B_*_?C instructions These called
PL_unregister_atom() on the atom, rather than the argument function. -
FIXED: DEBUG(CHK_SECURE) clean of memory (wrong size)
-
FIXED: Type handling in copy_term/2 and friends.
-
ADDED: PL_atom_index() and PL_atom_from_index() Turn atoms into small
objects that can be combined with other pointer sized objects with
space for a tag. -
BUILD: Respect
$CFLAGSand$CXXFLAGSin a CMake build types -
CLEANUP: Get rid two definitions for trail entries
-
CLEANUP: Prepare hash tables for the M64 data model This huge commit
changes pl-table.c to be word → word rather than void* → void* as
we plan to make words 64 bit, also on 32 bit systems. This patch also
introduces 4 table types, TableWW, TableWP, TablePW and TablePP. These
tables map between words and pointers in all 4 possible ways.This patch also involves small cleanups and fixes encountered while
reading the code and use FOR_TABLE() everywhere, removing the old
for_table() macro. -
FIXED: prototype for get_string_text()
-
FIXED: make markAtomsOnGlobalStack() safe This could crash on all
platforms. It is notably dangerous using the experimentalO_M64
model. -
TEST: Disable
max_integer_sizetest for emscripten Doesn’t handle
longjmp() correctly in release mode. Works in debug mode, but that
is not useful. -
FIXED: write clauses holding > 0xffff Unicode chars in strings to
QLF on Windows. -
FIXED: forAtomsInClause() handling of B_*_?C instructions These called
PL_unregister_atom() on the atom, rather than the argument function. -
FIXED: Temp buffer handling when stack is close to top of address range
-
DEBUG: Fixed chk_secure report on invalid term due to
PushPtr()/PopPtr() This construct to turn raw pointers into term
references to preserve them during GC can create referenc pointers
to the local stack. Another possible fix is to turn such references
into direct term references. That avoids local stack references,
but as this is only used around GC and GC itself uses local stack
reference pointers, there is little to gain. -
FIXED: unifiable/3 internal consistency Unifiable did not correctly
handle stack resizing. This is detected when running using chk_secure.
Not sure whether it can also cause real issues, but the new code is
simpler and safe. -
FIXED: powm/3 function: wrong type check on 3rd argument.
-
FIXED: Declaration of term stack for evaluating expressions
-
FIXED: Write bignums when inside arithmetic. Should normally not be
needed, but debugging is much easier if we can. -
PORT: Avoid spurious warnings from spoiling pthread_setname_np()
test This used to use-Werrorto ensure a compiler failure if the
number of arguments do not match the prototype, but this is already
enforced in todays compilers. -
FIXED: use_module/2 with except and reexport/2 with except to
print warning These predicates failed if the source did not export
the excluded predicate. Now it prints a warning and ignores the
non-existent predicate. -
DEPRECATED: Sseek(), Stell()
-
FIXED: Another fileno issue.
-
ADDED: library(sandbox): allow for
Dict.get(key,Default) -
FIXED: Stream initialization for
swipl-win.exeWas broken since
recent changes keeping track offileno. Reported by Jan Burse. -
ADDED: PL_system_error() This patch also adds documetation for
PL_fatal_error(). -
ADDED: Prolog flag
max_integer_sizeThis flag limits the allocations
on behalve of bignum and rational number processing, DoS attacks
by exhausting memory using huge numbers as well as poor interrupt
handling due to lack of signal handling inside the bignum libraries. -
ENHANCED: Use temprary malloc API for bignum arithemetic
-
ENHANCED: Keep small bignums on the stack
-
CLEANUP: Simplify arithmetic context This is no longer nested and can
(thus) be simplified. -
FIXED: format/3: Ensure balanced AR_BEGIN()/AR_END() On errors it was
possible that AR_END() was not called. This may lead to memory leaking
and errornous operation when linked in a process that also uses gmp. -
ENHANCED: Improve memory reuse after writing huge integers.
-
FIXED: #1254 crash in PL_get_mpq()
-
FIXED: tell/1: properly manage standard stream references.
-
FIXED: Stream reference counting and reset when closing a standard
stream. -
FIXED: Memory leak in string_bytes/3.
-
FIXED: Properly close temporary redirect to a string
tellString()/toldString() could fail to reclaim the temporary stream
object. -
ENHANCED: Use a segmented stack for dealing with findall/3.
This avoids memory fragmentatation when findall/3 is deeply nested.
Although that is a rare occasion, deeply nested findall/3 leads to
poor memory reuse. As activating and deactivating is stacked anyway,
a segstack avoids the fragmentation. -
ADDED: help(Name/Arity): handle user predicates.
-
FIXED: xref_source/2: keep processing PlDoc commants after including
a file. -
ADDED: help/1: give help on a specific user predicate using Module:PI.
-
ENHANCED: help/1: filter user predicates on the module class.
This use to filter on whether they are documented in the manual,
making it impossible to show documentation for loaded predicates that
conflict with something defined in the manual. -
FIXED: Thread I/O streams may be invalid If a thread is created
using thread_create/3 with the inherit_from(Thread) option or using
PL_thread_attach_engine() (which inherits frommain), we may copy
current_inputorcurrent_outputfrom a temporary redirect.The reference counting when copying the streams was broken, possibly
causing memory corruption. This is improved, but not 100% safe.
However,
we now set thecurrent_inputandcurrent_outputtouser_inputand
user_output, which typically never change. -
FIXED: help/1 to deal with help on public predicates in included files.
help/1 finds the predicate and, if necessary, reloads the file in
which it is defined to get the documentation. If the predicate is
defined in an include file it should reload the main file to get the
module context right. -
ENHANCED: trace/1,2 and friends. - Code cleanup - Support conditional
trace usingtrace(Head, Port(Condition)) -
FIXED: Ensure correct setting file handle for std streams. This was
broken after adding thefilenofield to the IOSTREAM struct. -
MODIFIED: Discontinue thread_exit/1 on Windows The implementation was
broken for some time. The reason is not entirely clear, but possibly
related to issues in pthread-win32. As the predicate is unsafe and
deprecated anyway, it has now been removed from the Windows version. -
FIXED: pack metadata checking for
prolog:Featurerequirements. -
FIXED: make stream_property(S, file_no(N)) safe. This used to be
subject to race conditions between the enumerating thread and threads
that close the underlying stream. We now copy the file handle as it
was found when creating the stream to the main stream structure. -
CLARIFIED: PL_free_blob() can be called multiple times. This patch
changes subsequent calls to a no-op that returnsFALSEand document
this is valid. After comment by Peter Ludemann. -
CLEANUP: Do not call blob
release()on GC or cleanup after
PL_free_blob() -
ENHANCED: Answer/query expansion. Toplevel variable ($Var) handing
is now always handled, regardless of the user:expand_query/4 or
user:expand_answer/2 hooks. The user:expand_answer/2 hook is
superseded by prolog:expand_answer/3. -
DOC: Deprecate format/3 with a non-list 3th argument.
-
FIXED: Setting the C-stack limit to values not a multiple of the page
size Causes problems on some platforms. -
DOC: Use ASCII LaTeX ``word’’
-
FIXED: Preserve atributes set on foreign functions for saved states.
This bug causes http_stream:stream_range_open/3 not be to transparent
when reloaded from a saved state. This in turn raises an error with
http_open/3 on HTTPS and chunked streams. -
ENHANCED: coverage/2: analyze and annotate included files.
The coverage analyzer now deals with files that are included. Files
that are included multiple times in different modules get their
numbers aggregated. -
FIXED: Crash when using ‘$cov_data’/3 if there is no coverage data.
Package bench
- ENHANCED: Benchmark comparison suite. Be more relaxed on missing
systems and allow adding new systems without changing the sources.
See README.md
Package debian
-
RELEASE: Merge development version
-
PPA: Updated to support xpce based GUI This deletes the Qt console
(swi-prolog-win package) and replaces the X11 dependencies with
SDL+cairo+pango. -
PORT: Added qtbase5-dev as alternative to support teh Qt compole for
focal and bionic -
ADDED: Debian/PPA package
swi-prolog-winThis package provides
the Qt console. -
ADDED: dependency on Python itself. Although a dependency on
libpython3-dev is good enough, cmake cannot find the Python conponents
without Python. -
ADDED: Python3-dev dependency
-
PORT: use PGO for the Ubuntu PPA build.
-
INSTALL: Use -DJNIDIR=$(JNIDIR), leaving installation of libjpl.so
to CMake.
Package archive
- CLEANUP: Avoid undefined warnings for
gcc -O3
Package bdb
-
PORT: Honour
LIBBDB_ROOT_DIRcmake variable -
CLEANUP: Avoid undefined warnings for
gcc -O3
Package chr
-
COMPAT: Use new prolog:message_action/2
-
MODIFIED: Only perform CHR expansion when loaded in the context.
Restrict CHR term expansion to modules into which library(chr) has
been imported.
Package clib
-
ADDED: process_create/3: specify program as prolog(Tool) This allows
Prolog running one of its tools, with the guarantee that we use the
tools from the same version. This provides a hook prolog:prolog_tool/4
that allows embedded systems to redefine how the Prolog tools should
be executed. -
FIXED: Make library(uuid) work properly if autoloading is disabled.
-
DOC: Document some types for lirary(uri).
-
FIXED: crypt/2 on Windows using bsd-crypt.c: possible memory
corruption. -
FIXED:
urn-schema URIs can have a query and fragment field. -
MODIFIED: library(uri) to raise more exceptions and support URNs.
-
FIXED: directory_member/3: respect file_type(regular) option This
allows ‘directory_member/3’ to generate regular (non-directory)
files with option ‘file_type(regular)’, in accordance with how
‘absolute_file_name/3’ treats this option. -
CLEANUP: Avoid undefined warnings for
gcc -O3 -
COMPAT: Use new PL_dispatch() API.
-
ENHANCED: uri_file_name/2, mode (+,-): Allow for file://host/…
If host is the same as gethostname/1 reports. -
PORT: Provide
SWIPL_WINDOWS_NATIVE_ACCESSfor 9.3.19 -
TEST: Fixed broken test for Prolog streams.
-
PORT: Support inet6 on NetBSD
-
COMPAT: Support both old and new abort exception
Package cpp
-
FIXED: compiler warnings for print formats
-
PORT: Deal with new PL_prompt_string() and PL_prompt_next() API.
-
COMPAT: Use new PL_dispatch() API.
-
FIX: pointer to local stack
-
ENHANCED: improved C++ exception hierarchy Changed the exceptions
thrown by PlEngine and PlFrame so that they’re safe to use outside the
try…catch context; and provided a way to make all other exceptions
safe outside a Prolog frame.
Package http
-
TEST: Updated for modified json_read_dict/2 using
#as anonymous tag. -
COMPAT: Use new prolog:message_action/2
-
PACKAGE: Remove JSON files from this package The JSON support is
moved into a new packagejson -
ADDED: Support
HttpOnlyandSecurecookie properties
in http_session.pl http_set_session_options/1 now supports the
http_only(true) and secure(true) options, adding these properties to
the session cookie. Both default to false for compatibility reasons.Suggested by Mohammed Almutawah to mitigate XSS scripting in SWISH.
-
FIXED: Possible uninitialized variable (in error case)
-
SANDBOX: Declare Quasi Quotations for json, html and javascript
as safe. -
ADDED: json quasiquotation syntax This allows for embedding JSON
documents represented as a Prolog dict using e.g.?- X = 10, D = {|json(X)||{"x": X}|} D = _{x:10}. -
ENHANCED: Use url(URL) for HTTP startup message.
-
FIXED: http_time_stamp/2 in mode (-,_+).
-
FIXED: json_skip_ws/3: Pass exception.
-
FIXED: http_open/3: when applying a transfer filter, do not close
the output Instead, create a new stream pair from the transfer filter
stream and the output stream. -
SECURITY: Make http handlers read remaining request data for Keep-alive
When using a Keep-alive connection the core HTTP infrastructure now
ensures that, if the request has a request body (Content-length)
exactly this number of bytes is read from the input before returning
the stream to the Keep-alive mechanism.This prevents crafted content to generate additional HTTP requests.
-
FIXED: http_open/3: only catch error(Formal, Context).
-
FIXED: Multipart reader to update stream position data of
parent stream. This is a tentative fix, lacking a test case.
It still looses the line count/pos. That could be fixed by calling
S__fupdatefilepos_getc() on all processed data.See
Multipart_open does not advance the stream's pointer - #3 by matt.lilley -
PORT: Avoid partial lists in DCG rules (ISO compliance)
-
ENHANCED: Cleaner handling of HTML elements without content.
-
REUSE: Separate declarations in library(http/html_write) into
library(http/html_decl) -
ADDED: term//2 from library(http/term_html): emit(:Closure) option.
-
FIXED: term//1: possible exception on compound_name_arity/3.
This happened when spacing around operators need to be computed and
the left or right hand of the operator is a blob. -
FIXED: Running out of file descriptors if device for log files
is full. This patch is a serious cleanup of error handling in the
HTTP log library. -
ADDED: Provide cross-referencing hooks for
:- html_meta(+Decls) -
FIXED: #168 http_daemon/0,1: exit with status 0 The startup was
translating all exceptions into halt(1). That is wrong after halt
is implemented as throw(unwind(halt)). -
FIXED: library(http/jquery): support Qlf compilation ensure_jquery/1
cannot use conditional compilation. We must use a runtime conditional
instead. -
CLEANUP: Avoid demo dependency on xpce.
-
FIXED: term//2: make operators a trigger.
-
FIXED: term//2: portray(true) implies numbervars(true).
-
ENHANCED: Ensure the HTTP worker disables tracing before starting
the next request. This avoids what seems spurious activation of the
debugger because the user finished debugging some request and the
debugger is started immediately on a possibly unrelated request. -
FIXED: Handle HTML error replies that contain non-ASCII. HTML error
replies are now sent using UTF-8 encoding. This patch also includes
more careful computation of the length of replies, resulting in
exceptions rather than claiming the wrong length on invalid input. -
DOC: spellchecked documentation
Package libedit
-
PORT: Clean compilation on MSVC
-
PORT: Allow using bundled libedit This is the default. The system
version can be selected usingcmake -DSYSTEM_LIBEDIT=ON.
This should simplify building -
ADDED: el_set/2 to set the word characters This replies on el_wset()
usingEL_WORDCHARSthat is provided in some recent copies of
libedit. When available, it is used to set the word chars to only
"_"(in addition to iswalnum()). -
FIXED: Avoid full refresh in Epilog windows on each action. Failed to
reset the refresh request. Refreshing causes issues with wrapped
lines. -
FIXED: Synchronise Epilog window size changes with libedit.
-
FIXED: Signal handling Detecting this is the main stdin we are reading
from failed since we use dup() on the file handles to avoid closing
them. We now add this fact to the context, initiated before the dup(). -
UPDATED: prolog:history/2 to support new core functionality.
-
ADDED: Extended el_history/2 with more actions. This allows for
querying individual events, setting the notion of current, and
searching the history. -
ENHANCED: Read old
swipl-win.exehistory data in current version. -
MODIFIED: el_read_history/2 to raise an error if the history file
is invalid. -
PORT: Compile if H_SAVE_FP is lacking
-
ADDED: el_history/2:
getsize(-Size)support. -
ENHANCED: Support thread signal processing while reading from
Epilog. This is required to prevent the Debug menu of Epilog
from deadlocking the application. It also allows e.g., timers to
function in Epilog consoles. Note that signal processing already
worked in non-Windows environments. -
ADDED: el_version/1 to get the version of the editline library used.
-
CLEANUP: Avoid undefined warnings for
gcc -O3 -
ADDED: Support winlibedit hook to get the terminal size. This allows
fetching the terminal size for Epilog on Windows. -
PORT: Make el_history_events/2 also work on the fileno property
on Windows. -
ENHANCED: Use autoload_call/1 to avoid undefined errors.
-
FIXED: Read multi-byte characters on non-Windows.
-
ADDED: Support Windows pipe handles for I/O This is work in progress to
support Epilog on Windows. It consists of changes to our winlibedit
port of libedit. These changes do not use Console mode setting and
read using ReadFile() rather than ReadConsoleInput(). -
PORT: Support Windows
-
COMPAT: Update for new signature for PL_prompt_string() and
PL_prompt_next() -
COMPAT: Use new PL_dispatch() API.
-
ENHANCED: el_wrap/4 to raise an error if the stream is already wrapped.
-
FIXED: Avoid memory leak on
FILEstructs created byfdopen() -
FIXED: el_history/2: handling of setsize() was undefined.
-
ADDED: Allow using the (integer) fd to specify the editline instance
This allows accessing the history of other threads. -
ENHANCED: Sync the positions of the terminal streams.
-
ADDED: ^Y to paste as quoted.
-
FIXED: Avoid deadlock when trying to save history from a background
thread.
Package ltx2htm
- ADDED:
\keyitem{Key}{Value}for describing keys of a dict
Package mqi
-
PORT: Search for python3 executable to try python3 and then python.
Modern systems are beginning to install onlypython, which is
Python3.There isn’t any support for python2 anymore, since 2020, and the
windows installer does not install a python3.exe.
Package odbc
-
CLEANUP: Avoid undefined warnings for
gcc -O3Also replaces local
error functions with calls toPL_*_error() -
PORT: Incude
windows.h, needed for SWI-Prolog 9.3.19 and up This
is required asSWI-Stream.hno longer includes the windows header.
Package pengines
-
ADDED: add HTTP path alias
pengine. This allows for modifying the
location on a pengine server. -
COMPAT: Support both old and new abort exception
Package pldoc
-
FIXED: Emit LaTeX for markdown code text that holds
%in tables. -
FIXED: Load when threads are disabled.
-
COMPAT: Use new prolog:message_action/2
-
FIXED: Undefined call to start_emacs/0
-
ADDED: PlDoc to LaTeX converter: file_synopsis(Text) option Allows for
overwriting the default synopsis. Used to document some not-installed
libraries. -
ADDED: Support “=” mode. This is a proposal in the PIP meetings to
deal with “Output” arguments. -
ADDED: Allow copying the predicate name or mode from the manual.
-
ENHANCED: Allow copy of the synopsis text
:- use_module(...).
Also improve (can be autoloaded) message.
Package plunit
- COMPAT: Use new prolog:message_action/2
Package semweb
-
CLEANUP: Avoid undefined warnings for
gcc -O3 -
FIXED: sparql_query/3 using option endpoint(URL) This raised an
exception in select_option/3 due to an insufficiently instantiated
argument. -
ASAN: Avoid runtime errors. All “fixed” issues are benign
-
DOC: spellchecked documentation
Package sgml
- CLEANUP: Avoid undefined warnings for
gcc -O3
Package ssl
- CLEANUP: Avoid undefined warnings for
gcc -O3
Package swipy
-
DOC: #16 Document usage on MacOS using SWI-Prolog.app.
-
TEST: Added tests for
pytestof the Python module. -
FIXED: Import
janus_swiexplicitly asjanusThis is needed when
Prolog is embedded into Python.
Package table
- CLEANUP: Avoid undefined warnings for
gcc -O3
Package tipc
-
CLEANUP: Avoid undefined warnings for
gcc -O3 -
COMPAT: Support both old and new abort exception
Package utf8proc
- PORT: Compile using MSVC
Package xpce
-
ADDED: PceEmacs C-mode: declaration of keywords.
-
ADDED:
syntax_table->keywordsto register known keywords for
a syntax -
MODIFIED: Generalised
text_buffer->for_all_commentsReplaced by
text_buffer->for_all_syntax, which qualifies additional syntax
types. Currently only quoted material. -
ADDED: Support for multi-character line comment lead-in (e.g. //
comment) -
MODIFIED:
syntax_table->prolog: boolreplaced by
syntax_table->language -
ADDED: `text_buffer<-lsp_offset(line,character) → offset Translate
position in LSP notation to an offset. -
ADDED:
text_buffer<-lsp_columnProduces thecharacterfield
of an LSP range start/end. This is the position inside the line in
UTF-16 code points. -
ENHANCED:
editor->align_lineto avoid modifications if alignment
is already satisfied. -
FIXED: text_buffer->insert not to set modified if we insert 0 times.
-
ADDED: PceEmacs: M-x idle-timeout seconds Sets the time we wait before
re-running semantic highlighting. -
ADDED: PceEmacs: hooks to allow syncing to an LSP server
-
ADDED: Class
text_bufferto allow forwarding changes incrementally
This implements methods to generate LSP (Language Server Protocol)
compatible incremental change events. The basic method is
text_buffer<-lsp_changes, which returns a chain oftext_change
objects that provide the changed range and replacement text. -
PORT: Fixed emulation of C11 atomic_compare_exchange_strong()
-
PORT: Compilation in MSVC This is only a partial port to MSVC.
It does fix several issues though. -
FIXED: If there is no gui, do not setup xpce for lazy loading.
-
PORT: Hack around MacOS oddities to get
SIGWINCH -
PORT: Make compilation succeed if SIGWINCH is not defined.
-
FIXED: Message handling. Broke emacs/0. Reported by @mike.elston
-
FIXED:
swipl-winto handle interrupt in the console that started
swipl-win. What should we do if there is no terminal, i.e., if
swipl-win is started as app directly from the GUI? It should not
get interrupt signals in that case, but what if it gets one anyway? -
ADDED: Epilog: use pthread_kill() to update client thread of window
size change. This fixes resizing Epilog windows cooperation with
libedit. To work correctly, the libedit package must be updated
as well. -
ENHANCED: Detection of when to load library(pce).
-
ADDED: Epilog: Shift-Ctrl-M to inject make/0.
-
MODIFIED: Removed all PostScript related support This was
non-functional anyway. The Cairo graphics is used to implement
graphical->pdffor generating PDF. This functionality is still
rather minimal. It will be extended in the future. -
FIXED: Colour for class
int_itemup/down arrows. And some code
cleanup. -
ENHANCED: class
font_itemto reflect current possibilities better. -
ENHANCED: Updated PceDraw - Use native file dialog for save, load
and export - Remove windows metafile support - Replace Postscript
output with PDF - Disable printing. Not supported by SDL and not
very important. -
DOC: Revive the XPCE User Guide This commit re-adds the
Makefile,
updates the Prolog helpers and minimal updates to reflect some aspects
of XPCE version 7 in the documentation.Eventually the build process must be migrated to CMake, most images
should be regenerated and the text reviewed and updated where needed. -
ADDED:
graphical->pdfto write PDF to a file -
FIXED: Always enable color on the Epilog consoles.
-
ENHANCED: Start Epilog file dialog in working directory.
-
ENHANCED: Make Quit Prolog the default button for confirming close
with open windows. -
ADDED: Allow inspecting the GUI hierarchy from Epilog.
-
ADDED: pce_show_visual_tool/0 to library(man/v_visual). This allows
showing the GUI inspector stand-alone. -
FIXED: Block other Prolog threads while a window is being redrawn.
Modifying graphics while a redraw is in progress may result in
inconsistent graphics or crashes. -
FIXED: Thread specific module and context object. These two global
variables are used in the xpce interface predicates to keep track of
the context. As xpce allows access from multiple threads they must
be thread specific. -
FIXED: Exclude files that require threads for single threaded version.
-
FIXED: Ensure Prolog exceptions are propagated through xpce.
-
FIXED: Epilog: save history in all scenarios This covers closing the
main window using the menu, window close button, Ctrl-D, Shift-Ctrl-W. -
ENHANCED: Epilog: use native file dialog
-
ADDED:
frame<-open_fileandframe<-save_file: use OS dialog
to prompt for a file. These new methods use SDL3’s interface to file
dialog windows to ask for a file for reading or writing. Tested to
work on MacOS, Windows and Fedora using Gnome. -
ENHANCED: Do not load theme based on
display<-themeif a theme was
already loaded. -
FIXED: Use-after-free in
frame<-confirmAlso allows this method to
run from any thread. -
ENHANCED: Show fragment icons vertically aligned in the line.
-
COMPAT: Use new prolog:message_action/2
-
FIXED: Show breakpoints in PceEmacs and GUI tracer No longer rely
on messages. There is a problem with the message system where
user:message_hook/3 is both used to redirect messages and to act
on messages. The latter are hooks that fail, the first are hooks
that succeed. It might be better to have two hooks. -
FIXED: Possible use-after-free
-
MODIFIED: Epilog terminal to follow links on Ctrl-click Used
to be simple click. This causes too much unintended actions.
Using Ctrl-click is consistent with other terminal emulators. -
FIXED: Use-after-free
graphical->unlinkdestroys its
<-layout_interface, i.e., thetable_cell. Using a code reference
delays the actual deallocation. -
ENHANCED: Avoid deadlocking Epilog if thread is not sensitive to
signals. -
MODIFIED: Windows: open Epilog pipe in client using
FILE_FLAG_OVERLAPPED This patch must be combined with updating the
libeditpackage. -
FIXED: Thread-safety for passing raw Prolog terms through xpce
-
FIXED: Erroneous transfer for xpce references.
-
FIXED: Allow
frame->waitto be called from any thread. -
FIXED: Make the AnswerStack thread local.
-
FIXED: Invalidate source location cache after reloading a file.
Broken after introduction of atomic reconsult that preserves clauses
as much as possible. -
FIXED: Memory management for
frame<-confirmand friends. -
ADDED: GUI Tracer to show details and copy constraints Cycles and
constraints displayed in the Bindings sub-window now support the
Details and Copy functionality. -
ENHANCED: do not trace switching the GUI tracer on/off.
-
ADDED: Epilog:
Debugmenu. -
ENHANCED: Epilog message capturing.
swipl-win: make sure all
messages printed to the main thread end up in an Epilog window. -
FIXED: Possible use-after-free
-
FIXED: Possible use-after-free
-
FIXED: Read beyond the end of local array. May lead to invalid UTF-8
sequences and corrupted terminal output. -
FIXED: Possible memory corruption.
-
FIXED: Epilog: correctly handle
\e[@. This escape sequence is
used for inserting into the commandline. Its default should be 1 rather
than 0. This fixes inserting into the commandline, notably on Windows. -
FIXED: Various encoding issues in class
file. -
FIXED: Lazy binding of Prolog methods was not thread-safe.
-
FIXED: Make double and triple click in Epilog copy the selection
properly. This set the selection twice from an event, which apparently
causes SDL3 to reset the selection. -
FIXED: Incremental search backspace handling
-
CLEANUP: Avoid undefined warnings for
gcc -O3 -
FIXED: Emacs mark+move cursor to maintain an active selection.
-
FIXED: Correctly handle UTF-8 console output if the buffer ends with
an incomplete UTF-8 character. -
FIXED: PceEmacs: make shift-caret movement extend the selection.
Selection is now deactivated without shift. -
FIXED: Resizing the thread monitor too small leads to a type error.
Reported by @mike.elston -
MODIFIED: Control the Prolog consoles using a single predictate
set_epilog/1. -
ADDED: epilog_attach/1 to attach an epilog window to an already running
thread. This now supports attach_console/0,1 from library(threadutil). -
FIXED: Windows: Avoid that a popup causes loss of focus. Popups no
longer grab the system focus, but instead use xpce’s focus notion to
forward events to the popup. -
FIXED: More careful display handling.
-
ADDED: Epilog console: make DEL key send
\e[3~. This provides
forward delete on Linux, but not on Windows. Probably the libedit
port needs additional patching. -
FIXED: Bind any key >= 128 to
->insert_self -
FIXED: Allow entering on Italian keyboards using Alt-gr.
PceEmacs interpreted these as Alt-, moving over a clause. -
FIXED: Gracefully handle failures to inspect changes to the attached
displays. -
ADDED: Cursor home/end key support on all editable text.
-
FIXED:
frame->label: Allow using from any thread. -
ENHANCED: Make a subwindow only get the input focus if
->_wants_keyboard_focus succeeds. This notably prevents loosing
PceEmacs focus after a click in the menu. -
FIXED: Use a method rather than a function call if a window looses
focus. This allows the Prologtabbed_windowclass to forward
this event. -
ADDED: PceEmacs: Shift-left-click extends the selection.
-
ADDED: Class
terminal_imageevent handling to extend the selection
on SHIFT-click -
FIXED: Make sure modifier buttons are set for mouse up/down events.
-
FIXED: PceEmacs: make shift/control-cursor-keys work again.
E.g.Ctrl-<cursor_right>moves by word and cursor movement with
SHIFTenabled extends the selection. -
CLEANUP: Remove various tools from the manpce/0 window.
-
CLEANUP: PceEmacs: Remove Pce popup from Prolog mode
-
ADDED: epilog_insert_menu/2 and epilog_insert_menu_item/4. Compatible
with old win_insert_menu/2 and win_insert_menu_item/4. These predicates
let an application control the menus. -
ADDED:
menu_bar->append:beforeargument. -
ADDED: Implement app config hook to set the window title. This sets
the title when runningswipl-win file.pl ... -
ADDED: Epilog: Allow loading a file from the window popup.
-
ADDED:
terminal_image<-urlto get the link url from a location. -
FIXED: Use PceEmacs
*Documentation*for help. -
FIXED: PceEmacs popup for Documentation Run in Epilog window.
Actually, we should use xpce to display the HTML. -
FIXED: Class list_browser binding for backspace.
-
FIXED: Keyboard focus handling for completer windows. If there is
a grabbing window, redirect all keyboard input to the grabbing window. -
FIXED: class list_browser to handle arrow keys.
-
FIXED: Avoid destroying the completion browser. This is now a
transient frame -
FIXED: When running as epilog, disable debugging the
mainthread. -
FIXED: Establish platform dependent resource defaults. This notably
makes Apple keybindings default on MacOS. -
ENHANCED: class terminal_image to use methods for copying This allows
for redefiningterminal_image->copy. -
FIXED: UTF8ToString() created a
namefor ASCII strings. -
FIXED: Locking for Windows.
-
CLEANUP: Simplify and share locking code between Windows and POSIX
-
FIXED: Make all xpce stack related variables thread specific.
-
FIXED: Support multiple threads in xpce variable handling This patch
makes @arg1, etc. supporting multiple Prolog threads making progress. -
FIXED: Possible variable block corruption in expression evaluation.
-
ADDED: Implement selection for class
text. -
FIXED: Feedback for class
pathselection when using dark theme. -
FIXED: re-colour bitmaps to fore and background. Accessed @nil
as colour. -
FIXED: Releasing and reacquire the xpce global lock. Caused incorrect
lock counts if the lock was held by another thread when called. -
FIXED: Deadlock after new/2 fails due to module error.
-
BUG: Temporarily disabled library(pce_unclip). Getting this to work
requires changes due to modern restrictions of event grabbing. -
CLEANUP: Track frame position relative to its display.
-
ADDED: Process keypad command keys when not in numlock mode.
-
ENHANCED: Draw window initial content before showing the window.
-
ENHANCED: When hovering a menu bar, first open the next popup before
closing the old. This avoids flickering the main window due to
regaining/loosing focus. -
FIXED: Honour
frame->input_focusif there is a subwindow that has
defined a keyboard_focus. -
FIXED: Windows handling multiple epilog windows.
-
MODIFIED: Handle Alt-right (Alt-Gr) as possible text input.
-
FIXED: Possible crash in click detection.
-
ENHANCED: Better font defaults and allow controlling the fonts
via CMake. -
DOC: Updated
Defaults.userwith information on how to map fonts. -
FIXED: Font viewer (swapped arguments)
-
FIXED: Deal with distinguishing text input from other keyboard events.
-
FIXED: Allow or Unicode strings in resource files.
-
FIXED: Start fontviewer from scratch
-
FIXED: PceDraw attribute editor failed to open.
-
FIXED: Dark theme: draw selection handles using the foreground colour.
Used to be fixed to black. Also fixed classbezierthat has its
own code. -
FIXED: Windows pipe size for epilog threads. This seems to fix two
issues: much faster console output and no more pending output. -
FIXED: Thread monitor called between/3 using a float. This is due
to fonts that now have float sizes. -
FIXED: Only reset xpce on aborts in the xpce thread.
-
FIXED: Invoking
display->confirmwith non-visualforargument. -
ENHANCED: Allow
frame->exposeto be called from any thread. -
ADDED: class(epilog) as application managing all epilog frames.
The object@epilogcan be used to find and act on existing
epilog windows. -
ENHANCED: Debug message browser. Use close for closing the window,
make help open the web page on library(debug) and provide a class
variable for styling. -
FIXED:
frame->open_centeredon systems that respect position hints. -
ENHANCED: PceEmacs sgml mode to avoid dark blue. Makes it more usable
with a dark theme. -
FIXED: Avoid accessing SDL main functions for creating a window.
This ensures no SDL restrictions are violated when creating an xpce
window in a thread. -
DEBUG: Add debugging code to verify we do not call any SDL function
from the wrong thread. -
ENHANCED: Ask the user what to do if the main console is closed.
-
ADDED: library(pce_openframes) Checks still open frames and allow
the user to act on them. -
ADDED: Set the SDL_VIDEO_DRIVER from a Prolog flag. This allows
controlling the video driver without using the environment. -
ADDED: Type
num. This is the next step in migrating the non-object
type Int to support floating point numbers. As yet, the type may be
used butintandnumbehave the same except for conversion from
classrealand from a string. -
FIXED: Cmd-+ to enlarge font on MacOS (set to default)
-
ADDED: Epilog support for rescaling the font.
-
FIXED:
terminal_image->fontto rescale the terminal. -
ADDED:
font<-rescaleAlso fixes the generated object reference to
allow for sub-pixel sizes. -
ADDED: Support
frame->setwhen the window is visible. This allows
for progamatic changes to the size and position of already open
windows. -
ADDED: Support updating the displays if a display is moved by the user.
-
FIXED: Exploit new prolog_trace_interception/4
haltThis fixes
halting from the GUI tracer. -
PORT: Fixed building on Windows.
-
FIXED: Removed normalise argument to ->open
-
ENHANCED: Capture xpce messages in the epilog console. This patch
redirects direct console output and Prolog print_message/2 that would
print to the Prolog console to an Epilog window. If the message is
associated to a thread with an epilog window, use that. Else use
the last used Epilog window or just any of them as last resort. -
ENHANCED: Do exception handling for xpce’s main loop.
-
ADDED: Change selection on cycle menus based on the mouse wheel.
-
FIXED: Placement of popup menus on secondary display on MacOS SDL’s
normalization of the window position on secondary displays is broken.
This patch works around this issue. -
FIXED: Make Window creation display aware. On Wayland, new window
positions are ignored, but Wayland creates new windows on the “active”
display. On MacOS, windows are always created on the primary display
unless we place them in the area of a specific display. Our code
now tracks the “active” display and opens new windows on this display. -
MODIFIED: Signatures for opening windows and frames. All these
methods now have the signature->open: [position], [display], [grab].We need to pass this display if we want to controll the display
on which
the window is opened. -
ENHANCED: Always enable hyperlinks in Epilog terminals.
-
MODIFIED: Font handling This commit removes all outdated X11 oddities
from class font and adds modern Pango based naming and behaviour.
This adds support for explicit font weight manipulation. This commit
also completely rewrites the FontViewer demo program, providing good
insight in the available fonts and mapping to xpce.Applications using font aliases (fixed, normal, bold, etc.) should
work as before. Applications that use explicit font/3 or font/4
terms must be updated in most cases. They keep working, but will
often show the defaultnormalfont. -
MODIFIED: Deleted
normalisedargument for ->open. SDL does not
provide the required information and normalises itself. -
THEME: Control the text colour of cycle menus.
-
FIXED: Type
charnow accepts the whole unicode range -
FIXED: Release XPCE lock on method callback to Prolog.
-
FIXED: Avoid deadlock Release XPCE lock when doing I/O through
Cprintf() and friends. When output is redirected to an Epilog window
this causes a deadlock. -
ADDED: Allow specifying the Pango name and retrieving it.
-
FIXED: Tab handling Now using floats and using
font<-avg_char_width
rather than<-exwhich is a height rather than a width. -
ADDED: class(font)->list_fonts
-
MODIFIED: Migrated font resources from class display to class font.
-
MODIFIED: Removed font alias table from display. There is now a
global table@font_aliases. -
FIXED: Avoid failure building manual index if methods are deleted.
-
CLEANUP: Deleted class monitor. Monitors are represented by instances
of class display. -
CLEANUP: Remove unsupported X11 selection interface details.
-
CLEANUP: Manu X11 specific details.
-
CLEANUP: Remove display->draw_in. Non-portable.
-
FIXED: Support MacOS natural scrolling.
-
MODIFIED: Move theme setup from epilog to xpce initialization.
As a result, not only swipl-win or epilog/0 listen to the theme,
but any xpce application. -
BUILD: Support older CMake versions Building xpce fails by not finding
SDL3::SDL3 when doing compile configuration tests. -
ADDED: Allow user specified theme using
display.themeresource.
Add this to the GUI Preferences to force a theme. Usedefault
to stop loading a theme file.display.theme: dark
-
FIXED: XPCE locking
-
MODIFIED: The default image ↔ kind is now
pixmap. -
ADDED:
image->pixelsupport. -
ADDED: Interpret monochrome images as bitmaps.
-
ADDED: Use syntax_table to describe word chars for the terminal.
-
ADDED: Terminal support for select_all.
-
ADDED: Epilog console support for triple-click
-
CLEANUP: Locking types
-
MODIFIED: display->{inform,confirm} Changed signature to Visual,
Title, Format, … -
ENHANCED: Use system message box for display->{inform,confirm,report}
Exploit SDL_ShowMessageBox(). Need to handle the title and window. -
FIXED: Destroy SDL renderers for subwindows when unmapping a frame.
-
ENHANCED: xpce cross referencer GUI Added class variables to support
dark theme and show directory names more informative. -
ENHANCED: Make size of cursor in
open_lookstyle a resource. -
FIXED: Correct layout for text with leading or trailing spaces
-
ENHANCED: xpce demo for HSV colours Show the 3 closest matching named
colours and show both the colour box and text in the target colour
using the default background. -
ADDED:
colour<-distanceto compute ΔE₀₀ distance. -
ADDED: @colour_list, providing the colour names in logical colour
ordering. -
THEME: Make xpce profiler support dark theme. This also requires
updating Prolog as there is the dark theme itself defined. This patch
only adds class variables to the various colours rather than using
hard coded values. -
FIXED: Class list_browser: incremental search. Failed to grab keyboard
-
FIXED: Access NIL table cell.
-
ENHANCED: Fixed dark mode for inspector.
-
ADDED: Resource
text_colourfor classtext_itemAllow for different
colours for the label and text field. -
FIXED: Overruling class-variables Failed if the class variable already
appeared in the hash table. -
ENHANCED: Image and text alignment of class
toc_image -
MODIFIED: Allow images of
kindbitmap. If such an image is
displayed, its black pixels are translated to the current foreground
and its white pixels to the current background. -
ADDED: Provide support for alpha channal to colours.
-
MODIFIED: Simplify the colour model. Remove all legacy X11 support
and simply represent colours internally asuint32_t. RGB values
are now communicated as integers in the range 0..255 (was 16 bits). -
CLEANUP: Remove empty RAY backend
-
CLEANUP: Deleted class
colour_map -
FIXED:
insertkey binding set handling of RET, TAB, etc. -
ADDED: Set the colour of accelerators in popup menus.
-
ADDED: Bind copy/cut/paste to Shift-Ctrl-{C,X,V}
-
ADDED:
key_binding <-accelerator_labelMoved from PceEmacs to
extensions to library(pce_keybinding). -
MODIFIED: Key-names for named function keys are now between angle
brackets. This is consistent with Emacs, although some keys still
have different names. -
ADDED: Function key (F1..F12) mapping. These used to be called
key_top_<n>. They are now called more conventionallyf1..f12. -
MODIFIED:
key_binding<-bindingto return a chain Old implementation
just returned the first match. Now we return all key events for
some function. This allows for rendering the preferred one, such as
the one bound to an Apple command key. -
PORT: Use Apple Command key for save/copy/cut/paste.
-
MODIFIED: Sync common function keys with Emacs naming.
-
ADDED: Distinguish accelerator @nil from @default. Using @nil
explicitly disables. -
ADDED:
guimodifier, supporting Windows key or Apple command key. -
FIXED: possible crash in getRootGraphical()
-
ADDED: Setup epilog theme from system preferences
-
CLEANUP: Remove a lot of duplicate declarations. Ongoing work.
-
ADDED:
display<-system_themeGet the user theme preference -
FIXED: Init
TERMwhen needed. -
FIXED: Ensure the “mouse tracking window” is not reclaimed.
-
FIXED: MacOS sometimes reports a mouse-up associated to no window.
As a work-around, we implicitly associate it with the window that
got the last down event. -
FIXED: Draw resize line correct on hires displays.
-
FIXED: Conversion of UTF-8 to xpce objects Converted always to UTF-16
rather than only on Windows. -
FIXED: Do not keep
swipl-winopen if there are only hidden or
unmapped frames. -
FIXED:
window->redrawmust invalidate rather than draw. -
ENHANCED: gxref/0: do the heavy work in a background thread.
This keeps the GUI responsive. -
FIXED: Position logic for windows using a decorator displayed on
other windows. Notably the cross-referencer uses this. -
ADDED: Support cursors created from images.
-
FIXED: Colour browser interpretation of hash values. The current
version adds the alpha channel. -
PORT: Fixed wide pce string ↔ UTF-8 conversion. PceString is for now
UTF-16 on Windows. We might change that, but for now we do UTF-16 ↔
UTF-8 conversion that deals with surrogates. -
ADDED: Add a line between resizable windows.
-
FIXED: Avoid deadlock in Epilog paste on Windows. It appears
WriteFile() blocks if there is no read in progress on Windows.
As this must happen in the same thread, this does not work. We now
use the sdlinput.c async I/O to also handle asynchronous writes. -
FIXED: EOF and error handling on Windows pipes.
-
ADDED: display->list_fonts Temporary work-around. Eventually should
return an xpce data structure. -
PORT: Make Epilog work somewhat on Windows. Requires git version of
Prolog and latest version of winlibedit. -
ADDED: pce_open_terminal_image/4 to get access to the terminal client
streams Usingterminal_image<-pty_namedoes not work on Windows
and we cannot safely transfer Windows HANDLE or Prolog IOSTREAM*
over the xpce method API, so we need an additional predicate. -
PORT: Connect Windows PseudoConsoles to class terminal_image. This
also addsterminal_image->launch, which allows running processes
in the terminal. -
ADDED: Implement OSC 0 (window title) terminal escape
-
COMPAT: Changed dispatch handling to pass an IOSTREAM that must
be watched. -
PORT: Working on Windows port.
-
BUILD: Make
-DSDL=ONthe only option. This version of xpce no
longer supports X11 and Win32 -
ADDED: Epilog Clear screen in popup.
-
FIXED: Disable pce_dispatch/1 when using SDL.
-
FIXED: Get image file path
-
FIXED: Input lag on stdin.
-
ADDED: library(terminal): provide embedded terminal.
-
FIXED: Removing watched streams
-
ADDED:
pce->open_urlto use SDLs primitives for opening a URL. -
FIXED: Images may not be opaque even if they do not have a mask.
-
FIXED: Compute offset of graphicals to the frame when using nested
window. This fixes the popup offset in PceEmacs. -
MODIFIED: Using @nil for an image background sets the background
to transparent -
FIXED: Avoid extra space around popup menus.
-
FIXED: Redraw after change of window size.
-
ADDED: sdl_send() to execute messages on the SDL main thread
-
MODIFIED: Removed several built-in bitmaps. Use colours for filling.
-
TMP: This should be undone at some point.
-
BUILD: Introduce src/namedb.txt to get smooth rebuilding if NAME_
changed -
PORT: Added SDL binding as stubs
-
ADDED: src/sdl dir for future SDL2 binding
-
PORT: Added empty new low-level binding. This binding aims at binding
to raylib, but that is only refected in
the name of the binding directory (src/ray). Otherwise it merely
implements a completely empty binding based on stubs generated
by ChatGPT. -
MODIFIED: WM_CLASS handling Recent desktop environments such as
Gnome 46 and later ignore the_NET_WM_ICONproperty to set an
icon for a frame (toplevel window). We can set the icon through a
.desktopfile usingStartupWMClasswhere all windows of a
process are bundled under the same icon. But, xpce setWM_CLASS
from the xpce class name.This patch adds
display<->wm_classto set theWM_CLASS
for all toplevel windows. The default isSWI-Prolog. By
setting this to@default, the old behavior is restored. -
FIXED: emacs/1: allow non-existing file. This also fixes
?- edit(file(File))to create a new file as advertised. -
FIXED: Profiler IDE: link to website. Renamed “exit” to “quit”,
removed “statistics” (is shown anyway) and “about” (useless). -
PORT: Do not install Xserver.pl on Windows versions.
-
COMPAT: Handle changes to ‘$qlf_sources’/2
-
FIXED: Allow reloading pce_editor.pl when using .qlf files.
-
PORT: Avoid partial lists in DCGs
-
ENHANCED: PceEmacs: reload styles if new style facts are added.
This is necessary if Prolog files that hold highlight declarations
are loaded after creating the editor. -
BUILD: Build xpce library index before running qlf_make/0
-
ENHANCED: PceEmacs: deal with possibly not-installed sources.
-
FIXED: Add dependencies to make qlf compile work qlf_make/0 now
reorders based on file dependencies. This means we can add the
dependencies here and avoid hacks. -
FIXED: Load library(emacs_extend) explicitly in mode files This is
required to ensure that the term expansion is applied when generating
the .qlf files. -
CLEANUP: Remove pce_boot search path. Now using hard paths to resolve
references between the various boot files. -
BUILD: Better support building .qlf files without an X11 display
-
CLEANUP: Removed forgotten HTTP implementation
-
CLEANUP: Delete duplicate libraries Deleted
- pce_drag_and_drop.pl (duplicate of dragdrop.pl)
- pce_drag_and_drop_dict_item.pl (duplicate of dragdict.pl)
- pce_loadcxx.pl (non-functional)
- pce_selection.pl (old, deprecated)
- sp_fcompile.pl (non-functional)
-
TRACER: Fixed “finish” to use new skip(Frame) reply.
-
FIXED: X11 version: paste Unicode text
-
FIXED: Avoid deadlock in
display<-selection. -
PORT: Avoid
-Wstringop-truncationwarning. -
PORT: Silence address sanitizer errors.
-
MODIFIED: PceEmacs: sync comment commands with (my)GNU Emacs. -
\C-c\C-h (insert_section_comment)
Insert code section comment from prompted title - \C-c\C-q
(insert_long_comment)
Insert /* - - - … - - - */ comment