Did you know ... Search Documentation:
Title for pldoc(default)
Branch: development (switch to stable),
version to version

SWI-Prolog Changelog from version 9.3.2 to 9.3.7

[May 27 2024]

[May 24 2024]

  • TEST: test_interrupt: skip test if alert signals are required but they are disabled.

[May 25 2024]

  • DOC: fix typo and improve cmake instructions

[May 24 2024]

  • FIXED: thread_create/3: handling of c_stack option. 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.

[May 22 2024]

  • 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 default false, hiding toplevel variables that start with an underscore.

[May 20 2024]

  • FIXED: Generating variable names may conflict with user variables.
  • FIXED: Links to FAQ pages.

[May 16 2024]

  • FIXED: Trie handling of floats on 32-bit hardware
  • CMAKE: Fixed -DCMAKE_BUILD_TYPE=Sanitize Defaults to -fsanitize=address.

[May 15 2024]

  • 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.

[May 14 2024]

  • ENHANCED: Crash reports Avoid recursive crash reports and only print the GC and shift stacks if the environment variable SWIPL_DEBUG_GC_STACK is set.
  • DOC: Add `--sigalert=NUM to swipl --help`.

[May 13 2024]

[May 12 2024]

[May 5 2024]

  • CLEANUP: Avoid to undefined sanitizer warnings.

[May 4 2024]

  • CLEANUP: Avoid UBSAN error Test for arity > 0

[May 3 2024]

  • 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 == NULL

    else-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 int for 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

[May 2 2024]

  • PORT: !1269 Deal with the type z_crc_t used by minizip zlib This works around a type conflict over get_crc_table(). Some headers define this as returning `z_crc_t*` without defining this type while others (Fedora 40) defines the function as `uint32_t*` and defines z_crc_t. This patch makes CMake check for the z_crc_t type and, if defined, use this definition.

[May 1 2024]

[Apr 30 2024]

  • ENHANCED: Added toplevel options +, - to modify max_depth This option also changes 'w' to merely drop portrayed(true) and p to 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.

[Apr 28 2024]

  • FIXED: call/1 (I_USERVALL0) GC issue call/1 did not correctly make the goal available to GC if stack expansion is required.

[Apr 27 2024]

[Apr 26 2024]

  • 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/configure to include termux

[Apr 25 2024]

  • 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

[Apr 23 2024]

  • CLEANUP: Remove various unused macros and join macros that are now the same Also document the current state of the Prolog data representation.

[Apr 10 2024]

  • 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.

[Apr 24 2024]

  • PORT: Deal with Android android-execinfo library.

[Apr 17 2024]

  • 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.

[Apr 16 2024]

  • FIXED: Reconsult when the loaded code sets the trace flag on a predicate. This was due to a conflict over the predicate flags. As the flags field was widened, we can avoid these problems.

[Apr 12 2024]

  • PORT: #1265 Deal with static_assert() after label

[Apr 10 2024]

  • 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_size Clang 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.

[Apr 9 2024]

  • FIXED: Compute new stack size when we reach the limit. Suffered from integer overflow on 32-bit machines and got several edge cases wrong.

[Apr 8 2024]

  • CLEANUP: Allow for gcc -Wconversion With 64 bit word it is easy to get conversion errors. Compiling with -Wconversion helps 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/gdbinit Share 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"

[Apr 5 2024]

  • PORT: VS2022: void* arithmetic, wrong order for SIZEOF_WORD

[Apr 3 2024]

  • FIXED: forAtomsInClause() handling of B_*_?C instructions These called PL_unregister_atom() on the atom, rather than the argument function.

[Mar 28 2024]

  • FIXED: DEBUG(CHK_SECURE) clean of memory (wrong size)

[Mar 27 2024]

  • 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 $CFLAGS and $CXXFLAGS in a CMake build types

[Mar 18 2024]

  • CLEANUP: Get rid two definitions for trail entries

[Feb 1 2024]

  • 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.

[Mar 29 2024]

  • FIXED: prototype for get_string_text()
  • FIXED: make markAtomsOnGlobalStack() safe This could crash on all platforms. It is notably dangerous using the experimental O_M64 model.

[Apr 5 2024]

  • TEST: Disable max_integer_size test for emscripten Doesn't handle longjmp() correctly in release mode. Works in debug mode, but that is not useful.

[Mar 31 2024]

  • FIXED: write clauses holding > 0xffff Unicode chars in strings to QLF on Windows.

[Apr 3 2024]

  • FIXED: forAtomsInClause() handling of B_*_?C instructions These called PL_unregister_atom() on the atom, rather than the argument function.

[Mar 29 2024]

  • FIXED: Temp buffer handling when stack is close to top of address range

[Mar 28 2024]

  • 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.

[Mar 27 2024]

  • 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.

[Mar 26 2024]

  • 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.

[Mar 25 2024]

  • PORT: Avoid spurious warnings from spoiling pthread_setname_np() test This used to use -Werror to 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.

[Mar 24 2024]

  • DEPRECATED: Sseek(), Stell()
  • FIXED: Another fileno issue.
  • ADDED: library(sandbox): allow for Dict.get(key,Default)
  • FIXED: Stream initialization for swipl-win.exe Was broken since recent changes keeping track of fileno. Reported by Jan Burse.

[Mar 23 2024]

  • ADDED: PL_system_error() This patch also adds documetation for PL_fatal_error().
  • ADDED: Prolog flag max_integer_size This 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.

[Mar 21 2024]

  • ENHANCED: Improve memory reuse after writing huge integers.

[Mar 18 2024]

  • FIXED: #1254 crash in PL_get_mpq()

[Mar 15 2024]

  • 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.

[Mar 14 2024]

  • 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.

[Mar 13 2024]

  • 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 from main), we may copy current_input or current_output from 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 the current_input and current_output to user_input and user_output, which typically never change.

[Mar 12 2024]

  • 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.

[Mar 11 2024]

  • ENHANCED: trace/1,2 and friends. - Code cleanup - Support conditional trace using trace(Head, Port(Condition))

[Mar 12 2024]

  • FIXED: Ensure correct setting file handle for std streams. This was broken after adding the fileno field to the IOSTREAM struct.

[Mar 11 2024]

  • 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.

[Mar 10 2024]

  • FIXED: pack metadata checking for prolog:Feature requirements.

[Mar 7 2024]

  • 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.

[Mar 6 2024]

  • CLARIFIED: PL_free_blob() can be called multiple times. This patch changes subsequent calls to a no-op that returns FALSE and document this is valid. After comment by Peter Ludemann.

[Mar 5 2024]

  • CLEANUP: Do not call blob release() on GC or cleanup after PL_free_blob()

[Mar 4 2024]

  • ENHANCED: Answer/query expansion. Toplevel variable ($Var) handing is now always handled, regardless of the expand_query/4 or expand_answer/2 hooks. The expand_answer/2 hook is superseded by expand_answer/3.
  • DOC: Deprecate format/3 with a non-list 3th argument.

[Mar 3 2024]

  • FIXED: Setting the C-stack limit to values not a multiple of the page size Causes problems on some platforms.

[Mar 2 2024]

  • 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.

[Mar 1 2024]

  • 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 clib

[May 25 2024]

  • DOC: change example to use stream pairs

[May 5 2024]

  • CLEANUP: Use unsigned integers for bitmaps Avoids undefined shifts and makes the code more readable.

[Mar 23 2024]

  • PORT: Avoid warning on __RCSID() in bsd-crypt.c Suppresses a warning on CRAN win builder

Package cpp

[Apr 2 2024]

  • MODIFIED: PL_get_integer() no longer accepts floats

[Mar 25 2024]

  • TEST: exceptions in blob callback
  • DEPRECATED: PlStream::tell(), PlStream::seek() Also fixes initilization errors. Uses PL_system_error() to signal misuse rather than assert()

[Mar 23 2024]

  • FIXED: Possibly uninitialized variable This is a temporary patch. blob compare() and acquire() cannot raise a Prolog exception. This should print a message and abort the process.

[Mar 15 2024]

  • FIXED: handle nil blobs in callbacks

[Mar 2 2024]

  • DOC: improve non-det example (and tests)
  • DOC: Use ASCII LaTeX ``word''.

Package http

[May 27 2024]

  • FIXED: Failure to serve data with unknown mime type.

[May 19 2024]

  • DOC: Server-sent events support

[May 17 2024]

  • ADDED: Support for server-sent events These patches allow for streaming output which is enabled by default if the content-type is text/event-stream. Still needs documenting.

[May 12 2024]

[Apr 29 2024]

  • MODIFIED: json_write/3 and friends: no spacing with width(0). If the option width(0) is provided, do not emit a space after a "," delimiting object fields. This implies spacing is minimal. This is a requirement for signing JSON documents.
  • DOC: http_post_data/3: document string([Type], String) data

[Apr 24 2024]

  • MODIFIED: library(http/http_load) to verify certificates This library allows for loading files from http/https URLs. It used to skip certificate checking. Checking is now enabled and the Option argument may be used to disable it (using the cert_verify_hook option).

[Apr 11 2024]

[Mar 10 2024]

  • TEST: Don't reuse original test port for HTTP proxy Instead, use port assigned by OS.

    Intention is to prevent intermittent build test failure on Linux armv7, and Mac M1.

    The HTTP, HTTPS, SOCKS and "unused" ports are still reused, though.

    Original build failure report: https://swi-prolog.discourse.group/t/swi-prolog-9-2-2-fails-http-proxy-test-on-armv7/7275

  • FIXED: Make http session GC thread inherit from main This thread is started lazily from an HTTP worker and would by default interit the temporary CGI stream as current_output. By interiting from main we can safely print debug messages and avoid stream existence exceptions.

[Mar 9 2024]

  • FIXED: HTTP Sessions using Redis to properly handle concurrent delete. Multiple participants may decide to delete a session. By checking the removal from the timeout queue we avoid that two nodes delete the same session.
  • ADDED: HTTP session management granularity This setting controls how precisely we manage idle time updated and session timeouts. This is notably important when using an external (Redis) database for sharing session information to reduce traffic.

[Mar 8 2024]

  • ENHANCED: http_upgrade_to_websocket/3: discard a websocket on failure. When using the guarded(false) option, the created web socket is now only left open if the passed Goal succeeds.

[Mar 7 2024]

  • DOC: http_server/2: Explictly mention the possible use of AF_UNIX sockets
  • ENHANCED: Implementation of open_files in server stats.

[Mar 6 2024]

[Mar 5 2024]

  • ADDED: library(http_server_health)

Package jpl

[May 16 2024]

  • TEST: Search for junit.jar as well as junit4.jar. Fedora only ships with junit.jar. We'll assume version 3 and older have died by this time.

Package ltx2htm

[Mar 2 2024]

  • FIXED: handling of final single quote
  • ENHANCED: Warn on non-ASCII characters. We can't handle these.

Package pldoc

[May 1 2024]

  • ADDED: plDoc: support __text__ and **text** for strong.
  • ADDED: Support [Label](mailto:me@example.com) links in PlDoc

[Mar 24 2024]

  • ENHANCED: Deal with a large selection of diacritics in the LaTeX backend. When converting PlDoc markdown to LaTex, we now generate proper LaTeX sequences for ten common diacritics.

[Feb 28 2024]

  • ENHANCED: Better ordering of predicates comming from other files. pldoc for "re-exported" predicates are now ordered by position, i.e., file name and line number.

Package plunit

[Mar 13 2024]

  • FIXED: Report tests where the setup goal fail as failed and print output.

Package semweb

[Mar 28 2024]

  • FIXED: #112 C11 compatibility (no declaration after label)

[Mar 27 2024]

  • FIXED: Message propagation when rdf_load_db/1 fails.
  • FIXED: Type error

[Mar 3 2024]

  • FIXED: #110 Allow blank nodes as graph in TRiG format.

Package ssl

[Mar 24 2024]

  • PORT: Fix test for X509_get0_signature() on Windows This is still problematic as -Werror -c assumes gcc/clang/... We could use try_compile as in cmake/CheckFloatingPointFormat.cmake of the main source?

Package sweep

[Apr 10 2024]

  • FIXED: workaround Emacs incompatibility with certain locales The Emacs Elisp reader only works with locales that have "." as their decimal separator, but Prolog initialization sets up the locale according to the environment variables. Therefore we need to reset the locale after initializing Prolog in case the environment prescribes a locale with a different decimal separator, such as fr_FR. See also https://github.com/SWI-Prolog/packages-sweep/issues/1

Package swipl-win

[Mar 12 2024]

  • FIXED: Reset fileno for stdio streams

Package swipy

[May 21 2024]

  • ENHANCED: Context manager for janus.query() + tests for doc examples

[May 17 2024]

  • FIXED: #9 PrologError exceptions cannot be caught as janus.PrologError
  • FIXED: py_is_object/1: Need to grab the GIL

[Apr 23 2024]

  • DOC: janus.query() etc optional arguments is called inputs

[Apr 16 2024]

  • FIXED: Memory leak when generating a Prolog dict from a Python dict

[Apr 6 2024]

  • FIXED: Wrong Python refcount update. Reported by Jerry James as !8. That is is not entirely correct though.

[Apr 4 2024]

  • FIXED: iterator janus.query(): properly handle data conversion exceptions

[Mar 24 2024]

  • ADDED: py_import/2: Allows to import a module with a different name.

Package xpce

[May 5 2024]

  • CLEANUP: Avoid relying on too big integer shift Also document that the save format is not 64-bit robust. I do not know the consequences. Probably it just limits the size of some objects.