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

SWI-Prolog Changelog from version 8.4.3 to 9.2.5

[May 20 2024]

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

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

[May 14 2024]

  • DOC: Add `--sigalert=NUM to swipl --help`.

[May 13 2024]

[May 12 2024]

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

[Apr 30 2024]

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

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

[Apr 25 2024]

  • PORT: Include Ubuntu 24.04 (Noble Nombat) in PPA builds
  • PORT: Use -funwind-tables on ARM systems with glibc, also for clang

[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 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 8 2024]

  • FIXED: comparison of MPZ and MPQ with 64 bit integers if long is 4 bytes
  • 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 6 2024]

  • COMPAT: Introduce abstract types for PL_new_hash_table() and friends Rather than hard coded void* we now use table_key_t and table_value_t. These types are also introduced in the development series, where the type changes.

[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]

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

[Feb 27 2024]

  • ADDED: library(sandbox): allow for current_predicate/1 without modules.
  • FIXED: Using the -l file option multiple times This used to load the first file into user (correct) but all others into the toplevel system module. Now all files are loaded into user.
  • ENHANCED: #1237 check_installation/0: hide details. Due to changes in the message format failing to load shared objects, failing tests due to shared object failures causes long error reports.

[Feb 26 2024]

  • FIXED: Highlighting (SWISH). Avoid double brace_term_open/close for {} goal terms. Still needs proper highlighting in SWISH, as it is now just marked as brace term.

[Feb 23 2024]

  • DOC: Clarify details of PL_get_chars() et al

[Feb 16 2024]

  • DOC: pack management and a few minor patches.

[Feb 20 2024]

  • DOC: Replaces !1232 with example for using PL_rewind_foreign_frame().

[Feb 14 2024]

[Feb 12 2024]

[Feb 9 2024]

  • DOC: pack_install/2. Missed most of the documentation due to unintended blank line in the comment.

[Feb 7 2024]

  • PORT: Deal with config and data direcotory search on Windows platforms.

[Feb 6 2024]

  • FIXED: Search for home directory using a relative compiled-in path findExecutable() must return a Prolog path (using /). Improved debug messages.

[Feb 3 2024]

[Feb 2 2024]

  • ENHANCED: file_autoload_directives/3: Consider files from already existing directories.
  • FIXED: file_autoload_directives/3: avoid importing as name//a and name/a. Imports now prefer the DCG notation if the defining library uses that in the export and in any case avoid importing both forms.

[Jan 26 2024]

  • DOC: Clarify some details about foreign blobs

[Feb 1 2024]

  • FIXED: #1228 Restoring default options for "stand-alone" states.
  • DOC: Update documentation for building a 32 bit version on Ubuntu. [no ci]
  • FIXED: pack_publish/2 using a URL.
  • FIXED: #1227 Installation from HTTP URL

[Jan 31 2024]

  • ADDED: library(dom) (WASM version) bind/4: allow passing JavaScript objects.
  • FIXED: Qlf file generation for :- include(File) The include statements can come in more places, even in the middle of a predicate. This changes the identifier from 'I' to 'L' to make the statement unique in all contexts and defines handling the include statements.

    Updates the qlf save vesion to 69. Old valid version 68 files can still be loaded.

[Jan 30 2024]

  • MODIFIED: `swipl qlf` app to use sub commands. Now use e.g. `swipl qlf compile file.pl`
  • FIXED: pack_install/2: install from archive without git.
  • FIXED: Avoid confusion about -o, -x, -b and -c options These options are used early in the initialization and were detected using dedicated option processing. This goes easily wrong. Therefore we now use the full option processor. If we loaded a state that includes options, we redo the option processing.

[Jan 29 2024]

  • ADDED: swipl qlf app: --include for compilation to include user files.
  • FIXED: pack_install/2: may try to delete old pack twice.
  • FIXED: pack_install/2 from an archive file.
  • PORT: Re-enable gmp for MacOS binaries. For some versions using gmp in the app crashed. Seems these issues are resolved.
  • PORT: Re-enable gmp for MacOS binaries. For some versions using gmp in the app crashed. Seems these issues are resolved.

[Jan 26 2024]

  • PORT: Updated MacOS dependencies to their latest stable version

[Jan 29 2024]

  • PORT: Fix MacOS bundle fixup The Qt bundle fixup fixes too much, so we first move our modules away.
  • PORT: Install CMake exports inside the bundle

[Jan 28 2024]

  • PORT: Updated MacOS versions of the maintenance scripts.

[Jan 29 2024]

  • FIXED: WASM: returning an array of objects. Reported by @mjano314 on Discourse.
  • PORT: Fix MacOS bundle fixup The Qt bundle fixup fixes too much, so we first move our modules away.
  • PORT: Install CMake exports inside the bundle
  • FIXED: WASM: returning an array of objects. Reported by @mjano314 on Discourse.

[Jan 28 2024]

  • PORT: Updated MacOS versions of the maintenance scripts.

[Jan 26 2024]

  • ENHANCED: Installing packs in an explicit directory creates this dir.
  • ENHANCED: Installing packs in an explicit directory creates this dir.
  • PORT: Updated MacOS dependencies to their latest stable version
  • TEST: Add help to test.pl option handling. Added --output=always to force emitting all test output.
  • FIXED: Invalid PlDoc comment.
  • ENHANCED: argv_usage/1: deal witn oneof(Values) types.
  • TEST: Add help to test.pl option handling. Added --output=always to force emitting all test output.
  • FIXED: Invalid PlDoc comment.
  • ENHANCED: argv_usage/1: deal witn oneof(Values) types.
  • RELEASE: Preparing 9.2.0. Merged devel at 4803519071d94771a48322d77739118d0e211adf
  • TEST: Created answer subsumption test from #1222
  • FIXED: require_prolog_version/2: accept dirty on release tag/.

[Jan 25 2024]

  • MODIDIED: library(prolog_pack) This is an extensive rewrite of the package infra structure. The pack format has not changed. A brief summary of the changes:
    • Plan the installation of multiple packages, selecting a compatible combination.
    • Plan the installation, including dependencies before installing anything, first asking consent from the user. On accept, the packs are downloaded and the build process is established.
    • Easily support installing packs specifically for a project in addition to user and system-wide packs.
    • More informative listing of packs, including listing only outdated packs.
    • More work on the app pack.

[Jan 21 2024]

  • ADDED: swipl pack list: --installed option.

[Jan 19 2024]

[Jan 24 2024]

[Jan 19 2024]

  • ADDED: Prolog flag rationals to claim rational number support.

[Jan 18 2024]

  • ADDED: cov_property/1 Allows querying coverage collection system properties (currently only whether coverage data collection is active).

[Jan 17 2024]

  • FIXED: #1222 answer subsumption pruning of answers may crash.
  • ADDED: library(prolog_coverage). This used to be available as library(test_cover) from the plunit package.

[Jan 16 2024]

[Jan 14 2024]

  • MODIFIED: Moved pack_attach/2 from the library to the core. This predicate is not about installing. This patch also deletes '$pack_attach'/1 and '$pack_attach'/2.
  • ADDED: library(git): is_git_hash/1.

[Jan 13 2024]

  • FIXED: #1220 create_prolog_flag/3 using type(term), keep(true) If the initial type is not a term, the type must be set to term and the value must be converted.

[Jan 12 2024]

  • ADDED: pack_install_local/3 This predicate adds one or more packs to the local project directory. Work in progress.
  • ADDED: Prolog environment variable SWIPL_PACK_PATH This defines the Prolog search path for packs at startup.
  • ADDED: Prolog flag path_sep. Provides access to OS path separator (: or ; for Windows).
  • ADDED: replace(+Bool) option to attach_packs/2. Allows attach_packs/2 to clear the default package list.

[Jan 11 2024]

  • FIXED: Make sure saving the environment always succeeds
  • ADDED: Allow installing git packs from a URL whose base name does not match the pack name

[Jan 10 2024]

  • ENHANCED: Improve listing of packs
  • ADDED: pack_list/2 List packs with options.

[Jan 8 2024]

[Jan 9 2024]

  • DOC: Succeed if there is no profiling support in this version.
  • FIXED: Keep track of base and size of the C-stack This information was stored in the thread-info structure. However, if an engine is detached and later attached in a new OS thread this information is wrong. We now cache it in the info structure, but we store it in a pthread key.

    This notably fixes thread interaction for JPL.

[Jan 8 2024]

  • ENHANCED: always save buildenv.sh on pack build directory.
  • ADDED: swipl_add_test() to home/cmake/swipl.cmake
  • ADDED: Set ${swipl_module_dir} in home/cmake/swipl.cmake
  • FIXED: CMake error in home/cmake/swipl.cmake.
  • DOC: #1217 Improve documentation for selecting Python version.
  • BUILD: Disable Janus when using -DSTATIC_EXTENSIONS=ON

[Jan 5 2024]

  • FIXED: Avoid PL_thread_attach_engine()/PL_thread_destroy_engine() destroying the thread. If this pair is called on a thread that already exists, it should not destroy the engine. This notably causes Janus to crash when running on a background thread. Reported by Fabrizio Riguzzi.

[Dec 29 2023]

  • FIXED: Use snapshot/1 when computing exports This is used to update the autoload library as well as several other IDE related tasks. For this we read and expand the file until we find the first non-directive. This may however leave traces in dynamic predicates. Using snapshot/1 avoids that.

    It is a partial work around. There could be other side-effects. Should probably be considered experimental.

  • FIXED: Declare more system dynamic predicates as not being subject to transactions. This fixes several issues when (auto)loading sources files inside snapshots (snapshot/1) or discarded transactions.

[Dec 28 2023]

  • FIXED: #1213 transactions interfering with wrap_predicate/4. More generally, transactions and snapshots should not affect some system maintained dynamic predicates. The wrapper used by wrap_predicate/4 is one example. This also affects dynamic predicates involved in loading sources. This patch disconnects whether predicates are subject to transactions from whether they are dynamic.

    For now, the ability to separate the two properties is reserved to the system.

[Dec 27 2023]

  • FIXED: Consistency of LD and CC variables for building packages.
  • BUILD: Use static libraries to silence Windows Defender It appears that executables cannot be copied when Windows Defender is active.

[Dec 22 2023]

  • BUILD: Use CMake recommended CMAKE_C_BYTE_ORDER when available

[Dec 27 2023]

  • ENHANCED: Allow for some rounding and jitter when deciding INDEX.pl is out-of-date.

[Dec 21 2023]

  • TEST: Make test_installation/0 run package tests concurrently.
  • CLEANUP: document many of the maintenance scripts and remove some outdated ones.

[Dec 20 2023]

[Dec 19 2023]

  • ADDED: library(prolog_colour): colorized known but unset flags.
  • ADDED: library(prolog_colour): support arithmetic function roundtoward/2. Second argument is not a function but a rounding mode identifier.
  • ADDED: arithmetic_function/1 to allow import/export If the implementation of a function is exported, it may be imported into another module and used. This patch also updates the documentation.
  • FIXED: pretty_print/2 to deal with bobs around an operator.
  • DOC: PL_new_term_refs() takes size_t since recently.

[Dec 18 2023]

  • FIXED: Fixup script for MacOS bundle was not executed. Seems a change in recent CMake that requires the script to start with #!.

[Dec 15 2023]

[Dec 14 2023]

[Dec 13 2023]

  • MODIFIED: translate_bindings/5 to name the variables. Supports named variables in SWISH.
  • INSTALL: #1209 Fixed missing manindex.db during intallation.

[Dec 12 2023]

  • DOC: Get profiler/2 and related docs from PlDoc rather than LaTeX
  • ENHANCED: When emitting a document, consider text already on the current line.
  • ADDED: opt_usage/1: allow for multiple opt_help(help(usage), Usage) This allows to present multiple usage lines.
  • ADDED: app qlf This app simplifies commandline driven management of QLF files. Use `swipl qlf -h` for help. The command line syntax is still unstable.

[Dec 11 2023]

  • FIXED: Recompile or ignore incompatible QLF files An incompatible VM signature caused loading of a QLF file to result in a warning, loading nothing. It now prints a message and recompiles the file.
  • ADDED: check_installation/0 to verify there are no ambiguities in the autoload index.

[Dec 9 2023]

[Dec 8 2023]

  • MODIFIED: Install each extension in library/ext/dir This allows adding and removing extensions without rebuilding the library index and clarifies the source of files. This was introduced to simplify adding and deleting optional components in e.g., the Windows installer or package managers that split SWI-Prolog into multiple packages such as used by Debian and planned for Conda.

[Dec 6 2023]

  • FIXED: Toplevel calls repl_loop_hook/2 with a variable.
  • FIXED: Choice point left by loading the personal init file.

[Dec 4 2023]

  • FIXED: format_types/2: error on backracking This predicate left a choice point and on backtracking produced an error when analyzing format strings that contain a *.

[Nov 30 2023]

  • ADDED: Experimental repl_loop_hook/2 hook This allows acting on entering/leaving interactive mode.

[Nov 29 2023]

  • DOC: Improve `swipl --help` (list "app" mode)
  • SANDBOX: Declare flag write_attributes as safe. This may call portray, but local definitions are verified and global definitions cannot be changed.
  • CLEANUP: Move installation locations to cmake/Locations Moving it into a separate file keeps the main file short and it needs to be before Ports because we need to act on them. Possibly though, we need part of the locations before and part after the Ports? As is, that does not seem to be the case. Alternatively we could move part of this into the Port files?

[Nov 28 2023]

  • PORT: Allow for not having a compiled-in "home" directory Conda has no sensible fixed installation location.
  • FIXED: check_installation not to bail out if a feature test raises an exception.
  • CLEANUP: Moved default definition for file_search_path/2 foreign to library(shlib). This simplifies maintenance. The change also adds swi(lib/Arch) for all platforms, although the default SWI-Prolog for Windows installs the libraries in swi(bin). Possibly we can change that too?

[Nov 27 2023]

  • INSTALL: Allow installing in public directory without symlink For some installations we want the executables in another directory than the "home". Normally these were POSIX systems and we would symlink from the executable to the real location in the self-contained binary.

    But, also some Windows installations such as MSYS2 and Conda (and probably Cygwin) want this. Therefore we added SWIPL_INSTALL_AS_LINK which, if OFF, compiles the relative path to the anticipated home into the binary such that we can install the .exe in a separate directory (for Windows along with the DLLs needed to run them).

[Nov 23 2023]

  • CLEANUP: format_types/2 Remove not-working attempt to make it bi-directional. It now properly raises an instantiation error, causing sandbox analyis to work without breaking anything.

[Nov 21 2023]

  • FIXED: Conditional compilation and :- include/1. Avoid errors on
    :- if(...).
    :- include(...).
    :- elif(...).
    ...

[Nov 19 2023]

  • ENHANCED: Shorten and simplify calling deterministic foreign functions This patch unifies I_FOPEN with the subsequent calling function and somewhat simpifies the design.

[Nov 18 2023]

[Aug 18 2023]

  • SECURITY: CVE-2023-45853 Upstream bug in the minizip library used to create and load Prolog saved states. Not very relevant to SWI-Prolog as it unlikely that SWI-Prolog is used in a way that provides uncontrolled access to the involved parameters.

    Upstream message:

    Reject overflows of zip header fields in minizip.

    This checks the lengths of the file name, extra field, and comment that would be put in the zip headers, and rejects them if they are too long. They are each limited to 65535 bytes in length by the zip format. This also avoids possible buffer overflows if the provided fields are too long.

[Nov 15 2023]

[Nov 16 2023]

  • MODIFIED: set_prolog_flag/2: convert Booleans If set_prolog_flag/2 is used to create a new flag and the value is an atom that is recognised as a Boolean, normalise the value.
  • ADDED: must_be/2 and friends: constructed types and compounds Allow for e.g. compound(atom-integer) to express a pair mapping an atom to an integer. Also introduces constructed types such as (atom;integer)

[Nov 15 2023]

  • FIXED: #1205: sandbox:format_calls/3 to handle non-list format args correctly.
  • ADDED: Provide a mechanism to warn on unused Prolog flags
  • ADDED: Allow -Dno-flag
  • MODIFIED: library(apply_macros) flags Now listens to optimise_apply, which defaults to optimize, while the flag apply_macros_scope defines whether the optimization applies to the files that import this library or all files (default).
  • CLEANUP: Make optimise_debug flag library-only.
  • MODIFIED: Renamed Prolog flag clpfd_goal_expansion to optimise_clpfd Improves consistency
  • FIXED: Source position preservation of string tereminals in DCG.
  • ADDED: Rewrite positions for function evaluation in meta-predicate arguments This fixes source location handling for clauses that call a meta-predicate where one of the non-meta arguments uses e.g. Dict.attr.
  • FIXED: clause_info/4: perform full body matching.

[Nov 14 2023]

  • FIXED: Clause position handling of plunit test/1,2 clauses.
  • FIXED: '$notrace'/2 + '$restore_trace'/2 pair to properly restore This pair now reliably restores LCO and VMI instruction optimization such that e.g., the coverage tools work properly after this pair is called.
  • ENHANCED: load library(apply_macros) globally on -O.
  • FIXED: #1204: undo/1: crash if a single undo is scheduled that fails.

[Nov 13 2023]

  • FIXED: clause_info/5 for unification moved into the head
  • FIXED: clause/2: moved unifications If a unification is moved into the head and the variable is unified against some other variable, we must move the unification back.
  • MODIFIED: Control transformations by library(apply_macros). The new Prolog flag apply_macros controls when this library rewrites the code. Values are true (old default), false (no-op), optimise (only wwith -O) and imported (only apply to modules where it is explicitly imported to).
  • ADDED: Process -Dname=value to set Prolog flags.
  • FIXED: tracer S command to save the current goal. Reported by Wolfram Diestel (https://swi-prolog.discourse.group/t/stacktrace-after-hitting-t-s-u-while-browsing-through-query-solutions/6963/2)
  • PORT: MSVC install: there is no libswipl.ddl.a.

[Nov 7 2023]

  • PORT: Windows: deal with OpenSSL when using per-module CRT support.

[Nov 6 2023]

  • ADDED: Swin_open_osfhandle()
  • PORT: Fixed integer addition overflow check when using MSVC
  • PORT: Allow using Windows HANDLE in communicating about Prolog streams.
  • BUILD: Make installation work again Broken with 71caaeb72188627f0d717d251cab14d3e557a241

[Nov 5 2023]

  • BUILD: Simplify forced building of the library indices.
  • PORT: Improve support for Conda on Windows. Adds a flag conda. Windows versions added %CONDA_PREFIX%\Library\bin and %PREFIX%\Library\bin to dependent DLL search path. This extends a similar work-around for MSYS2.

[Nov 2 2023]

  • DOC: Non-ISO behavior of \+/1
  • PORT: Use uint64_t for LibBF mpz_ui_pow_ui() Switch to using the 64 bit versions on all platforms. Requires some more 64 bit init/set versions, but overflow checking intrinsic __umulh() for MSVC only exists of 64 bit.
  • FIXED: gcd function for LibBF on platforms with 32 bit long.
  • FIXED: mpz_ui_pow_ui() emulation on LibBF on systems with 32 bit long. Breaks e.g. A is 2^65, succeeding with A = 0.
  • ADDED: PL_get_delay_list() API.

[Nov 1 2023]

  • CLEANUP: PL_new_term_refs() now takes size_t argument (was int).
  • DOC: Fix return types of Sfread() and Sfwrite() (size_t instead of int)

[Oct 29 2023]

  • ADDED: Start applications using swipl app-name [arg ...]
  • CLEANUP: Code and docs for '$initialise'/0 that starts the system

[Oct 31 2023]

  • FIXED: Issues with name/2 and number_codes/2 high Unicode points on Windows. Also fixes issues with code strings holding 0 codes for these predicates.
  • FIXED: After converting text representation it may no longer be canonical. This causes name/2 on a string that starts with a digit and contains wide characters to re-interpret UTF-8 and wide characters.
  • ENHANCED: pack_install/2: duplicate handling Allow installing a package in a given directory if the package is already installed in some other directory.
  • MODIFIED: pack_install/1,2: enforce TLS certificates From this version the system by default verifies TLS certificates. For poorly configured servers there is an option insecure(true) to pack_install/2 to skip the verification.
  • FIXED: downcase_atom/2 and upcase_atom/2: error handling.
  • DOC: PrologScript and shell script usage

[Oct 25 2023]

  • XSB: Reorganise dialect emulation libraries Make timed_call/2 and consult/1 available from the right modules.

[Oct 24 2023]

  • FIXED: html to text translation float right This patch fixes handling of inline style float:right and dealing with multiple flush-right elements in a block.

[Oct 23 2023]

  • FIXED: undo/1: calling hooks while backtracking could corrupt choicepoint. Reported by Fernando Saenz Perez.
  • FIXED: PL_get_size_ex() on 64 bit systems using LibBF based bignums.

[Oct 18 2023]

  • ENHANCED: help/1: keep track of modules for user predicates Also show private predicate matches.
  • TEST: Disable shared tabling tests conditionally. This test requires threads and library(time).

[Oct 16 2023]

  • MODIFIED: When using --no-signals, keep using the GC thread The communication with the garbage collection thread is not based on OS signals and thus there is no reason to stop using the dedicated GC thread when not using signals. Using a separate thread improved real-time behavior.

[Oct 11 2023]

  • MODIFIED: Make the Prolog flag float_overflow to affect read_term/3. With this flag setting, too large floats are read as infinity rather than raising a syntax error.

[Oct 9 2023]

  • MODIFIED: Issue a warning on suspect autoloading The autoloader now issues a warning if it loads a library that contains global goal or term expansion rules. Expansion typically improves performance or otherwise enhances the functionality of some of the predicates defined in the module.

[Oct 8 2023]

  • FIXED: Preserve table properties on reconsult. Reported by Jan Burse.

[Oct 5 2023]

  • CLEANUP: Removed unfinished and not maintained packages/cpproxy

[Oct 4 2023]

  • FIXED: PL_thread_attach_engine()/PL_thread_destroy_engine() on main thread The main thread did not set the open_count to 1, causing hthe attach/destroy cycle in the main thread to kill the main thread.

[Oct 2 2023]

[Oct 1 2023]

  • DOC: clarify some details of stream error handling

[Sep 29 2023]

  • TEST: Enable rational number tests when using LibBF.
  • TEST: Test suite for bomb DoS vulnerabilities.
  • SECURITY: Allow interrupts in the compiler This avoids using the "bomb" DoS attack using assertz/1 and friends.

[Sep 28 2023]

  • SECURITY: Allow interrupts in term_variables/2 and numbervars/4 variants Some of these variant goals require processing the tree such that shared terms are walked normally. Such goals can take exponential time. This patch allows processing interrupts.

    Without this, notably services such as SWISH that allow users to run arbitrary Prolog goals become subject to DoS attacks.

  • ENHANCED: Speedup arithmetic comparision in non-O mode.

[Sep 25 2023]

  • PORT: Partial work to allow MSVC build under Conda. This patch works around issues for CMake FindThreads.cmake. It also explicitly enables MSVC `/MD` to compile the packages if threading is enabled.
  • BUILD: Runtime configuration during boot for Windows As, on Windows, we install all DLLs in the same directory we do not need to add the package bin dirs to the foreign search path. But, we must use prolog_to_os_filename/2 to ensure proper handling of the search based on the executable.

[Sep 18 2023]

  • FIXED: #1197 function cmpr failing for negative values.

[Sep 17 2023]

  • FIXED: #1097 ctrl-C in read causes exit from REPL Fix consists of two parts. (1) if something (libedit) already set the stream error condition, make S__fillbuf() return with an error immediately and (2) do not abort the main query loop if we get an abort request.

[Sep 16 2023]

[Sep 12 2023]

  • ENHANCED: Allow interrupts during evalExpression()
  • PORT: Make new stuff work again using MSVC

[Sep 11 2023]

  • ENHANCED: dark theme arithmetic used blue on black. [no ci]

[Sep 10 2023]

  • PERFORMANCE: Add shortcut to PL_unify_number() Add a shortcut for the typical case where the number is a small integer, the target is a variable and we are not short on stack space.
  • PERFORMANCE: Simplify clearNumber() Notably improves performance for float arithmetic.

[Sep 8 2023]

  • FIXED: Memory leak in PL_put_term_from_chars() fast route. This function implements a fast route for integers and rationals and leaked the GMP/LibBF object for rationals and large integers.
  • ENHANCED: PL_get_float() to raise a float overflow on too large rational.

[Sep 7 2023]

  • BUILD: Added scripts/configure This script is used for a long time to maintain multiple versions under the same source tree. See script for details. [no ci]
  • PORT: Work around broken MacOS versions lacking <term.h> Reported by Matthias Gondan after failing build for CRAN
  • FIXED: PL_get_nchars() and friends CVT_INTEGER handling Broken in 2ac1553770ac1a9d6753b8b6e72ac2028815a028
  • ADDED: PL_get_nchars(): CVT_XINTEGER Allow converting numbers to hexadecimal strings.

[Sep 6 2023]

[Sep 5 2023]

  • DOC: open/4 reposition option.
  • MODIFIED: Disable toplevel variables if the flag toplevel_var_size is 0

[Sep 4 2023]

  • ENHANCED: Performance of nth1/3 and nth0/3 for mode (-,+,?)

[Sep 1 2023]

  • PORT: Remove emacs module declarations from SWI-Prolog.h The symbols must be exported, but we should not declare them as part of the API as that prevents building the sweep module. In MSVC the linkage options for exported and imported data is different.
  • FIXED: Recompilation logic may use an erased clause If the newly compiled clause is equal to the "current" clause, the new clause is destroyed and the old is kept. We must however check that the "old" is not yet erased.
  • FIXED: Message translation for trace(Head, Ports) Got getting location of predicate wrong and ansi_hyperlink/3 printed the URL rather than the label if the terminal does not support hyperlinks.

[Aug 30 2023]

  • ENHANCED: Avoid dependency of library(ansi_term) on package clib
  • ENHANCED: ansi_get_color/2 to use stream timeouts Old version used call_with_time_limit/2, but this is in a library, pulls in a shared object dependency and requires threads.
  • BUILD: Allow building the manuals in non-Unix environments.

[Aug 29 2023]

  • PORT: Find local home mor flexible. Normally swipl is in src, but using some backends there can be a configuration directory in between.
  • PORT: Property configure threads for packages.

[Aug 28 2023]

  • FIXED: bf_set_ui(): uint32_t >> 32 is undefined.
  • CLEANUP: signed/unsigned and other warnings for bf_gmp.c
  • CLEANUP: Resolve signed/unsigned comparison and negation of unsigned ints.

[Aug 27 2023]

  • PORT: Make multi-threading work with MSVC version - Allow using vcpkg package pthreads for threading. - Port atomic operations to use teh MSVC _Interlocked* intrinsics - Sync thread config for swipl-win.exe with libswipl.dll.

[Aug 26 2023]

  • PORT: Make LibBF compile using MSVC Now compiles with many warnings. Basics seem to work.

[Aug 28 2023]

  • PORT: Empty struct support for pl-wam.c
  • FIXED: set_prolog_gc_thread/1: no-op in the single-threaded version.

[Aug 20 2023]

  • PORT: Introduce free() for LibBF memory management. LibBF uses realloc(ptr,0) rather than free, but this is not-portable and flagged by the latests versions of valgrind.

[Aug 22 2023]

  • BUILD: Work around problem generating Unix Makefiles

[Aug 21 2023]

  • CLEANUP: `Remove swipl.home and swipl.rc from the source root dir.

[Aug 16 2023]

  • PORT: Fix various warnings generated by MSVC2022
  • BUILD: Simplify build_home.pl
  • BUILD: More patches to allow building as a CMake subdir. These patches notably deal with the package locations and documentation.

[Aug 15 2023]

  • BUILD: Allow building as a sub project from a larger CMake project This patch replaces use of CMAKE_SOURCE_DIR with CMAKE_CURRENT_SOURCE_DIR, so we can do
    add_subdirectory(swipl)

    in a larger project.

  • BUILD: Allow building as a sub project from a larger CMake project This patch replaces use of CMAKE_SOURCE_DIR with CMAKE_CURRENT_SOURCE_DIR, so we can do
    add_subdirectory(swipl)

    in a larger project.

  • FIXED: Typo in check_installation/0 (syntax error)
  • PORT: WASM: Do not try to get ioctl support.

[Aug 11 2023]

  • PORT: Further refine terminal support detection. Recent regression cause tty_size/2 to be undefined on systems where it can be supported.
  • ENHANCED: Compile all plugins using -fvisibility=hidden
  • ENHANCED: Use visibility attribute for install_t This allows compiling plugins with gcc -fvisibility=hidden, reducing the risc for symbol conflicts and reducing load time.

[Aug 9 2023]

[Aug 7 2023]

  • DOC: Clarify some details of blob and I/O functions
  • PPA: Dropped kinetic, added lunar

[Aug 3 2023]

[Aug 2 2023]

  • PORT: When using Macports for dependencies, set the cmake FrameWork search path
  • PORT: Disable swipy (janus) if CMake is older than 3.18.

[Aug 1 2023]

  • TEST: Avoid crash in unicode save/load test when pldoc is loaded. This is a work-around for an issue in PlDoc interacting with qcompile/1.

[Jul 28 2023]

  • ADDED: Return value PL_S_NOT_INNER when acting on non-inner query This return code may be generated by PL_next_solution(), PL_cut_query() and PL_close_query(). This is a first step making the query interface more robust against misuse.
  • ENHANCED: use_foreign_library/2 to support options This patch provides standard option support for open_shared_object/3 and passes options from use_foreign_library/2 to this predicate. This allows for e.g.
    ?- use_foreign_library(foreign(mylib), [visibility(global)]).

[Jul 26 2023]

[Jul 25 2023]

  • ADDED: PL_free_blob() This may be used to remove the data from a PL_BLOB_NOCOPY typed blob, calling the release() function immediately.
  • MODIFIED: PL_call() now passes exceptions This function used to trap the debugger and discard the exception.

[Jul 23 2023]

  • MODIFIED: PL_get_chars() and friends: use numbervars When using CVT_WRITE* option, the variables are numbered first if possible. That results in more compact, readable and reproducible output.
  • ADDED: Support functions for PL_put_dict() The functions _PL_cons_small_int() and _PL_unregister_keys() allow for (small) integer keys to dicts from C.

[Jul 21 2023]

  • ADDED: PL_for_dict() API This API enumerates the key/value pairs of a dict using a callback. It has been in use internally since dicts were added to the system.

[Jul 18 2023]

  • FIXED: Locale handling for error messages based on strerror() These strings are in the current locale and must thus be converted to Unicode for generating the Prolog exeption.

[Jul 17 2023]

  • FIXED: #1184 Load/save (qlf and saved states) for LibBF based bignums This patch provides QLF support for big integers and rational numbers when compiled with LibBF. The file format for the LibBF and GMP based versions is the same and therefore saved states and .qlf files that contain such numbers are portable between the two versions.

[Jul 15 2023]

  • MODIFIED: Allow Prolog data manipulation from tracer callback

[Jul 12 2023]

  • FIXED: #1185 read_term/3: comments are truncated on first 0-byte

[Jul 7 2023]

  • PORT: LibBF: Support quick load format for big integers ans rationals. Big integers and rationals are now saved if LibBF support is used for unbounded integers and rationals. The saved format is identical to the format used by the GMP version.

[Jul 5 2023]

  • PORT: Drop tty_goto/2 and related predicates if the term.h is not provided Reported to happen on MacOS using clang-15. The status of tgetent() that supports these predicates is rather unclear. Docs say they might be discontinued, so more extensive checking that they are really available seems justified.

    This patch keeps tty_size/2 if possible (depends on ioctl()).

[Jul 3 2023]

[Jun 5 2023]

  • ADDED: indicate DCG rules in xref_defined/3 This makes xref_defined(Src, Head, How) succeed (also) with How = dcg for DCG grammar rules.

[Jun 3 2023]

  • MAINTAIN: Add CI based on Github workflows

[May 31 2023]

[May 30 2023]

  • FIXED: Avoid closing a stream with an alias If a stream-handle is created for a stream with an alias (e.g., by stream_property/2), the stream would be closed if this handle is garbage collected.
  • ENHANCED: library(macros) to leave `#Var` alone.

[May 25 2023]

[May 24 2023]

[May 22 2023]

  • MODIFIED: Removed undocumented rename_predicate/2 hook. This hook was used to be able to wrap predicates. That is currently achieved more reliable and dynamically using wrap_predicate/4.
  • FIXED: Ensure expand_term/2 cannot alter the current source location.
  • FIXED: #1174: read_pending_codes/3: release stream on EOF or error.

[May 20 2023]

  • DOC: details about building packages

[May 17 2023]

  • ADDED: trap/1: aliases for det and =>. Expandable.

[May 16 2023]

  • MODIFIED: top_sort/2, deleted top_sort/3 added ugraph_layers/2 top_sort/3 was deleted due to mismatch of documentation and implementation for the order of the difference list arguments. The docs give a replacement.

    top_sort/2 now returns vertices from the same layer in input order, i.e., in standard order of terms.

    ugraph_layers(+UGraph, -Layers) returns the topogical sorted result as a list of layers. I.e., all legal toplogical sorts can be established by creating permutations for the layers.

[May 15 2023]

  • FIXED: catch/3 debugger interaction. In debug mode it was possible for catch/3 to not finish the catch if the goal succeeded deterministically due to CHP_DEBUG choice points.
  • CLEANUP: Remove very old work-around for clang bug.

[May 3 2023]

  • WASM: Get the link options for the various targets ok. This notably passes `-s STACK_SIZE=1048576` as the default 64K is too small for SWI-Prolog. The patch reorganises assembling the link option lists for better sharing of common options.
  • BUILD: By default implement VM instructions using functions for clang On recent versions of clang (14,15), the code produced using VM instructions as functions rather than a big switch is faster.

[May 2 2023]

  • BUILD: Generalize configuration of C-stack limit
  • BUILD: Added ccache support Currently disabled for Emscripted as that seems to do its own caching these days.
  • WASM: Removed export Pointer_stringify. Compiler complains and it is (no longer) used.

[May 1 2023]

  • FIXED: absolute_file_name/3: allow for duplicate options. This change also affects other predicates that use the Prolog built-in option handling.

[Apr 26 2023]

[Apr 25 2023]

  • ADDED: print_term/2: option auto_indent_arguments(Int) With this option (defaults to 4), dicts and compounds that are too wide ands whose funtor is at least twice this width, have their arguments printed on the next line.

[Apr 21 2023]

  • PORT: When using -DSTATIC_EXTENSIONS=ON, drop usage of dlopen() This is required for recent versions of Emscripten that give a runtime error on the usage of dladdr().

[Apr 20 2023]

  • TEST: Added test for #1168
  • FIXED: Issue#1168: race condition betweem abolish and CGC Clause Garbage Collection concurrent with abolish/1 could leave the predicate with erased clauses while it was not marked dirty. As a result, a subsequent attempt to assert/1 to this predicate results in an error trying to amodify a static predicate. Reported by Paulo Moura.
  • TEST: Create a new test directory to improve concurrency while testing.

[Apr 19 2023]

  • ADDED: Issue#1019: PL_put_wchars().
  • TEST: Fix and disable some tests when running under Wine.

[Apr 18 2023]

  • PORT: Demand C11 early

[Apr 14 2023]

  • DOC: Document issues with standard order on rational trees.
  • DOC: Issue#1164: clarify answer_write_options flag.

[Apr 12 2023]

  • DOC: Prolog flag toplevel_residue_vars.
  • FIXED: Addresses #1160, residual constraints in tuples_in/2 from clp(fd). Patch by @triska for Scryer Prolog.

[Mar 26 2023]

  • FIXED: Windows exists_file/1 and exists_directory/1 domain error. Avoid Domain error: `foreign_return_value' expected, found `-1'. Document that invalid names cause silent failure.

[Mar 24 2023]

  • MODIFIED: statistics/2 cputime and infereneces to include completed "child threads". This patch causes threads to keep track of their "creator" thread. If the creator still exists when a thread dies, the time and inferences are recorded with the creator and reflected in the statistics keys. The new keys self_cputime and self_inferences provide the original.
  • BUILD: When using -DSTATIC_EXTENSIONS=ON, do not install the libraries. This implies plugins are not installed as *.a files and libswipl.a is not installed. Only bin/swipl and the Prolog libraries and support files are installed.
  • FIXED: swipl.cmake syntax error

[Mar 23 2023]

  • BUILD: Only setup CMake rpath stuff if the Prolog core is a shared library. This allows building a completely static executable without RPATH/RUNPATH.
  • ENHANCED: Better error if process argv cannot be processed in current locale.

[Mar 22 2023]

  • FIXED: Using PL_new_atom() before PL_initialise() Lazy initialization of the atom infrastructure must initialize threads.
  • ADDED: PL_new_blob()

[Mar 16 2023]

  • PORT: Msys2 & Win, static build dependencies

[Mar 13 2023]

  • FIXED: recorded/2,3: If the first record was marked erased it is still reported.

[Mar 10 2023]

  • PORT: Do not link to dladdr() if not available.
  • BUILD: Allow for CMake to provide list of packages explictly as e.g. -DSWIPL_PACKAGE_LIST="clib;plunit"
  • MODIFIED: PL_qlf_* functions to use the normal public API function naming and calling conventions.
  • ADDED: PL_qlf_put_atom() and PL_qlf_get_atom(). Both functions may only be used from callbacks to blobs save/load hooks.
  • MODIFIED: names for integer exchange functions to qlf files.
  • MODIFIED: Stop exporting PL_qlf_getInt32() and its put version. They are not needed and easily implemented.
  • MODIFIED: Stop exporting PL_qlf_getString() and PL_qlf_putString(). These functions are too simple to write using e.g. Sfwrite() and Sfread() while the interface regarding lifetime if PL_qlf_getString() is not suitable for public use.
  • FIXED: Qlf save/load of Unicode text on Windows. Also makes the Qlf format portable between POSIX and Windows for wide strings using Unicode plane 1.

[Mar 9 2023]

  • TEST: Test load/save .qlf files. Current test deals with Unicode.
  • ADDED: profile/2: options sample_rate(+Rate) and ports(+Ports).

[Mar 7 2023]

  • FIXED: Prevent callbacks to Prolog from a thread running the atom garbage collector. Such callbacks may be initiated from blob release handlers.
  • FIXED: Windows: handle UNC paths properly.

[Mar 5 2023]

  • MODIFIED: engine_next_reified/2 to return an exception as throw(Exception) rather than exception(Exception). Compatibile with e.g. call_time/3.
  • FIXED: When using single threaded engines we must scan all engines during atom and clause GC
  • ADDED: Allow building using -DMULTI_THREADED=OFF -DENGINES=ON This provides engines without threads. This is merely a proof of concept. It proofs that the code changes are quite minimal. A full version requires more work:
    • Probably we should also remove message queues and thread signals.
    • Do we want thread-local predicates in engines? Actually that is also a question for the multi threaded version. Probably we need an option to engine_create/4.

    This spreads a lot more #ifdef in the code. Luckily mostly limited to pl-thread.h and pl-thread.c. Requires further cleanup by moving more functions and declarations under the same conditonals together and possibly split some stuff to a new file, e.g. move mutexes and possibly later message queues and signals to their own file.

[Mar 4 2023]

  • CLEANUP: There is no need for using the lingering structures to delay unallocation for some usage in single threaded mode. Split into linger_always() and linger().

[Mar 5 2023]

  • FIXED: Possible error getting stack trace.

[Mar 4 2023]

  • TEST: Disable pipe test when running under Wine.
  • TEST: Prevent test from failing of concurrent threads are active.
  • ENHANCED: sleep/1: sleep(0) just does sched_yield() if possible.
  • CLEANUP: Use new style foreign language interface for predicates from pl-sys.c.

[Mar 3 2023]

  • ENHANCED: If we fail to print an exception message through print_message/2, print the raw exception.
  • FIXED: Make last resort stack resize work and (also) apply it if an exception is being processed.

[Mar 1 2023]

[Feb 28 2023]

  • ADDED: argv_options/3: allow for optional long options by allowing for a boolean in the disjunctive type.

[Feb 27 2023]

  • DOC: Clarify exceptions behavior
  • DOC: add a few background papers
  • FIXED: det/1 and friends to propagate the expectation in last calls to a meta predicate.
  • FIXED: XSB emulation no longer needs subseq/3 as that is now in our library(lists) as well.
  • TEST: Fixed tests to comply with e23c141be2f071b450f0d39981ac53251e1bd4f1 in debug mode.

[Feb 24 2023]

  • MODIFIED: Writing \ quoted without character_escapes should not double the \. This bug was introduced with cbe691f8af61ccaf466147868a316b96c110fedb to "fix" term_to_atom('a\\b', A) to produce A = 'a\\b' (which is quoted again by the toplevel to produce A = '\'a\\\\b\''. The issue is that term_to_atom/2 using PL_write_term() with PL_WRT_QUOTED, but not PL_WRT_CHARESCAPES. There is now a new flag PL_WRT_NO_CHARESCAPES. If either flag is given, we explicitly enable or disable character escapes. If none is given, the behaviour depends on the global (module user) value of the character_escapes flag.

    This implies that e.g. term_to_atom('a\nb', A) used to produce a quoted atom with a plain newline, while in the new version the newline is escaped as \n.

    Many foreign libraries using PL_write_term() or PL_get_chars() using CVT_WRITE did not use character escapes while they do now. As long as the output is read by Prolog the result is the same.

[Feb 26 2023]

  • FIXED: with_output_to/3: need to restore the streams while redirected to avoid leaking the stream handle because it remains referenced.
  • FIXED: tty_get_capability/3: memory leak.
  • FIXED: Memory leak in peek_string/3.
  • MODIFIED: Renamed exception processing hook prolog_exception_hook/4 into prolog_exception_hook/5, providing an additional argument that contains the current setting of the debug flag. Note that we cannot ask for this flag as the hook runs in "nodebug" mode. As the change is incompatible anyway, we also move the hook to the prolog module where the modern system hooks live. The new argument is used by library(prolog_stack) to make catch/3 behave as catch_with_backtrace/3 when in debug mode if the "guard" debug is defined (default). If this is not desired, use
    :- use_module(library(prolog_stack)).
    :- retractall(prolog_stack:guard(debug)).

    Code that use the old hook must rename the predicate and add the Debug argument. Code that wishes to be compatible with old and new Prolog can implement both hooks.

[Feb 23 2023]

  • FIXED: error propagation of call_time/2 and updated docs.
  • MODIFIED: call_time/3 to not rethrow the exception but return it in the status reification as throw(Error).

[Feb 22 2023]

  • ADDED: base64_encoded/3: added charset(openbsd), implementing the OpenBSD alphabet for base64 encoding Needed for bcrypt implementation in packages/ssl
  • FIXED: Provide (dummy) profiling interface for foreign code if profiling is not supported.

[Feb 21 2023]

  • ENHANCED: explain/1 to report predicates as non-terminal if this is known.

[Feb 20 2023]

  • ENHANCED: Use 64 bit counters for profiling.

[Feb 19 2023]

  • FIXED: Issue#122: unification can create unsatisfyable or nodes.

[Feb 18 2023]

  • ADDED: library(lists): subseq/3.
  • WASM: make prolog compatible with emsdk 3.1.31
  • FIXED: profiler port counts for redo and fail. Rather than trying to count redo, we now count fail and compute redo from call+redo = exit+fail. Note that a call can be matched with at most one fail.

[Feb 13 2023]

[Feb 12 2023]

  • DOC: Better explanation for list iteration by Peter Ludemann.

[Feb 10 2023]

  • PORT: Silence tcmalloc except for Linux. Not ported to Windows and conflicts with libc on MacOS.

[Feb 9 2023]

  • ADDED: halt/1 to accept signal names as status code. This causes an exit with status 128+signum.
  • FIXED: make halt(abort) really ignore halt cancellation.

[Feb 8 2023]

  • DOC: Clarify some details of PL_put_list(), PL_cons_list(), PL_unify_list() and modify some sample code

[Feb 6 2023]

  • DOC: Issue#1116: typo in example.

[Feb 1 2023]

  • FIXED: LibBF: bug in mpz_rootrem() optimization Tripped over case when rop same as OP in degenerate case. Also replace mpz_sub_ui with mpz_add_si since argument op_sign is signed.

[Jan 30 2023]

  • FIXED: If locking mutexes can be interrupted, handle signals and exceptions properly.

[Jan 27 2023]

  • PORT: fix cat2 test for windows
  • DOC: Point at the Prolog flag tmp_dir from the predicates that create temporary files.
  • DOC: Document all environment variables that control running the test suite.

[Feb 14 2023]

[Feb 13 2023]

[Feb 12 2023]

  • DOC: Fix typos + fix example code. Make PL_get_nil_ex() explicitly propagate an old exception. Effectively that would have happened anyway.
  • MODIFIED: Move profile interface from library(statistics) to library(prolog_profile), With that we can easily omit installing this library and C API if the system does not support profiling. This is a first rough split, making as few as possible changes.
  • MODIFIED: Deal with return value of the blob save function, propagating a possible exception. Documented the save and load functions. Joined work by Peter Ludemann and Jan Wielemaker.
  • DOC: Better explanation for list iteration by Peter Ludemann.
  • TEST: More sub_atom/5 and sub_string/5 tests.
  • DOC: sub_atom/5, sub_string/5 by Peter Ludemann.

[Feb 10 2023]

  • PORT: Silence tcmalloc except for Linux. Not ported to Windows and conflicts with libc on MacOS.
  • CLEANUP: Remove old Pentium counters based statistics. Especially since we can compile virtual machine instructions to functions we have better mechanisms to achieve the same.

[Feb 9 2023]

  • ADDED: halt/1 to accept signal names as status code. This causes an exit with status 128+signum.
  • FIXED: make halt(abort) really ignore halt cancellation.

[Feb 8 2023]

  • DOC: Clarify some details of PL_put_list(), PL_cons_list(), PL_unify_list() and modify some sample code
  • MAINTAINANCE: Added printf format checking to PL_message() and PL_fatal_error()

[Feb 6 2023]

  • DOC: Issue#1116: typo in example.

[Feb 4 2023]

  • BUILD: Allow building with -DUSE_GMP=OFF -DUSE_LIBBF=OFF

[Feb 1 2023]

  • FIXED: LibBF: bug in mpz_rootrem() optimization Tripped over case when rop same as OP in degenerate case. Also replace mpz_sub_ui with mpz_add_si since argument op_sign is signed.

[Jan 31 2023]

  • DOC: tweak WASM port introductory text

[Jan 30 2023]

  • WASM: Added swipl-bundle-no-data.js, providing SWI-Prolog as bundle (with wasm bundled in js), but no data file, so you must provide the application as saved state.
  • MODIFIED: standard order of terms to use cmpr/2 for comparison, comparing mixed float/rational exact (i.e., as rationals).
  • MODIFIED: min/2 and max/2 functions propagate NaN rather than the concrete value.

[Jan 25 2023]

  • ADDED: functions cmpr/2, minr/2 and maxr/2 that compare mixed float/rationals exact (i.e., after converting the float to rational). The min/max versions propagate the rational in case of a tie and propagate numbers rather than NaN.

[Jan 30 2023]

  • FIXED: If locking mutexes can be interrupted, handle signals and exceptions properly.

[Jan 27 2023]

  • PORT: fix cat2 test for windows
  • DOC: Point at the Prolog flag tmp_dir from the predicates that create temporary files.
  • DOC: Document all environment variables that control running the test suite.
  • TEST: Run unsafe thread_wait tests only if SWIPL_TEST_FAIL_ON_UNLIKELY is set to y.
  • TEST: Run unsafe thread_wait tests only if SWIPL_TEST_FAIL_ON_UNLIKELY is set to y.
  • FIXED: `1Inf` should be invalid syntax.
  • FIXED: `1Inf` should be invalid syntax.

[Jan 26 2023]

  • DOC: Foreign language details. Notable PL_raise_exception().

[Jan 23 2023]

  • FIXED: With float_undefined set to nan, 0/0 must return NaN.

[Jan 20 2023]

  • FIXED: with_output_to/3 to flush the streams before finishing the capture.
  • ADDED: Sdprintf() and friends to accept the t integer size specified for ptrdiff_t.

[Jan 19 2023]

[Jan 17 2023]

  • FIXED: Windows: string_length/2 did not handle UTF16 surrogate pairs correctly.
  • DOC: Document PL_write_term()

[Jan 16 2023]

  • FIXED: Possible deadlock in a transaction commit due to different ordering in locking L_GENERATION and L_PREDICATE locks.

[Jan 14 2023]

  • DOC: fix minor typo

[Jan 26 2023]

  • DOC: Foreign language details. Notable PL_raise_exception().

[Jan 23 2023]

  • FIXED: With float_undefined set to nan, 0/0 must return NaN.

[Jan 8 2023]

  • ADDED: WASM: Create swipl-bundle.js that contains swipl-web.js, swipl-web.wasm and swipl-web.data.

[Jan 4 2023]

[Jan 19 2023]

[Jan 20 2023]

  • FIXED: with_output_to/3 to flush the streams before finishing the capture.
  • ADDED: Sdprintf() and friends to accept the t integer size specified for ptrdiff_t.

[Jan 17 2023]

  • MAINTENANCE: Added checking format templates for Sdprintf() and friends when compiled with -DCHECK_FORMAT. Introduces SdprintfX() and similar functions that are not checked because they use one of the extensions such as %Us or %Ws (UTF-8/wchar_t string).

[Jan 19 2023]

[Jan 17 2023]

  • FIXED: Windows: string_length/2 did not handle UTF16 surrogate pairs correctly.
  • DOC: Document PL_write_term()

[Jan 16 2023]

  • FIXED: Possible deadlock in a transaction commit due to different ordering in locking L_GENERATION and L_PREDICATE locks.

[Jan 15 2023]

  • PORT: unix-like directories under MSYS2

[Jan 14 2023]

  • DOC: fix minor typo

[Jan 13 2023]

  • FIXED: Issue#195: cmpFloatNumbers() for NaN.

[Jan 12 2023]

  • FIXED: Implement A_MPZ and A_MPQ instructions when using LibBF binding. This fixes using such numbers in expressions compiled with optimization enabled. Reported by Rick Workman.

[Jan 11 2023]

  • FIXED: Issue#1091: optimised compilation of clauses containing big integers or rational numbers in expressions.
  • FIXED: Issue#1092: term_hash/2,4 crashes on Unicode strings.
  • ADDED: list_debug_topics/1 to search, only print active topics, etc. This predicate now uses print_message/2. debugging/0 is hooked to show the active topics.
  • ADDED: debugging/0: allow extensions using debugging_hook/0
  • DOC: Fixed PL_Q_CATCH_EXCEPTION interaction with the debugger.
  • DOC: Reviewed and updated foreign language sections on exception handling. Thanks to Peter Ludemann for pointing the many parts of the docs that were unclear or outdated.

[Jan 10 2023]

  • DOC: Added some details for PL_exception()

[Jan 5 2023]

  • FIXED: Issue#1087: crash on inlined unification against a rational number.

[Dec 28 2022]

[Dec 19 2022]

  • PORT: msys2, add %MINGW_PREFIX%/bin to dll path
  • PORT: msys2, do not copy system dlls into home
  • ADDED: Prolog flag msys2 to detect the MSYS2 installation.

[Jan 13 2023]

  • FIXED: Issue#195: cmpFloatNumbers() for NaN.

[Jan 12 2023]

  • FIXED: Implement A_MPZ and A_MPQ instructions when using LibBF binding. This fixes using such numbers in expressions compiled with optimization enabled. Reported by Rick Workman.

[Jan 11 2023]

  • FIXED: Issue#1091: optimised compilation of clauses containing big integers or rational numbers in expressions.
  • FIXED: Issue#1092: term_hash/2,4 crashes on Unicode strings.
  • DOC: Use PlDoc for trace/1,2 documentation.
  • ADDED: trace/1,2: print wall time since call port for other ports.
  • ADDED: list_debug_topics/1 to search, only print active topics, etc. This predicate now uses print_message/2. debugging/0 is hooked to show the active topics.
  • ADDED: debugging/0: allow extensions using debugging_hook/0
  • DOC: Fixed PL_Q_CATCH_EXCEPTION interaction with the debugger.
  • DOC: Reviewed and updated foreign language sections on exception handling. Thanks to Peter Ludemann for pointing the many parts of the docs that were unclear or outdated.

[Jan 10 2023]

  • DOC: Added some details for PL_exception()

[Jan 5 2023]

  • FIXED: Issue#1087: crash on inlined unification against a rational number.

[Dec 28 2022]

[Dec 19 2022]

  • PORT: msys2, add %MINGW_PREFIX%/bin to dll path
  • PORT: msys2, do not copy system dlls into home
  • ADDED: Prolog flag msys2 to detect the MSYS2 installation.

[Dec 18 2022]

  • PORT: Fix crash in walking the Prolog stack for gcc 12 on arm 32-bit. This is caused by padding added in `struct queryFrame between saved_environment and top_frame`

[Dec 16 2022]

  • PORT: Fixed rationalize/1 and cmpFloatNumbers() to fail due to gcc optimization using internal wide float registers rather than comparing 64 bit doubles. Not entirely sure this is our mistake or within GCC's claim to work with the extended float registers. Bottom line is that comparing a double (from memory, so 64 bits) to the result of a computation may return non-equal even if the extended float when forced to 64 bits is equal. This problem surfaced in i386 using gcc 12.2.0.

[Dec 15 2022]

[Dec 12 2022]

  • FIXED: Initialise Prolog flag encoding from locale name. Internal UTF-8 decoding is typically faster than the C library multibyte operations.

[Dec 11 2022]

  • FIXED: clause/2,3: possible GC crash when dealing with moved unification. We cannot have references to the local stack and thus we must allocate the support variable on the global stack.

[Dec 8 2022]

  • ENHANCED: If one of the standard streams of a thread has been closed, rebind the stream to the original process streams. This can happen if, for example, we create a thread while output is redirected to some stream. If now this stream is closed the thread ends up with a closed standard stream.

[Dec 6 2022]

  • PORT: Build MacOS bundle using LibBF based big integers. Somehow the build for the universal binaries covering a large series of MacOS versions (since 10.14) breaks after uograde to MacOS Ventura when linking against libGMP. The results are random segfaults, bus errors and memory corruption.
  • PORT: Build MacOS bundle using LibBF based big integers. Somehow the build for the universal binaries covering a large series of MacOS versions (since 10.14) breaks after uograde to MacOS Ventura when linking against libGMP. The results are random segfaults, bus errors and memory corruption.

[Dec 5 2022]

  • FIXED: Possibly crash in breakpoint callback after GC/shift.
  • TEST: Make thread signal test behave better under high loads.

[Dec 4 2022]

  • PORT: Make C backtraces work on ARM systems that use libunwind or glibc backtrace().
  • FIXED: Error handling if prolog_frame_attribute/3 using parent_frame runs out of stack. Careful review of this function after reported crash on 32 bit arm. Might be due to a stack shift in this code, but I doubt it and cannot reproduce the issue. Surely the current code is safer.
  • DOC: Document prolog_frame_attribute/2 with parent_frame(-Next)
  • TEST: test may result in another error on 32-bit platforms.

[Dec 2 2022]

[Dec 1 2022]

  • FIXED: WASM shell: failure after clearing output.

[Nov 30 2022]

  • UPDATE: Merge devel@b70e1737c01220e258830db17ade553164d5d9d1 - Fixed SSL password hash compatibility - Fixed race condition for creating functor objects - Fixed data corruption in clause/2 when decompiling the head - Fixed updating break table when removing a clause - Updated sweep - Made all sources stricty C11 compatible (gcc -std=c11 -pedantic)
  • FIXED: breakpoint removal when retracting a clause.
  • PORT: Provide MSVC alternatives for MinGW runtime support.
  • DEBUG: Dump Prolog stack on assertion error.
  • PORT: Drop old MSVC #ifdef code in favour of <inttypes.h> on all platforms.

[Nov 29 2022]

  • PORT: Strict C11 support for VM instruction argument declaration.
  • PORT: Avoid GCC empty struct and named variadic arguments for cpp to make pl-wam.c compile under strict C11 standard. This does not solve full portability. pl-codetable.c suffers from related problems.
  • PORT: Fixed compilation for Windows after providing the libswipl patches

[Nov 28 2022]

  • FIXED: Race condition between destroying indexes of thread-local predicates on thread exit and the clause garbage collector.
  • FIXED: Race condition for creating a functor. We must add the functor to the global functor array before we can declare it valid.
  • FIXED: thread_wait/2: race condition in updating threads waiting for a module.
  • FIXED: clause/2: possible error handling H_LIST_FF if there is a GC between handling the head and tail.

[Nov 27 2022]

  • BUILD: Simplify configuration detection in the build environment by exploiting the libswipl flag if it is read-only (and thus reliable).

[Nov 26 2022]

  • ADDED: swipl --dump-runtime-variables to provide the name of the shared object in PLLIBSWIPL.
  • ENHANCED: Set the Prolog flag libswipl based on dladdr() when possible.

[Nov 25 2022]

  • PORT: The C11 standard does not allow for empty structs.

[Nov 24 2022]

  • SNAP: CMAKE_INSTALL_LIBDIR seems undefined inside snapcraft, causing the build to fail.
  • SNAP: Latest snapcraft sets LD_LIBRARY_PATH to provide access to the "parts". We should not consider this a broken environment.
  • DOC: Fixed LaTeX issues blocking the generation of the PDF manual.
  • TEST: Avoid name conflict between two tests to make test_installation/0 work again.
  • ENHANCED: library(main) to delay looking for tspy/1 or gspy/1 until the option is activated.
  • FIXED: Make X11 event dispatching work in single threaded version.
  • TEST: Avoid testing stuff that requires threads in the single threaded version.
  • CLEANUP: Do not compile code required for multi-threaded loading in the single threaded version.

[Nov 23 2022]

  • DOC: format/1-3: document behavior of `~0f`.
  • CONFIG: Do not install thread libraries for single threaded version.
  • MODIFIED: When ISO mode is enabled, unknown options are result in a domain error. This now also holds if the option argument is a dict.
  • MODIFIED: Ssprintf() and Ssnprintf() functions now use UTF-8 encoding (used to be ISO Latin 1), so they can handle Unicode.
  • ENHANCED: Use xref_source/2 for fetching PlDoc comments from loaded sources. Patch by @swi.
  • PORT: Provide backtrace with line numbers on MacOS using atos as replacement for addr2line.

[Nov 21 2022]

[Nov 19 2022]

  • PORT: More integer passing problems over vararg functions.
  • FIXED: Prolog flag pid on some 64 bit platforms.
  • PORT: Use CMake to test for <threads.h> support.
  • MAINTENANCE: Provide a Prolog flag asan when the system is compiled with AddressSanitizer.

[Nov 16 2022]

  • INSTALL: When using -DSWIPL_INSTALL_IN_LIB, make sure that the CMake export files can be relocated.

[Nov 14 2022]

  • WASM: Avoid undefined HTMLCollection.toList(). Emacs whitespace update
  • MODIFIED: pack_install/1 and friends to pass all environment variables to the tools that may be executed to build the pack.
  • PORT: Issue#1070: pack_install/1: Pass PKG_CONFIG_PATH to build tools

[Nov 13 2022]

  • FIXED: format/2,3: manage proper arithmetic environment for expressions.

[Nov 9 2022]

  • PORT: Make LibBF code compile for Clang

[Nov 8 2022]

  • FIXED: fetch/restore of Mersenne Twister random state. Also reduced the size of the state.
  • MODIFIED: **/2 and ^/2: If the power can be done using rational arithmetic but the numbers are too big, make the behaviour depend on max_rational_size_action. When float, try to continue after float conversion, else raise a resource error.
  • FIXED: **/2 and ^/2 overflow checking when computing the power of two rational numbers.

[Nov 7 2022]

  • ENHANCED: Prefer mpz_sgn() over mpz_cmp_ui() to 0.
  • ENHANCED: Key generation for bignum and rational clause indexing

[Nov 4 2022]

  • ADDED: BF_FTOA_PL_QUIRKS for correct float formatting.

[Nov 3 2022]

  • MODIFIED: CMake target_link_swipl() now removes the lib prefix.
  • PORT: Updated MacOS dependencies
  • FIXED: swipl.cmake outside pack_rebuild/2 context gets linking against libswipl wrong.

[Oct 30 2022]

  • FIXED: Issue#163: -s and -l files were loaded before the argv Prolog flag is cleaned.

[Oct 26 2022]

  • ADDED: prolog_walk_code/1: option walk_meta_predicates(+Boolean) to prevent the code walker from considering meta-predicates. There are few cases where this is interesting, but it was needed for constructing a s(CASP) dependency graph.

[Oct 24 2022]

  • DOC: Document (part of) the PL_cvt_i_*() functions and improve documentation for several of the PL_get_*() and PL_get_*_ex() functions.

[Oct 22 2022]

  • ADDED: PL_get_bool() now also accepts the integers (0,1)

[Oct 21 2022]

  • PORT: set RPATH correctly on MacOS for native libs in packages

[Oct 19 2022]

  • ADDED: PL_cvt_i_llong() PL_cvt_i_ulong() and PL_cvt_i_bool(). This completes the types supported by these functions.

[Oct 20 2022]

  • ADDED: listing/1,2 to also accept a clause reference as entity to list.

[Oct 11 2022]

  • INSTALL: control registry view with CPACK_NSIS_ONINIT_REGVIEW

[Oct 18 2022]

  • FIXED: Possible crash due to mistake in handling `--home` changes.

[Oct 17 2022]

  • FIXED: Issue in recursion checking of print_message/2.
  • PORT: Include Emacs interface in MacOS bundle
  • MODIFIED: Removed an ancient mechanism for finding the Prolog home directory from a magic string in the binary. Changed plain -home to print the home directory and exit (used to ignore and run).

[Oct 15 2022]

  • WASM: Maintain a stack of open queries such that we can detect when we act on a query that is not the innermost. Currently only prints to the console.
  • WASM: By default load scripts and files into the user module.
  • PORT: Emscripten does not set CMAKE_EXECUTABLE_FORMAT. As all this is meaningless with statically linked WASM version we do not set the executable_format and libswipl flags
  • ADDED: prolog_walk_code/3 option on_edge which is similar to on_trace, but provide easier to understand source locations.

[Oct 14 2022]

[Oct 12 2022]

  • FIXED: Big integer to float (mpz_to_double()) to_nearest, half to even rounding and also a couple of minor cosmetic changes.

[Oct 13 2022]

[Oct 11 2022]

  • ADDED: new flags executable_format and libswipl New read-only Prolog flags determined at swipl compile time. These flags are intended to allow package sweep to determine if libswipl needs to be loaded ahead of sweep-module (when executable_format=elf), and if so to locate libswipl.

[Oct 12 2022]

  • WASM: Shell: make edit/1 work to show source of the libraries.
  • WASM: Shell: allow collapsing the answers to a query.
  • WASM: Enhanced :=/2: get global variables using eval() such that it also works on Node and raise a Prolog exception in case something goes wrong.
  • WASM: Shell: add splitter to allow changing the distribution of the output and editor.

[Oct 11 2022]

  • WASM: make shell demo console output more structured.

[Oct 10 2022]

  • WASM: Shell: add examples from the server
  • WASM: Added fetch/3 as public function of library(wasm).
  • WASM: Cleanup js_script/2 to simply call _ := eval(String). This also makes this work in Node.
  • WASM: Make Prolog.call() and Prolog.forEach() call by default in the user module rather than system.

[Oct 12 2022]

  • FIXED: help/1: avoid problems with modules that are also section labels. @swi.

[Oct 7 2022]

  • WASM: Use CodeMirror in shell.html (from CDN such that we do not need to grow our distribution).

[Oct 9 2022]

  • WASM: Make local compilation not use sig_atomic/1 as that breaks yielding and we have no signals anyway.
  • ADDED: Support conditional compilation in boot/init.pl

[Oct 8 2022]

  • DOC: updated manual section about GNU Emacs interfaces
  • ADDED: flag libswipl_dir holding the installation dir of libswipl

[Oct 7 2022]

  • WASM: Extend data transformation in :=/2 and improve documentation.
  • FIXED: WASM: await if the promise returns a compound term or list.
  • WASM: :=/2 should pass a list as data instead as a call on '[|]'(h,t).

[Oct 6 2022]

  • WASM: Documentation updates and LaTeX fixes to the docs.
  • WASM: Do not use undocumented interfaces in test/demo.
  • WASM: Issue#1052: make output of Prolog.query().once() easier to handle.
  • FIXED: help/1 for normal built-in predicates (broke after support for user predicates). Patch by @swi.

[Oct 4 2022]

  • ADDED: Colour test/1 and test/2 heads and classify them as tests when inside a unit test body.
  • ADDED: library(prolog_xref): Make aware of unit tests
  • ADDED: Allow help/1 on user predicates. Contributed by @swi
  • ADDED: make_reload_file/1 to make correct reloading of a file public.

[Oct 3 2022]

  • TEST: Add additional float rounding test cases for various integer sub-types.
  • ENHANCED: New (faster) function for converting bigints (MPZ) to float Also includes minor adjustments for some mpz_fdiv rounding modes.
  • DOC: Fixed LaTeX errors

[Sep 23 2022]

  • ENHANCED: Replace mpz_fdiv() with a version that rounds to nearest.
  • CLEANUP: Introduce mpz_to_double()

[Oct 2 2022]

[Oct 1 2022]

  • PORT: swipl --abi-version: VM signature hash depended on big/little endian.

[Sep 28 2022]

  • ADDED: PL_atom_mbchars() to extract text from an atom in various encodings.
  • ADDED: PL_cvt_i_[u]int32() for consistency.
  • PORT: Avoid false alarm warning from gcc on 32-bit Windows.
  • PORT: Windows: fixed compilation of the DDE interface after adding FUNCTOR_error1 to the core system.

[Sep 27 2022]

  • FIXED: Instantiation error in cross-referencer.

[Sep 26 2022]

  • FIXED: xref_source/1: avoid lazy definition of predicates in user by calling predicate_property(user:Goal, ...).
  • FIXED: prolog_set_IO/3: stderr wrapper interpreted return code from low-level output wrong. This causes problems if output is connected to a socket as used by prolog_server/2.

[Sep 24 2022]

  • ENHANCED: Make toplevel quit nicely if the I/O streams are in error state.
  • ADDED: stream_property(S, error(Boolean)).

[Sep 25 2022]

  • PORT: Msys2, fix LibDir for swipl in build env

[Sep 23 2022]

  • ADDED: sweep package - integration with GNU Emacs
  • FIXED: Windows: directory_files/2 and other directory access for long paths. Fixed by @mgondan1. Thanks!
  • ENHANCED: portray_clause/1: add space after (?- goal).
  • WASM: Avoid error on HTMLCollection on node

[Sep 22 2022]

  • FIXED: Windows: long file support was broken again.
  • FIXED: Handle reexport/1 and reexport/2 properly in multi-file .qlf files. Reported by @swi.
  • DOC: syntax error handling in conditional compilation.

[Sep 21 2022]

  • ENHANCED: ^ and ** arithmetic operator optimization for small integer use cases to avoid relying on GMP. This patch also uses integer exponentiation when compiled without GMP when possible and handles all special cases compatible with the GMP based version.

[Sep 22 2022]

  • ENHANCED: Use __builtin_mul_overflow() when available to do fast overflow-safe multiplication.
  • TEST: Silence syntax error on a rational number when compiled without rational support.
  • MODIFIED: When inside code fragment under conditional compilation where the code is ignored, do not report syntax errors.

[Sep 21 2022]

  • WASM: Added CHAT80 demo.
  • FIXED: Prolog.Compound.toJSON()
  • WASM: Avoid dependency on HTMLCollection to run on node.
  • MODIFIED: WASM: Prolog.consult() now calls load_files/1, allowing it to handle a mixture of local files, URLs as well as Prolog sources and .qlf files. The sources are now processed sequentially and are no longer materialised as files.
  • DOC: Improved WASM documentation.

[Sep 16 2022]

  • ADD: License to CBG Chords example

[Sep 20 2022]

  • ADDED: qcompile/2: option include(user). This option allows for compiling an application into a single Prolog .qlf file.
  • ADDED: load_files/2: option if(Cond) is extended with exists to silently not load a file if it does not exist.
  • FIXED: det/1 was not declared as a proper meta-predicate.

[Sep 19 2022]

  • WASM: Allow translation of JavaScript ArrayBuffer into a Prolog byte-string. This allows extracting binary data from Response.blob() and is used by the WASM compilation hook to allow loading `.qlf` files from URLs.
  • BUILD: Allow building with AddressSanitizer on Clang. Based on patches by Alessandro Bartolucci. Thanks!
  • DOC: More WASM documentation.
  • ENHANCED: notrace/1: avoid callback through C. This avoids possible C stack overflows and allows yielding from below notrace/1.
  • MODIFIED: WASM: Renamed js_yield/2 to await/2 and js_can_yield/2 to is_async/2.
  • FIXED: Possibly dangling tref->trie pointer when shared tabling creates the same variant table in two threads and disposes one of them. This hopefully addresses issue#1041. It surely fixes a bug though.

[Sep 18 2022]

  • FIXED: Possible corruption of tries. By using PL_BLOB_UNIQUE we good reuse an atom after freeing the trie and creating a new one at the same address. As we save the symbol anyway, making use of unique atoms is meaningless here.

[Sep 17 2022]

  • WASM: Make '$confirm'/2 hookable and implement it by means of the browser confirm() function.
  • WASM: Make URL compilation work on slow connections and connections that do not provide a modification time through a HEAD request.
  • FIXED: Exception preservation in undo/1

[Sep 15 2022]

  • WASM: Allow compiling from a URL.
  • WASM: js_yield/2: if the result is a single JavaScript string, return it as a Prolog string for reducing garbage.

[Sep 16 2022]

  • FIXED: source_file/2 in mode (-,+) never reported any files. Breaks coverage analysis tool.
  • FIXED: on_signal/3 for SIGINT called the handler asynchronously. This should only happen if SIGINT is bound to the debug handler. Reported by Raivo Laanemets.

[Sep 15 2022]

  • WASM: Added is_object/1,2 to test Prolog terms for being a JavaScript object reference (of some class).
  • WASM: Added pseudo function instanceof() to expression evaluation.
  • WASM: Ported Paul Brown's Tau-Prolog example.
  • ADDED: library(dom), providing Tau-Prolog compatible DOM interaction. Partial implementation.
  • WASM: Added Prolog.load_string() and Prolog.load_scripts()
  • WASM: Typos in docs and mixup of arguments in rational numbers.

[Sep 14 2022]

  • WASM: Re-implement sleep/1 using an abortable Promise.
  • WASM: Introduce the notion of abortable promises.
  • WASM: Wrap js_yield/2 to forward exceptions.
  • DOC: Started adding WASM documentation to main manual
  • WASM: Added js_can_yield/0.
  • WASM: Use a WeakMap rather than additional attributes to get the reverse object --> id mapping
  • WASM: Return all objects except for instances of "Object" by reference rather than as a dict.
  • WASM: Print blobs that embed JavaScript objecs as <js_Class>(Ref) rather than <js_object>(Ref).
  • ADDED: js_yield/2 may be passed a promise, causing Prolog to wakeup when the promise is resolved.

[Sep 13 2022]

  • ENHANCED: PL_unify_bool() accepts same atom values as PL_unify_bool_ex() and PL_get_bool()

[Sep 12 2022]

  • ENHANCED: js_yield: get return value as term.
  • ENHANCED: js_yield: allow passing a term rather than a string.
  • INSTALL: Windows: Copied deleting the Uninstall registry key to the 64 bit section.

[Sep 11 2022]

  • WASM: Much restructuring to prolog.js. Add Prolog.forEach() and Prolog.abort() to remain responsive when running slow queries.

[Sep 12 2022]

  • FIXED: Backtracking after a foreign yield.

[Sep 10 2022]

  • DOC: remove outdated restriction regarding [] and {} as operators

[Sep 9 2022]

  • ENHANCED: colourise_db/3: process asserted bodies
  • FIXED: qualify_op/3: recognize [] as an operator. Use SSU rules.
  • CLEANUP: Moved default output routines to the core and Prolog class. Simpified and documented the shell.html and test.html examples.
  • WASM: Simplify starting the WASM version by moving more defaults into swipl-web.js.

[Sep 8 2022]

  • FIXED: Windows: this registry key is not deleted by Uninstaller.exe Unistalling swipl at Windows 10 Add/Remove App window should now work
  • DOC: Add missing failure return info for more more foreign functions.
  • WASM: Use an unbound tag for dicts created from JavaScript objects. If the class is not "Object", bind the Prolog tag to the JavaScript class name.
  • WASM: Introduce classes for Prolog objects we cannot represent naturally in JavaScript such as variables, compounds, etc.
  • CLEANUP: Large rewrite of WASM prolog.js to use ES6 class syntax for the Prolog class.
  • MODIFIED: WASM: representation of rational numbers.
  • WASM: Use `-s BIGINT` to exchange Prolog integers up to 64 bits. Update Prolog.get_integer() to return values as JavaScript number when possible and JavaScript bigint otherwise. Updated Prolog.toProlog() to convert bigint to a Prolog large integer.
  • TEST: Added test for Windows NUL files

[Sep 7 2022]

  • FIXED: Issue#153: Windows: can no longer open reserved files such as nul. Reported by Paulo Moura.

[Sep 6 2022]

  • DOC: Fix typos, clarify return codes and error conditions for many foreign language interface functions (PL_*()).

[Sep 7 2022]

  • FIXED: If creating an atom fails due to invalid representation of the source text (e.g., invalid UTF-8 sequence) we now raise an exception.

[Sep 6 2022]

  • WASM: Using node we by default have no control over the terminal. Need to find out whether it is possible to make that work.
  • TEST: Lower test recursion on systems with limited C stack
  • WASM: Disabled IEEE754 tests as float rounding does not appear to be suported and many WASM float functions are imprecise.
  • WASM: Do not support open(pipe(Command), ...) as popen() is a dummy.
  • FIXED: transaction/1 in single threaded version.
  • ENHANCED: Simplify clause visibility rules with transactions.
  • PORT: Windows: install a copy of libstdc++*.dll while building and add this to the installer if INSTALL_TESTS is active.

[Sep 5 2022]

  • PORT: Be more conservative with C stacks on WASM. Fixes dealing with cyclic terms in assert/1 and friends.
  • BUILD: make_library_index/1 to silently ignore errors from use_foreign_library/1. This works around a dependency issue for building the INDEX.pl files during build. This is not ideal as in theory we could do exports conditionally based on what is in the foreign object. At this moment this does not happen.
  • MODIFIED: qsave_program/2 and compilation using -c to interpret the `--emulator=file flag (or emulator(Emulator) option) independently from the `--stand-alone option. This allows creating non-stand-alone executables that use a specific emulator path.

[Sep 4 2022]

  • TEST: When using -DINSTALL_TESTS, install foreign plugins that only support testing.

[Sep 3 2022]

  • DOC: Describe the design of the Windows file system interaction and its limitations.
  • ENHANCED: Test Windows file identify using the device identifier to deal with links.

[Sep 2 2022]

  • TEST: Added more file name tests.
  • FIXED: Windows: turned '$mark_executable'/1 into a dummy as it does nothing meaningful anyway.
  • FIXED: Windows opendir(), etc. emulation. Use more efficient file finding and avoid a possible inifinite loop.
  • ENHANCED: expand_file_name/2: provide signal handling while expanding such that we can interrupt.

[Sep 1 2022]

  • FIXED: Windows working directory to use SetCurrentDirectoryW() for supporting longer path names.
  • FIXED: Sprintf() for wide character strings with surrogate pairs.
  • FIXED: Sprintf() for NULL char * that have non-ASCII encoding.
  • FIXED: Windows implementation of size_file/2 to use GetFileAttributesExW() because _wstati64() cannot handle long file names.
  • ENHANCED: Windows: Use more robust translation to Windows path names. Support long file names using the "\\?\" or "\\?UNC\" prefix.
  • FIXED: Windows dlopen() emulation path handling.

[Aug 31 2022]

pairs when needed.

rather than using mbscoll(). The latter did not work anyway because the pattern and file names use UTF-8 rather than native multibyte.

  • FIXED: existence checking on Windows for expand_file_name/2
  • FIXED: Windows: do not canonicalize characters of file names > 0xffff

using towlower() as this function truncates to 16 bits. Assumes there are no letters with case above 0xffff.

  • FIXED: Windows: translation of wchar_t to UTF-8 for surrogate

pairs. Fixes e.g. ?- string_bytes('\U0001f600\U0001f604', L, utf8).

  • FIXED: Windows: ensure surrogate pairs to the console streams are in

the same WriteConsoleW() call. This fixes writing Unicode code points > 0xffff to user_error. The patch also writes output to user_error in larger chunks. Note that the default Windows console does not handle surrogate pairs. The Windows Terminal does.

  • DOC: Describe poor exceptions from failing file system operations.

[Aug 30 2022]

  • FIXED: Actually use overruled PATH_MAX in uxnt.c emulation.
  • DOC: rename_file/2: updated docs.
  • ADDED: Prolog flag path_max to get access to the manimum file name length on the OS.

[Aug 29 2022]

  • FIXED: string_bytes/2 in mode (+,-) for UTF-16 encoding on Windows. Reported by Matthias Gondan.

[Aug 25 2022]

  • PORT: Emscripten updates: Move required settings to Emscripten.cmake and add support for GMP

[Aug 23 2022]

[Aug 22 2022]

  • FIXED: Issue#1025: stream encoding wchar_t not returned as stream property

[Aug 21 2022]

  • FIXED: Issue#1021: engine_next/2 for a next answer when the previous return was due to a yield crashes.
  • FIXED: WASM Issue#1023: sleep/1 no longer worked.

[Aug 20 2022]

  • BUILD: Dependency issue for building the library indexes. After comments and a hint by Matthias Gondan.
  • TEST: Avoid more tests that depend on threads in single threaded version.
  • WASM: library(readutil): use shared use_foreign_library/1.

[Aug 19 2022]

  • WASM: Include http into wasm version
  • WASM: Activate STATIC_EXTENSIONS and include (part of) the clib package.
  • BUILD: Build option cmake -DSTATIC_EXTENSIONS which adds selected extensions (packages) to libswipl. In this scenario dynamic linking is disabled and use_foreign_library/1 is adjusted to call the already existing install function of the extension.

[Aug 18 2022]

  • WASM: Added calling JavaScript from Prolog, exchange DOM elements and adding scripts from Prolog.

[Aug 17 2022]

  • WASM: Renamed js_call/1 to js_run_script/1 for consistency
  • WASM: Avoid the need for a frame in Prolog.query(String).
  • WASM: Provide Prolog.message_to_string()
  • WASM: Allow a frame to discard all data

[Aug 11 2022]

  • WASM: Many changes to calling Prolog from JavaScript. These patches work to more high level interaction with Prolog from JavaScript. This work should be considered experimental.

[Aug 9 2022]

  • WASM: Perform UTF-8 decoding on output such that we can write Unicode.
  • WASM: Handle sleep/1 using JavaScript setTimeout()

[Aug 8 2022]

  • WASM: Allow _ in file names.
  • WASM: Reduce auto-yield frequency and avoid the event loop when < 20ms.
  • WASM: Focus on input next/stop when requested.
  • WASM: Set default package list to plunit, chr and clpqr
  • WASM: Extended shell.html demo. Working asynchronous behavior, command line history and persistent files in localStorage and manage files.
  • WASM: Many extensions to calling Prolog from JavaScript. Added support for (auto) yielding to achieve asynchronous behaviour in the browser.

[Aug 6 2022]

  • ADDED: heartbeat mechanism: by setting the Prolog flag heartbeat, the multifile predicate heartbeat/0 is called every N inferences.

[Aug 8 2022]

  • FIXED: PL_yield_address() (foreign yielding) effectively popped one level of the foreign frame stack.

[Aug 3 2022]

  • WASM: Updated instructions in CMAKE.md. "Native friend" is no longer needed.
  • WASM: Pass -s ALLOW_MEMORY_GROWTH=1 to allow for bigger stacks.
  • WASM: libswipl should not be a dynamic library on emscripten
  • WASM: Attempt to support threads. Compiles, but doesn't work on either Firefox or node.
  • WASM: Addes js_call/1 to call JavaScript
  • WIP: trying to deal with reading.
  • WASM: added ttymode() to Prolog JavaScript API.
  • WASM: Minimal running example.

[Aug 2 2022]

  • CLEANUP: Type safety of property enumerators
  • CLEANUP: get rid of function pointers without declared arguments.
  • WASM: Make init argv default
  • WASM: Put file system as /swipl and make this the Prolog home.
  • WASM: Avoid absolute path messages when linking swipl-web

[Jul 31 2022]

  • FIXED: autoloading: read the module header using operators from the system module to avoid user operator declarations to cause a failure reading this.

[Jul 28 2022]

  • ENHANCED: Performance tuneup - reduce number of arithmetic operations for pivot - replace one call to lists:member/2 with memberchk/2
  • ENHANCED: Optimize nth1/3 using '$seek_list'/4
  • DOC: Add => to the operator table.
  • ADDED: PL_get_stream_from_blob()
  • PORT: config/win32.h and config/win64.h have been removed.

[Jul 27 2022]

  • DOC: Various updates to blob API (notably flags).

[Jul 28 2022]

  • FIXED: Issue#1015: Small memory leak

[Jul 27 2022]

  • CLEANUP: Windows: move config parameters to common CMake infrastructure instead of using the dedicated hard-coded values.
  • BUILD: Determine architecture from CMAKE_SYSTEM_PROCESSOR and CMAKE_SYSTEM_NAME rather than their HOST counterparts.
  • DOC: setarg/3: point at arg/3.
  • FIXED: setarg/3 to unify always when the first argument is a variable. Abramo Bagnara.
  • TEST: Do not run cyrillic file tests if the text encoding cannot represent them.
  • TEST: Set UTF-8 encoding.
  • DOC: setarg/3 if the designated argument is a variable.

[Jul 20 2022]

  • ENHANCED: C version of nth0 to be more consistent with the Prolog implememtation and allow for interupts.

[Jul 19 2022]

  • ENHANCED: performance for nth0/3 in mode (+,+,?)
  • PORT: Issue#1009: Avoid conflict between Qt and swipl-win target.

[Jul 16 2022]

  • PORT: Suppress uninit warning in msys2 I think this can safely be initialized to FALSE [Jul 14 2022]
  • FIXED: user_or_explicit autoload mode not working

[Jul 11 2022]

  • FIXED: make_library_index/1 to use the xref flag while reading the file header. Avoids unwanted term expansion.

[Jul 10 2022]

  • PORT: WASM version: statistics/2 cputime now actually returns walltime since the start of Prolog. This allows for basic performance evaluation on CPU based tasks. WASM does not provide primitives to access the actual CPU time usage.
  • PORT: Make compile again in WASM. Reported by Jos de Roo

[Jul 9 2022]

  • FIXED: string_bytes/3 to ascii: avoid crash and raise an exception if the text cannot be represented using ASCII.
  • FIXED: string_codes(+,-,octet) (crashed on assertion error)
  • FIXED: write/1 for strings using UTF-16 encoding (Windows).

[Jul 8 2022]

[Jul 7 2022]

  • FIXED: Avoid C-stack overflow in recursive C->Prolog->C calls by demanding a minimum of 100Kbytes stack before calling Prolog.

[Jul 2 2022]

  • FIXED: pack_install/1: if the pack is already installed at an older version, upgrade it.
  • ENHANCED: Make git probe silent on all possible errors.
  • FIXED: GIT URLs must be a valid absolute URL to begin with
  • FIXED: pack_install/1: version comparison for already installed versions.

[Jul 1 2022]

[Jun 30 2022]

  • MDOIFIED: Fixed various internal recoding issues to ENC_WCHAR. These changes also ensures canonical text as used for atoms and strings only contain valid Unicode code points. As a result, passing invalid strings to Prolog using the foreign API may result in a failure.
  • DOC: Unicode and UTF-16 issues.
  • MODIFIED: Be consistent about valid character codes. These are the Unicode code points 0..U+10FFFF, while the range reserved for UTF-16 surrogate pairs is excluded (U+D800..U+DFFF).
  • DOC: Base64 encoding issues.

[Jun 29 2022]

  • PORT: add_package_path/1 also under Windows This change allows for a GNU-style directory structure also under Windows. [Jun 30 2022]
  • DOC: Rename section label for the statistics section of the manual to avoid a clash with the library documentation, hiding statistics/2 docs.

[Jun 29 2022]

  • TEST: Avoid surrogates for all encodings
  • UTF: Fixed length handling in setenv/2.

[Jun 28 2022]

  • PORT: Replace most wint_t by int for character classification purposes because Windows wint_t is 2 bytes, so we cannot classify anything > 0xffff
  • UTF: atom_concat/3 can now handle UTF-16 sequences.
  • UTF: Make PL_cmp_text() and PL_unify_text_range() deal with UTF-16 strings.
  • CLEANUP: sub_atom/5: more consistent typing and better reuse of primitives. This patch fixes handling atoms longer than 2G code points

[Jun 27 2022]

  • FIXED: Reading terms from Unicode symbol sequences.
  • ADDED: Use UTF-16 for canonical text on Windows. This is a first step that implements some of the basic handling for creating and writing atoms with code points > U+FFFF

[Jun 26 2022]

  • MODIFIED: Official encoding names for UTF-16. Now also allows aliases for the IANA names for specifying the encoding (UTF-8, UTF-16BE, UTF-16LE).
  • ENHANCED: Allow reading and writing UTF-16 files.

[Jun 28 2022]

  • PORT: MSYS2, add %MINGW_PREFIX%/bin to dll search

[Jun 26 2022]

  • MODIFIED: PL_get_char() now returns a domain or representation error if the code is outside the Unicode range (domain) or cannot be represented by the system (representation).
  • FIXED: built-in option list processing should raise a type error if the list is cyclic.

[Jun 24 2022]

  • FIXED: incr_invalidate_calls/1: succeed if no tabling happened in the calling thread yet (and thus there is no variant table).

[Jun 23 2022]

  • ADDED: Allow floats from other scripts.
  • DOC: various Unicode related updates, including handling of non-ASCII decimal number characters.

[Jun 22 2022]

  • MODIFIED: Make the Prolog parser parse decimal numbers in other scripts to integers.
  • ADDED: char_type/2 type decimal.
  • MODIFIED: Updated character classification for read/1 and friends to be based on Unicode 14.0.0
  • MODIFIED: Updated to Unicode 14.0.0 (from 6.0.0)
  • CLEANUP: library(unicode/unicode_data) to avoid conflict with table/1.

[Jun 20 2022]

  • MODIFIED: win_add_dll_directory/1: throw exceptions on failure rather than assuming failure of `AddDllDirectory()` indicates we need to extend ``%PATH%%`.
  • ENHANCED: win_add_dll_directory/2: throw normal Prolog exceptions for the two common reasons for this predicate to fail: non-existence of the target or the target not being absolute.
  • ENHANCED: building the autoload index now extracts the public predicates in a more generic way, processing optional #! line, :- encoding directives and (conditional) exports in the header. This notably allows for module hedaers like below. ` :- module(m, [p/1]). :- if(current_prolog_flag(windows,true)). :- export(win_q/2). :- endif. `

[Jun 15 2022]

  • ENHANCED: PL_record_external() deal with records > 2Gb on 64 bit platforms.
  • FIXED: Issue#114: Windows getenv/2 may return additional garbage (typically an extra \u0000 character at the end of variables of 1023 bytes or longer because the 0-byte is not added. Paul Singleton.

[Jun 12 2022]

  • FIXED: write_term/2 and friends handling of embrace of operants that are operators for partial writes.
  • FIXED: no space is required between a space and (.

[Jun 11 2022]

  • FIXED: write_term/2 and friends: do not embrace writing a single atom if this is an operator and the priority(Priority) option is given.
  • FIXED: Do not close the standard streams as part of atom-GC.

[Jun 9 2022]

  • DOC: Create links for S*() function references

[Jun 8 2022]

  • DOC: Started documenting SWI-Stream.h
  • FIXED: Sgets() handling of non-0-terminated output from Sfgets().

[Jun 2 2022]

  • DOC: ord_intersection/2 is semidet.
  • DIST: Fixed rmd160 generation for scripts/update-macports

[Jun 1 2022]

  • FIXED: write_term/2 with numbervars and variable_names (#866)

[Jun 2 2022]

  • ENHANCED: do not map I/O errors to exceptions when the error occurs as a result of a close that is initiated from the atom garbage collector.

[Jun 1 2022]

  • FIXED: Issue#993: possible deadlock when loading a module. Reported by Sean Leather.

[May 23 2022]

[May 18 2022]

[May 17 2022]

  • DOC: enhance documentation for det/, $/1 and $/0, describing the exceptions and how trap/1 can be used to make the debugger act quickly.

[May 15 2022]

  • ADDED: set_breakpoint_condition/2, providing conditional breakpoints
  • MODIFIED: Extend break_hook/6 to break_hook/7 ... ..adding an extra boolean argument +Debug denoting whether the system was in debug mode when the breakpoint was triggered.
  • FIXED: explain/1: hide references from called/5
  • FIXED: Have breakpoints cleared in the UI when the clause that holds them is removed during a reload of the file.

[May 14 2022]

  • FIXED: breakpoint_property/2: fixed character_range property
  • ENHANCED: Issue#17: reverse/2 to be deterministic if second argument is a proper list. Ulrich Neumerkel.

[May 13 2022]

  • TEST: Added STO restriction as this test involves rational trees.

[May 12 2022]

  • FIXED: Issue#122: dif/2: or-node simplification.
  • FIXED: Possible deadlock enumerating predicates from a source file.

[May 10 2022]

  • TEST: Updated ^/2 tests. Move float**rat tests to test_ieee754 for rounding mode handling.
  • ENHANCED: use ldexp() rather than pow() for multiplying a float with an integral power of 2. mpz_fdiv(): replace calls to pow() function by ldexp()
  • FIXED: rounding of pow() (^/2 and **/2) ar_pow(): Re-implement float**mpq case
  • FIXED: Avoid Unicode quote in library(aggregate) comment

[May 9 2022]

  • ADDED: Prolog flag acg_close_streams.
  • ADDED: Sgcclose() as an extended version of Sclose() that can be used to avoid deadlocks when closing streams from the atom garbage collector.
  • MODIFIED: PL_blob_data() to return NULL if the blob has been released and document the consequences thereof.

[Apr 24 2022]

  • PORT: Replace MINGW_ROOT by WIN32 I think -municode needs to be defined on all Windows systems that are currently supported (= several flavors of MinGW). MINGW_ROOT was not defined on my system, so I would like to change this to WIN32 to save a cmake command line switch.

[May 6 2022]

  • FIXED: LaTeX conflict preventing building the PDF docs
  • PORT: Issue#83: "label can only be part of a statement" compiler error.

[May 5 2022]

  • ADDED: Prolog flag vmi_builtin that controls whether or not built-in predicates that are defined in the VM are handled in the VM or called as normal predicates. The latter was previously associated with debug mode, but has also other purposes, such as in coverage analysis or when using trace/1.

[May 4 2022]

  • ADDED: Low level primitives to collect information about coverage. This is used by show_coverage/1,2 to achieve only a modest slowdown.

[May 3 2022]

  • MODIFIED: delete_file/1 to delete a read-only file on Windows for compatibility with other platforms.
  • MODIFIED: Windows: use GetACP() to detect that the system runs in UTF-8 mode and set the default encoding accordingly.

[Apr 23 2022]

  • FIXED: Several issues to consistently deal with buffer sizes in os/windows/uxnt.c.

[Apr 27 2022]

  • MODIFIED: Floating point rounding now assumes the C correctly implements floating points functions for the "to nearest" rounding. It than adds or subtracts one ulp to guarantee that the true value is between the downward and upward rounded values.

[Apr 21 2022]

  • FIXED: Possible race condition importing into a module. Can lead to termination on a system error.
  • PORT: Consistently use PATH_MAX and raise it to 32k on Windows.

[Apr 20 2022]

  • CLEANUP: Use POSIX PATH_MAX rather than MAXPATHLEN
  • FIXED: Source layout handling for SSU (=>) whose guard is a conjunction.
  • FIXED: Source layout handling for unifications against nested head variables.

[Apr 19 2022]

  • FIXED: Make source layout handling aware that debug/3 and assertion/1 may be removed by the optimizer.

[Apr 17 2022]

  • DOC: Many enhancements to the foreign language API docs, notably wrt. atoms and blobs.
  • ADDED: Sopen_iri_or_file() API to allow foreign code to access the resources.

[Apr 16 2022]

  • ADDED: Support repositioning streams on program resources by setting the buffer size to the size of the resource. This allows the IDE tools to run on resource files.

[Apr 15 2022]

  • FIXED: central resource db handling by opening ``res://` may have streams closed early during to atom-GC.
  • ENHANCED: require/1 to simply import if the target module is already loaded. Reduces startup time.

[Apr 14 2022]

  • ENHANCED: open_resource/2,3: allow opening multiple resources concurrently.
  • FIXED: open/3 and friends on 'res://' paths.

[Apr 13 2022]

[Apr 12 2022]

[Apr 8 2022]

[Apr 7 2022]

  • TEST: updated check_installation for PCRE2
  • PORT: skip dll in Rtools (only static libs)
  • ADDED: open/4 option newline(Mode).

[Apr 6 2022]

  • FIXED: read_term/2: memory leak when reading Unicode variable names and reporting these using the variable_names(Names) option.

[Apr 5 2022]

[Apr 4 2022]

[Apr 3 2022]

  • FIXED: Windows (swipl-win.exe) clean closing of I/O.
  • FIXED: Possible wrong Windows drive letter normalisation.

[Apr 2 2022]

  • PORT: msys2, detect libdb-6.0.dll from libdb.a

[Apr 1 2022]

  • PORT: Msys2/clang64
  • PORT: MSYS2/clang64 the dll name appears several times in the ".a" file, select the first appearance
  • FIXED: PL_retry() and PL_context() to work with all integers.
  • FIXED: swipl-ld didn't pass -I for SWI-Prolog.h any more.

[Mar 31 2022]

[Mar 30 2022]

  • FIXED: on_signal/3: properly set flags on the signal structure such that when bound to a predicate the predicate is called synchronously. Breaks handling SIGTERM in library(http/http_unix_daemon).
  • PORT: Sopenmem() to use SIO_NL_POSIX. All internal strings use POSIX \n to delimit lines. @mgodan1.

[Mar 29 2022]

  • FIXED: copy_term/4 to handle cyclic terms for the first argument. Also proper recovery in case of a memory overflow.

[Mar 28 2022]

  • DOC: Enhance docs for trap/1.
  • DOC: Start disclaimer on float precision.

[Mar 27 2022]

  • FIXED: Added new test files,
  • PORT: Work around broken llround in MinGW
  • TEST: Added test framework and some initial tests for source code position and breakpoint management testing.
  • DOC: open/3,4 pipe(Command) limitations.
  • TEST: Moved pipe tests to a plunit file.
  • PORT: open/3,4 on Windows: use clib popen() instead of the broken emulation in src/os/windows/popen.c

[Mar 26 2022]

  • FIXED: Clause position management for h => X = ..., rest_body: the unification is not inlined.

[Mar 25 2022]

  • SNAP: Updated snap package dependency for pcre2

[Mar 24 2022]

  • FIXED: swipl-ld: access to uninitialized memory
  • FIXED: round/1 near +/- max integer.
  • DOC: complete library index, move gensym and www_browser library docs from LaTeX to PlDoc
  • FIXED: round/1 function. As discussed on Discourse. Rick Workman.

[Mar 23 2022]

  • FIXED: Empty thread queues before deleting them.
  • FIXED: Reclaim stored exception when deallocating a stream.
  • FIXED: Avoid crash updating the stream admin from blob release handlers during shutdown.
  • MODIFIED: Added flags and more return values to PL_cleanup().
  • FIXED: abolish/1 on an imported predicate should decrement the reference count for the imported predicate.

[Mar 22 2022]

  • DEBUG: Tricks for ASAN to find the predicates that have not been deleted.
  • FIXED: current_predicate/1 bug in updating module reference count that may cause temporary modules not to be destroyed. Notably affects SWISH.
  • DEBUG: Allow for the environment `ASAN_OPTIONSdetect_leaks1` when build with ASAN to debug memory leaks and avoid unloading foreign libraries using dlclose().

[Mar 21 2022]

  • DOC: Add transpose/2 to the clpfd docs.
  • FIXED: Allow using delimited continuations after cleanup/initialise sequence.
  • FIXED: Cleanup cache for tabling ret/N functors

[Mar 20 2022]

  • FIXED: Using date and time functions after PL_cleanup().
  • CLEANUP: Silence several warnings on systems that remove assert() calls.
  • FIXED: bulk mode for transactions was not actually passed.
  • PORT: fixed support for systems that lack file mapping
  • FIXED: Single threaded build.
  • FIXED: Issue#961: crash in halt after using the graphical debugger,

[Mar 18 2022]

  • TEST: Do not load xpce into the basic test suite.
  • DOC: PL_cleanup() docs updated for improved functionality.
  • TEST: Avoid relying on the cat program.
  • FIXED: Memory leak reconsulting a file for deleted predicates.
  • FIXED: retract in nested transaction of a clause asserted in the outer transaction to properly reclaim the clause.
  • TEST: Avoid deprecated thread_exit/1.

[Mar 17 2022]

  • FIXED: Cleaning up locale reference counting and deletion. Could leak memory.

[Mar 16 2022]

  • TEST: Close the temporary toplevel streams
  • MODIFIED: set_prolog_IO/3 no longer creates a clone stream if stdout and stderr are the same stream, but creates an error stream that writes to the output (and flushes it). This way we can safely close user_error.
  • FIXED: fast_term_serialized/2: memory leak.
  • FIXED: Avoid transaction rollback to be recorded (memory leak).
  • FIXED: Ensure deleting table enum object (leaks).
  • FIXED: Avoid leaking a trie node on concurrent insert of the same value.
  • ENHANCED: if we created a supervisor that is equal to the existing, discard the new one. This may happen if multiple threads create a supervisor. Leaks memory as we cannot safely discard a running supervisor.
  • FIXED: memory leak recliming the IDG for monotonic tabling.

[Mar 15 2022]

[Mar 14 2022]

  • FIXED: consistent use of tree pool allocation.
  • TEST: Disable some tests under ASAN as they run out of stack.
  • FIXED: Reclaim indexes array on reclaiming predicates.

[Mar 13 2022]

  • FIXED: Initial atom table was allocated twice. Also set the initial size for this table to be big enough to load the initial state, avoiding two rehash operations.
  • FIXED: memory leak when destroying a module holding thread-local predicates.
  • CLEANUP: Use one function for deallocating predicate definitions
  • FIXED: Reclaim argument admin for destroyed predicates.

[Mar 12 2022]

  • CLEANUP: Reclaim "dirty table" and "dewam_table".
  • CLEANUP: Moved globally cached dict functors to GD.
  • CLEANUP: Reserve global vars for predicates used from C to allow re-initialization
  • FIXED: PL_cleanup(): reset blob admin.

[Mar 15 2022]

  • FIXED: Typo on threadutil.pl, harming operation without xpce. Johan Romme.

[Mar 10 2022]

  • ADDED: Make encoding accessible by name using PL_atom_to_encoding() and PL_encoding_to_atom()
  • DOC: tabling po(Compare) argument.

[Mar 9 2022]

[Mar 8 2022]

  • DOC: refer to pack debug_adapter in the GNU Emacs Interface page
  • FIXED: dif/2 not firing after unifying with other attributed variables.
  • CLEANUP: replace start/endCritical by proper functions to simplify debugging.

[Mar 7 2022]

  • FIXED: call_residue_vars/2: possible spurious reported variables because the trail entry was removed but the variable was not reclaimed due to a frozen stack.

[Feb 28 2022]

  • ENHANCDD: better support for platforms without signals. This adds an alternate alerting path when running on a non-Windows system without sig_alert, using a C11 mutex and condition variable. Obviously this loses the "interrupt blocking system call" semantics, but it allows thread_sigwait to park itself while waiting for another thread's signal.

    A few tests needed changing:

    1. When running without signals on non-Windows, popen(cat-2) will set SIGPIPE to ignored manually, since there's no other way to avoid that signal.
    2. The signal_nested tests needed an extra call port so they could proactively check for virtual signals.
    3. The D_BREAK tests simply don't work. It's slightly too big of a can of worms for me to look into for this commit, so I simply disabled that test suite on signal-free systems.

      A couple package tests needed adjustments as well:

    4. clib:test_af_unix was using an interrupting signal to stop the server thread, so I've changed it to auto-exit on signal-free systems.
    5. ssl:ssl_certificates was closing the client before reading the server's response, which caused a SIGPIPE on the server, so I added a read-and-check to the test to drain the buffer.

      For testing purposes, the no-signals build can be approximated on a system built with signal support by passing the --no-signals and --sigalert=0 arguments to swipl on the command line.

  • ADDED: on_signal/3 now takes value 'ignore' This allows for requesting the SIG_IGN disposition, and also unifies the SIGPIPE behavior with the other initially-prepared signals. Technically, this could be considered a backwards-incompatible change. However, for this to actually affect someone's working code, they would have to
    1. Redefine the system predicate ignore/1,
    2. Call on_signal(Sig, _, ignore), AND
    3. Expect ignore(Signal) to do something besides ignoring Signal; and in that case I think we can all agree they've brought this trouble upon themselves. :)

      Also adds SIGPIPE's default disposition to the docs.

[Feb 25 2022]

  • MODIFIED: fixing SIG_PROLOG_OFFSET at 32, per docs This also introduces a set of macros to interact with the pending signal mask which should hopefully ease refactoring if and when we change which signals swipl supports, like adding support for system signals over 31.

[Feb 24 2022]

  • MODIFIED: Do not allow for an comma to appear as an unquoted atom.
  • MODIFIED: switching core libswipl code to C11 This allows for a standards-compatible implementation of the LD macros that is guaranteed to compile down to a simple reference even at -O0. I've also added some code that, at least in my testing, makes `print LD` work again in GDB and any debugger that uses it as a backend.

[Feb 19 2022]

  • PORT: adding O_SIGNALS define in config.h This provides a single define to check if Prolog's signal-handling is enabled, rather than checking each of HAVE_SIGNAL etc. This also makes the existence and use of GD->signals.sig_alert consistent on whether SIG_ALERT is defined.

[Feb 18 2022]

  • PORT: Do not depend on SIGINT if signal support is disabled.

[Feb 16 2022]

  • PORT: Get optional symbols via weak linking This unifies the tcmalloc and ptmalloc linking code and also allows systems without dlsym(), like WASM, to expose the malloc-implementation predicates, so long as the linker is capable of resolving weak symbols.

[Feb 17 2022]

  • PORT: Issue#939: TLD_alloc() undefined error on Win32. @mgodan.
  • FIXED: Gui tracer for inlined unification with SSU clauses, e.g. p(X), X = aap(N) => writeln(N).
  • FIXED: Allow tracing test predicates that are inlined into the VM.
  • FIXED: Make gui tracer handle inlined head unifications.
  • FIXED: rule/3 for => rules that have the unification moved into the head and listing/1 for such SSU clauses.

[Feb 15 2022]

  • FIXED: Preproc/build errors Adding a couple GCC builtins to the config tests, using them to force short-circuiting of _LD_WITH_FALLBACK even in low-optimization modes (e.g. Clang in DEBUG configuration).

    Also adding a few missing-but-used defines to config.h.cmake (HAVE_BUILTIN_EXPECT, HAVE_THREAD, HAVE_VOLATILE, and HAVE_INLINE) and fixing an unbalanced #ifdef pair that got added in f3b79d6.

  • FIXED: Consider $/0 a breakable instruction. This fixes the debugger

for clauses holding $/0.

  • FIXED: Avoid instantiation error on =../2 when analysing clause

positions with incomplete information.

[Feb 14 2022]

  • SANDBOX: SWISH issue#147: Allow for copy_term/4.
  • FIXED: Allow retry from the body of => rules.
  • ENHANCED: Avoid tracing inside spy/1, nospy/1 and related debug control predicates.
  • FIXED: Issue#935: package manager: download location of git archives
  • DOC: Remove obsolete reference of break/1 trace port

[Feb 9 2022]

  • FIXED: Tracer retry on a parent frame. Notably causes problems if retrying runs cleanup handlers.

[Feb 4 2022]

  • MODIFIED: MacOS SWI-Prolog.app working directory and locale setup.

[Feb 3 2022]

  • MODIFIED: MacOS swipl-win to start in ~/Documents.
  • MODIFIED: MacOS: set LC_CTYPE to UTF-8 if neither LANG nor LC_CTYPE is set. Also set the encoding flag to utf8 if LC_CTYPE is set to UTF-8.
  • PORT: Started Apple specific predicates. Adds apple_current_locale_identifier/1.
  • PORT: Fix compilation using clang in debug mode.

[Feb 2 2022]

  • FIXED: make/0 to consider a file modified if some indirectly included file is modified. Used to only consider directly included files.

[Jan 31 2022]

  • FIXED: Possible GC crash on a rational number appearing in a clause head.

[Jan 30 2022]

  • FIXED: Indexing issue for assessing possible clauses indexes in SSU code. Can lead false "No matching clauses" errors.

[Jan 28 2022]

[Jan 27 2022]

  • ENHANCED: option/2: verify the Options argument.
  • CHECK: Verify that the format/2,3 arguments are a list. Quintus allowed for not using a list when only a single argument was required. Paulo Moura.

[Jan 26 2022]

  • MODIFIED: Read +digits as a term rather than a number. This changes also removes the space when writing e.g. +42. Reading +digits as a number predates the ISO standard and current practice. It was in SWI-Prolog since version 2.5 ...
  • MODIFIED: format/1-3: enforce first argument to be text. Now raises an exception if the first argument is a number, etc.
  • MOFIFIED: format/2: ~@, running a goal now discards possible bindings created by the goal. Compatibility with SICStus.
  • COMPAT: format/2: a numeric argument to ~s, e.g., ~3s truncates the string to the given number of characters.
  • COMPAT: format/2: ~r uses default radix of 8, compatible with SICStus and GNU-Prolog (used to raise an exception). Paulo Moura.
  • FIXED: set_prolog_flag(threads, Val) deadlocked. Paulo Moura.
  • FIXED: big integers constants in arithmetic expressions under optimization could be compiled as A_MPQ (rational), resulting in a crash. Paulo Moura.

[Jan 25 2022]

[Jan 24 2022]

[Jan 22 2022]

  • FIXED: call_residue_vars/2: if GC performs early reset on an attvar it is incorrectly considered residual.
  • DOC: Fixed PL_get_dict_key() docs. Matthijs van Otterdijk.

[Jan 21 2022]

  • ENHANCED: Use mallinfo2 when available. By @mgodan1.

[Jan 19 2022]

  • CLEANUP: Remove code from DCG translation that moves unifications immediately following the neck of the clause into the head. Since this optimization is done by the compiler anyway this is no longer needed. This allows for creating SSU DCG rules on top of the existing compilation.

[Jan 18 2022]

[Jan 17 2022]

  • DOC: Fixed error in CMake build script for the manual.
  • DOC: Fixed LaTeX errors.
  • FIXED: Another postfix operator issue as a regression to recent fixes on postfix operator handling. Affects the R interface (reported by Nicos Angelopoulos for real, but probably rserve_client is also victim).

[Jan 16 2022]

  • DOC: clarify module issues wrt. macro expansion and explain what is affected by import modules.
  • DOC: read_term/2: quasi quotation layout
  • TEST: read_term/2 subterm_position option. Contributed by Peter Ludemann.

[Jan 14 2022]

[Jan 12 2022]

  • ENHANCED: If a package is available both globally and locally (per user), ignore the global one silently rather than with a warning.
  • ADDED: pack_install/2: option global(Boolean) to explicitly install a package for the user or globally.
  • BUILD: Include debug info with PGO build.
  • CMAKE: let Threads use -pthread instead of -lpthread This can link other needed libraries, and fix building on riscv64.

[Jan 11 2022]

[Jan 10 2022]

  • ENHANCED: Edits commit 18690d80fbdc842a5bad3da1fb81a083e55b1b24. Forgotten amend and already pushed to origin.
  • FIXED: qsave_program/2: add missing load_module for shlib The predicate current_foreign_library is used which is from the module shlib. Unfortunately it is not imported though, which makes it impossible to use qsave without autoloading enabled.

    [edited by JW: use autoload/2 and also deal with autoload_all/1 dependency]

[Jan 9 2022]

  • TEST: Started a few operator tests
  • FIXED: handling postfix operators must reduce the left side before reducing the postfix operator.

[Jan 8 2022]

  • ENHANCED: Issue#24: clause_info/4: reject if term layout returned by expand_term/4 is bogus. This forces the guitracer to revert to decompiling.
  • FIXED: arg xf xf (cascading postfix operators) where the priority of the first is higher than the second must generate a syntax error rather than an incorrect term.

[Jan 7 2022]

  • DEBUG: Fixed duplicate debug id
  • FIXED: print_term/2 handling of postfix operators.

[Jan 6 2022]

  • SECURITY: running plain swipl loads init.pl from the current directory if this file exists. It is not advised to load customisation files from the current directory. We now only load init.pl when explicitly called using swipl -f init.pl while an implicit init file is only loaded from the user_app_config path alias.

[Jan 5 2022]

  • ENHANCED: library(apply_macros) now expands maplist calls with lists known at compile time into a sequence of calls if this is safe and the lists are at most 10 elements long.
  • ADDED: copy_term/4 and copy_term_nat/4. These predicates provide a partial renaming of variables and is used in s(CASP). This patch also improves out-of-memory handling and adds a test suit for copy_term.

[Jan 4 2022]

[Jan 3 2022]

  • FIXED: pack_rebuild/1 if the pack is installed but does not provide binaries for the current architecture. Nicos Angelopoulos.
  • FIXED: SWISH Issue#146: failure to render stacktrace due to failure of message_to_string/2 on ansi(Style, Fmt, Arg) if Arg is not a list.

[Jan 2 2022]

  • ADDED: PL_can_yield() to figure out whether the current execution context allows for yielding control.

[Jan 1 2022]

  • DOC: foreign yield interface

[Dec 31 2021]

  • ADDED: Allow yield/resume from foreign predicates.
  • MODIFIED: Query identifiers now keep track of the engine to which they are associated. As a result, they are now anonymous pointers rather than (pointer wide) integers. Does not affect compatibility except source compatibility when the value is combined with integral types.
  • BUILD: Disable MQI if multi-threading is not enabled.

[Dec 27 2021]

  • FIXED: print_term/2 from entering a loop. Also fixes unneeded parenthesis in lists.
  • FIXED: finding clauses from a source location could crash on thread local predicates

[Dec 23 2021]

  • FIXED: conjunction/disjunction.
  • FIXED: print_term/2: respect write options when computing with of native output.
  • MODIFIED: print_term/2 to get the default right margin from tty_size if the output is a tty and tty_size/2 succeeds.
  • ENHANCED: mkconj/3 and mkdisj/3 to produces a right-grouped term, e.g. ?- mkconj((a,b),c, Conj) Conj = (a,b,c)

    (was Conj = ((a,b),c)).

  • FIXED: We must preserve the pack registration when creating a saved state to make loading foreign resources work.
  • ENHANCED: main/0 to avoid setting up application signal handling and termination when run interactively.

[Dec 22 2021]

  • FIXED: Issue#917: separate S_DYNAMIC and S_MULTIFILE. Jos de Roo.
  • ADDED: print_term/2: options fullstop(Boolean) and nl(Bool). Also lots of documentation restyling and removed old conditional compilation.
  • ENHANCED: print_term/2 to deal with operator expressions that exceed the line width.
  • FIXED: print_term/2: max priority of list elements and compound term arguments to 999 to force parenthesis.
  • FIXED: Issue#917: WAM Table mismatch: wam_table[119(s_static)] == wam_table[124(s_multifile)]

[Dec 21 2021]

  • SNAP: Reverted to core20 because Qt is broken on core20.
  • FIXED: Ensure VMI instruction are on unique addresses. This patch extends 7bf463db4dcc7b4e27c820ef8fc6f94fd8116720 for the case that two VMIs jump to the same real implementation.
  • SNAP: Trying to switch to core20 base. See https://github.com/octave-snap/octave-snap/issues/67

[Dec 20 2021]

  • PORT: Guarantee two VM instructions are not optimized to use the same code.

[Dec 19 2021]

  • FIXED: Ensure bigints are properly indexed on 32-bit platforms.
  • PORT: On MacOS fat executables, both try fat-darwin and the actual archirecture when searching foreign resources.
  • PORT: Set archirecture name of fat packages to fat.
  • PORT: Support generation of MacOS universal (fat) binaries. Also updates minimum supported MacOS version to 10.14.

[Dec 18 2021]

  • PORT: Dynamically determine actual architecture on MacOS
  • PORT: Install openssl.cnf with MacOS dependencies (scripts/macos-deps.sh)

[Dec 17 2021]

  • PORT: By default disable tcmalloc for MacOS as it causes a crash in setlocale() for Monterey.
  • ADDED: Support '*' to print the most last choicepoint when a toplevel goal succeeded deterministically.
  • ADDED: print_last_choicepoint/0,2.
  • ENHANCED: Make explain/1 use the message system and the new terminal hyperlinks.
  • ENHANCED: explain/1: hide system references.
  • PORT: Building an apple bundle using Qt6
  • PORT: Updated script for MacOS dependencies
  • DOC: return type for PL_put_variable(), PL_put_bool() and PL_put_atom() is int.

[Dec 16 2021]

  • ENHANCED: ord_subtract/3: use => rules to trap wrong calls and stop when the list of elements to be subtracted is exhausted.

[Dec 15 2021]

  • FIXED: Handle new terminal hyperlink elements in message_to_string/2
  • PORT: MacOS to deal with installation directory for libjpeg as installed by Macports. This patch also disables more Macports and Homebrew locations if we provide our own dependencies.

[Dec 14 2021]

  • BUILD: By default use Macports gcc11 (gcc-mp-11)
  • EHNANCED: SICStus datime/2 emulation now supports mode datime(-When, +Datime).

[Dec 13 2021]

[Dec 11 2021]

  • ENHANCED: Use new url(Location) message line elements throughout.
  • ADDED: Introduce url(Location) and url(URL, Label) message line elements.
  • PORT: Fixed cmake issue for MacOS Homebrew dependencies.

[Dec 10 2021]

[Dec 9 2021]

  • ADDED: prolog_choice_attribute/3: clause attribute to find the next candidate clause.
  • FIXED: Initial value for the Prolog flat on_warning must be print.

[Dec 8 2021]

  • FIXED: Stack trace line-level location when parenthesis are used.

[Dec 6 2021]

  • MODIFIED: write_term/3 option brace_terms behavior was the inverse of the documentation. As the docs describe what one would expect and is consistent with YAP, the implementation is fixed. We do not expect this option to be frequently used. Code using brace_terms(true) must be updated to use brace_terms(false). If you need to do a runtime check to beor conditional compilation compatible with older versions, one can use this condition to verify the correct new behavior.
    term_string({a}, S, [brace_terms(false)]), S == "{}(a)"
  • FIXED: gen_assoc/3. This patch also removes the ground tests for is_assoc/1 and updates documentation. By Peter Ludemann.
  • FIXED: Missing import into library(listing).

[Dec 5 2021]

  • DOC: Added the rbtrees, statistics and fastrw libraries to the main documentation to make them available in help/1.
  • DOC: Added library(rbtrees) to main documentation to make it work in help/1.

[Dec 1 2021]

  • REFACTOR: library(rbtrees) to use more => style rules and use det/1. This refactoring guards at practically zero overhead cost against errors such as passing variable rather than a Red-Black tree, passing an invalid Red-Black tree. This patch makes the library strictly stead-fast. Finally, many test cases are added.

    Fix is_rbtree/1 fail condition; use => in more places

[Dec 4 2021]

  • ADDED: write_term/2: option quote_non_ascii. This option is enabled by default for write_canonical/1.
  • ADDED: PL_write_term(): PL_WRT_QUOTE_NON_ASCII flag
  • FIXED: write_canonical/1 to use the brace_terms option as false.
  • FIXED: Make write/1 and friends escape characters that the stream cannot represent.

[Dec 3 2021]

  • FIXED: write/1 and friends: we must check that the first character can be represented by the stream.
  • ADDED: Server socket support to SICStus 4 library(sockets) emulation.

[Dec 2 2021]

  • FIXED: If we abort in the tracer from a redo port that is on a foreign predicate we must discard this (foreign) frame.

[Dec 1 2021]

  • ADDED: pack_install/1 to support pack_version(2). in pack.pl. Version 2 changes the names of the exported environment variables that control building the pack. This was necessary to avoid conflicts with build environments. As an incompatible change was required anyway we took the opportunity to rationalise all the variable names.

[Nov 29 2021]

[Nov 28 2021]

  • PORT: First attempt to support MacOs M1 with brew deps in /opt/homebrew
  • ENHANCED: library(assoc): partial rewrite to use SSU (=>/2) to generate errors when called with invalid input.

[Nov 26 2021]

  • ENHANCED: Base clause indexing hash for indirect types (strings, bigints and rationals on the start, end and length if the size exceeds 4 machine words. Without, the time to compute the hash easily becomes dominant. Found by Rick Workman.
  • REFACTOR: Get all index key computation in one place.

[Nov 25 2021]

  • ADDED: pack_install/1 and friends: provide an environment variable PREFIX for installing global objects.

[Nov 24 2021]

  • BUILD: Provide more control over the PGO build.
  • ADDED: argv_options/3 to process type number

[Nov 22 2021]

  • FIXED: profile/1 involving code executed in a temporary module.
  • MODIFIED: This patch modifies PL_prof_type_t, the interface to extend the SWI-Prolog profiler. Foreign code using this may need to be updated. Most likely only used by xpce.

[Nov 20 2021]

  • MODIFIED: Issue#900: Renamed PL_version() to PL_version_info(). Provides a macro for backward (source) compatibility.
  • FIXED: Issue#105: dif/2 wrong result. This patch is a major rewrite for dif/2. Where the previous version contained or nodes that were considered satisfied based on a count, the new version verifies the individual unifications of the unifier produced by unifiable/3. The count fails, both too low and too high, as a result of multiple unifications in a single unification as well as subterm sharing in the input terms.

[Nov 18 2021]

  • TEST: More dif/2 tests.
  • FIXED: dif/2: we should ignore unrelated attributes.

[Nov 17 2021]

  • FIXED: Issue#907: failure to fully reclaim clause indexes under some loads.

[Nov 16 2021]

  • CMAKE: Support older CMake versions.
  • FIXED: Saved state handling of a dict whose first key value (in the internal order) and tag are both avoid variables. This patch is less invasive than 4de9114a76cd44659591296627e999cf1072d744.

[Nov 15 2021]

  • FIXED: Saved state handling of a dict whose first key value (in the internal order) and tag are both avoid variables. Reported by Matt Lilley.
  • TEST: Migrate dif/2 tests to plunit.
  • FIXED: dif/2: pending constraints on sharing inside the terms.

[Nov 14 2021]

[Nov 12 2021]

  • STYLE: list_void_declarations/0, part of checks after make/0 to list predicates defined as discontuguous/1 while they have no clauses. This is, according to ISO, not a bug as such predicates are considered to be defined.
  • FIXED: Be more relaxed about existence of the current predicate when pushing and popping the compilation context.

[Nov 11 2021]

  • ENHANCED: Report failed build steps because no tools was willing to do the job. Pass -DCMAKE_BUILD_TYPE=Type, which may be set from the options to pack_install/2.
  • ENHANCED: Get version info into the Prolog flag. Now uses CMake rather than a shell script and provides a new Prolog flag cmake_build_type.
  • FIXED: pack_install/1 install step for make based packages.
  • FIXED: Rebuilding GNU-style packages failed due to catching wrong exception.

[Nov 10 2021]

  • FIXED: pack_rebuild/1 for CMake configurations.
  • ADDED: A file <home>/cmake/swipl.cmake that provides generics to use CMake for building SWI-Prolog packs.
  • DOC: Updated CMake build instructions.

[Nov 8 2021]

  • ADDED: pack_install/1: reorganized the code building foreign resources. This code is now in a new library(build/tools) and uses a plugin architecture that deals with Conan, CMake and GNU tools (autoconf etc.). The changes are intended to be fully compatible with the old system. The build system now supports more tools and provides mechanisms for structured extensions.

[Nov 10 2021]

[Nov 8 2021]

  • EHNACED: pack_rebuild/1,2 for CMake based packages to use `cmake --build and cmake --install` for the build and install steps rather than calling make, ninja, etc. directly. Suggested by Wouter Beek.
  • MAINTENANCE: Possible segv in retract/1 when compiled using O_DEBUG.

[Nov 7 2021]

  • FIXED: Possible race conditions between the various ways a thread can be joined.
  • FIXED: Do not start a new thread to join garbage collected threads while shutting down the system.
  • MAINTENANCE: On a system error we only go into interactive mode if both stdin and stderr are connected to a terminal. Otherwise we print the message, C and Prolog stack and abort.
  • MAINTENANCE: Use of guarded C-stack using sigaltstack() doesn't go with ASAN. Results in the error below. Disabled guarding the C stack when compiling using address sanitizer. ``` =101190=ERROR: AddressSanitizer failed to deallocate 0x2000 (8192) bytes at address 0x6250000b1900 =101190=AddressSanitizer CHECK failed: ../../../../src/libsanitizer/sanitizer_common/sanitizer_posix.cc:60 "(("unable to unmap" && 0)) != (0)" (0x0, 0x0)

    ```

[Nov 3 2021]

  • FIXED: CMake packs must use environment variables.
  • ADDED: Support ninja builds when using CMake
  • FIXED: pack_install/1,2: If we use CMake for configuration, we should also build in the CMake directory.
  • TEST: Signalled thread may already be dead.

[Nov 2 2021]

  • ADDED: pack_install/1,2: provide pack_install(.) to add the local directory to the pack registry and build it. Also add option link(true) and rebuild(When) to provide more fine control over the build.
  • FIXED: pack_install/1,2: do not remove contents if the package registered as a symbolic link.
  • FIXED: memberchk/2 for partial lists where the unbound part is constrained. Reported on Discourse by Abramo Bagnara.
  • BUILD: Avoid GCC-11 warning

[Oct 31 2021]

  • ENHANCED: Protect assertz/1 and friends (compiler) against C-stack overflows.
  • ENHANCED: Use setjmp() instead of sigsetjmp() to reduce the overhead of the C-stack guarding.
  • MAINTENANCE: Updated C calltree analysis for CMake build and new coding style and conventions.

[Oct 30 2021]

  • FIXED: Fallback to find a place for packages to install executables.
  • FIXED: Hash consistency on pointer sided integers for 64-bit bigendian machines. Only affects consistency of term_hash/2 over platforms.
  • FIXED: Checking that an uncaught exception is caught in an outer environment, i.e., nested C<->Prolog callback.

[Oct 28 2021]

  • FIXED: Make C-stack guarding work in threads.
  • ENHANCED: Use C-stack guarding for read/1 and friends.
  • FIXED: format/2,3: Term printing using ~[kpqw] did not propagate exception.

[Oct 27 2021]

  • ENHANCED: Handle C-stack overflows gracefully on POSIX targets with sigaltstack().

[Oct 26 2021]

  • PORT: Alignment on ppc64el. Better version than df1f0bf795a16edd313a2a25f0678ce044a4a71d
  • ADDED: argv_options/3: allow including longer descriptions as header, usage and footer in the usage message.
  • ADDED: argv_options/3: Allow the user to redefine the bindings for help. Suggested by @swi.
  • PORT: Alignment on ppc64el (Debian). See https://github.com/SWI-Prolog/issues/issues/104

[Oct 25 2021]

  • FIXED: pl_get_uint64() for GMP numbers on 32-bit systems.
  • ADDED: argv_options/3,4: allow for disjunctive types.

[Oct 24 2021]

[Oct 22 2021]

  • ADDED: message_property/2: tag(Tag) property to change ERROR and/or Warning.
  • ADDED: print_message/2: Allow message term to text translation to be language specific.
  • ENHANCED: Allow loading library(prolog_debug) if spy and/or nospy are defined as operators.
  • FIXED: Do not reclaim memory on termination when we failed to terminate all threads.
  • ENHANCED: Provide a non-polling process termination procedure for systems that do not have sem_timedwait() such as MacOS.
  • ENHANCED: Improve performance for process shutdown on POSIX systems that support sem_timedwait() by avoiding a polling loop. This typically saves 0.1 second on the elapsed time for short lived executables.

[Oct 21 2021]

  • ADDED: Allow --no-pce together with -c (compile) to produce a state that does not include xpce.
  • FIXED: Retract for retract((a:-true)). Reported by Fernando Sáenz-PĂ©rez.

[Oct 20 2021]

[Oct 19 2021]

  • ADDED: argv_options/3 to provide a full featured and lightweight alternative to library(optparse).
  • FIXED: format/2 and friends: verify error when emitting rubber.
  • ADDED: format/2 and friends: support ~:|, the colon modifier for tab stops to insert a newline if the current column already passed the tab stop.

[Oct 18 2021]

  • FIXED: Fixup singleton for cleanup of optspec validation.

[Oct 19 2021]

  • FIXED: Issue#896: Claim that memory streams as used by e.g. open_string/2 are reported as repositionable. Reported by Matthijs van Otterdijk.
  • ENHANCED: Allow 64-bit seek function to work on memory streams.
  • ADDED: Allow stream contol functions to return whether the stream is repositionable.

[Oct 18 2021]

  • FIXED: Make optparse:parse_type/3 hook work. Cleanup of optspec validation.
  • MODIFIED: opt_parse/4: if an option is unknown only throw an exception, i.e., not first print the help message.
  • ADDED: opt_parse/4: Allow using a string as help(Help) value.
  • FIXED: det/1: avoid false non-determinism claim if all relevant choicepoints are debug choicepoints.

[Oct 14 2021]

  • ENHANCED: library(rbtrees): error checks and more test cases.
  • FIXED: Predicate access in nested transactions for clauses that are removed in the parent (or a previous nested) transaction. We must inspect the affected clauses of all parent transactions. Reported by Eric Zinda.

[Oct 11 2021]

  • FIXED: Answer subsumption tabling case provided by Annie Liu.
  • TEST: Tests for new thread_signal/2.
  • ADDED: Predicate property sig_atomic. Currently only for the built-in sig_atomic/1.

[Oct 10 2021]

  • DOC: Document new thread signal primitives.
  • ADDED: thread signal blocking and unblocking.

[Oct 9 2021]

  • FIXED: Delay signals in prolog_exception_hook/4.
  • MODIFIED: Signal handling no longer backtracks. This implies it may set global variables.

[Oct 8 2021]

[Oct 10 2021]

  • ADDED: sig_atomic/1 to run goals protected from signals. This predicate used to be available as the undocumented '$sig_atomic'/1. '$sig_atomic'/1 is now available from library(backcomp).
  • ENHANCED: thread_signal/2: reduce the locked section

[Oct 11 2021]

  • FIXED: thread_wait/2: return when condition is true before this predicate is called.
  • FIXED: thread_wait/2: wait_preds option accepted non-predicate indicators.
  • ADDED: sandbox: call_delays/2 as safe meta predicate

[Oct 6 2021]

  • FIXED: Issue#889: swipl --abi-version crashed.

[Oct 5 2021]

  • ENHANCED: trace/2 to delete that we are tracing this predicate if the port list is empty.

[Oct 1 2021]

  • DOC: Document key pc of prolog_choice_attribute/3
  • FIXED: 91d73fb8a859c6e0f0d97ff553f96903816bc18c triggers another case where the falsecount of a node can underflow during re-evaluation. Bit dubious.
  • DOC: LaTeX formatting error

[Sep 30 2021]

  • FIXED: possible failure to propagate changes in lazy monotonic tabling. This happens because answers added during lazy reevaluation are propagated eagerly, but '$idg_mono_affects_eager'/3 didn't find dependencies to non-lazy tables.

[Sep 29 2021]

  • ADDED: pack_install/1 and friends: pass a prefix flag to CMake or configure that follows the same conventions as the installed Prolog system.
  • ADDED: dcg_translate_rule/2 is now declared safe for use in sandboxes.
  • ADDED: notraceall/0.

[Sep 28 2021]

  • ADDED: Allow authors of packs to not have an email address or URL.

[Sep 27 2021]

  • ADDED: PL_cvt_i_schar() for explicit signed character handling.
  • ENHANCED: dict_options/2 in mode (-,+) to remove duplicate options, keeping the first.

[Sep 24 2021]

[Sep 23 2021]

[Sep 21 2021]

  • ENHANCED: ord_intersection/2 to raise errors of the input is not a proper powerset.
  • FIXED: Possible crash enumerating a trie holding indirect values against instantiated data. Reported by Eric Zinda.

[Sep 16 2021]

  • FIXED: VMI_FUNCTIONS build now works with LDFUNC changes
  • FIXED: Issue#883: Decompiler to preserve order of arguments to optimized +/2 and -/2 functions.

[Sep 15 2021]

  • FIXED: Issue#882: Test failure if xpce is not added to the build. Reported by David Tonhofer.
  • BUILD: Make building the docs works if X11 is not included.

[Sep 14 2021]

  • FIXED: Completion of lazy monotonic tabling to exclude lazy monotonic tables without queued dependencies as there is no point in evaluating these now.
  • FIXED: Lazy monotonic tabling detection that a mutual dependent monotonic dependency network is complete.

[Sep 11 2021]

  • FIXED: Allow listing/1 from a temporary module.

[Sep 8 2021]

  • ADDED: customize/edit command to accept --no-wait option. Requires latest xpce package. Can by used with editor plugin for terminator.

Package bench

[Nov 28 2023]

  • ENHANCED: Better compensation for computing dummy overhead. Contributed by Jose Morales
  • PORT: Make benchmarks run on Scryer Prolog 0.9.3

[Nov 26 2023]

  • FIXED: queens_clpfd.pl benchmark merely posted the constraints. Now actually solves them and does not generate all solutions as these are too many.

[Nov 24 2023]

  • ADDED: Ciao lang
  • PORT: Improve portability for boyer.pl

[Nov 22 2023]

  • PORT: Generalize, support XSB, GNU-Prolog and Trealla Prolog.

[Nov 23 2023]

[Nov 22 2023]

[Nov 21 2023]

  • ENHANCED: Portability, Prolog driver, many details Now uses a single (SWI-)Prolog program for the overall management, running the Prolog system(s), joining the data and generating the chart.

    We now have a system in place to support pretty much every Prolog system, with or without modules. SWI, Yap and SICStus can do the job with the original sources. For e.g., Scryer we transform the sources and test beforehand which files Scryer can handle.

[Nov 22 2023]

[Nov 19 2023]

  • PORT: Support CSV for all platforms
  • PORT: Revive YAP and SICStus compatibility.

Package debian

[Aug 7 2023]

  • ADDED: dependency on Python itself. Although a dependency on libpython3-dev is good enough, cmake cannot find the Python conponents without Python.

[Aug 2 2023]

  • ADDED: Python3-dev dependency

Package RDF

[Sep 6 2022]

Package archive

[Jul 31 2023]

  • TEST: Avoid dependency on swipl.rc This file is only installed with xpce.

[Apr 19 2023]

  • TEST: Disable write tests under Wine. These tests work fine under Windows.

[Dec 21 2022]

  • PORT: Simply use int64_t as older 3.x libarchive versions do not define la_int64_t. Simply using int64_t seems the easiest way out.

[May 9 2022]

  • FIXED: Allow an open archive to be garbage collected.

[May 6 2022]

  • CLEANUP: Renamed internal functions to make it clearer which context they're called in - added internal documentation about the state transitions - added AR_ERROR state (renamed AR_OPENED to AR_OPENED_ARCHIVE) - added archive_wrapper_init_value for initializing the blob - removed a double-free (ar->entry in read mode)

    Improved tests to check full file contents. Cleanup some CMake property checks.

[Apr 16 2022]

  • CLEANUP: Removed references to libarchive versions before 3.0.0a - Version 3.0.0a was released 2008/05/26 - The "seek" functionality was added 2011/11//18 - The "filter count" functionality was added 2010/02/19 Changed the archive blob from PL_BLOB_NOCOPY to instead be allocated by PL_unify_blob(), which simplifies cleanup on some failure situations. Set blob fields to NULL after they have been freed. Removed unused free_archive()

[Apr 12 2022]

  • TEST: Remove assumptions about the build environment and other details such that the tests also run in different environments such as the installed environment.

[Apr 9 2022]

  • TEST: Added tests for code snippets in documentation and check_installation Fixed typos in documentation Added tests that cause memory leaks and exercise error conditions / failure

Package bdb

[Dec 21 2023]

  • DOC: Build documentation

[Aug 23 2022]

  • PORT: Support static linking

Package chr

[Dec 5 2023]

[Nov 14 2023]

  • BUILD: Another missing use_module for maplist/3.
  • BUILD: Avoid relying on autoloding during bootstrapping.

[Aug 9 2022]

  • WASM: Install generated files in wasm-preload

Package clib

[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

[Jan 25 2024]

[Jan 12 2024]

[Dec 12 2023]

  • BUILD: replace CMake deprecated exec_program() with execute_process()

[Dec 10 2023]

[Nov 21 2023]

[Nov 9 2023]

  • ENHANCED: Make rewrite_host/3 hook work fot tcp_connect/3 Also allows tcp_connect/3 to accept an IP number. These two enhancements avoid the need to lookup localhost on Windows.
  • ADDED: socket:rewrite_host/3 hook for tcp_connect/2 This multifile hook allows for mapping hostnames, either directly to an IP address or another host. Currently a work-around for Windows broken handling of localhost, mapping it directly to the IP address 127.0.0.1.

[Nov 6 2023]

  • PORT: CRT handles for the process pipes must be owned by libswipl.dll.
  • PORT: Work around inconsistent definitions for ETIMEDOUT on Windows.
  • PORT: We cannot share Windows CRT stream handles with the Prolog core.

[Nov 4 2023]

  • PORT: Windows: create_process/3: make stream(S) work. This patch fixes the options stdin(stream(S)), etc. when S denotes a file stream by enabling inheritance for the handle before calling ProcessCreate().

[Nov 3 2023]

[Aug 30 2023]

  • TEST: Use PlUnit for the socket tests.
  • FIXED: udp_receive/4: did not pass address parameters correctly.

[Aug 29 2023]

  • PORT: MSVC Avoid issues with different address length and buffer size types.
  • PORT: Support MSVC. Mostly silense warnings, improved types, fixed headers.

[Aug 11 2023]

  • FIXED: Export install function from hashstream.so

[Aug 6 2023]

  • PORT: Proper ip6 support detection for FreeBSD

[May 23 2023]

  • FIXED: uuid/1,2: Prolog implementation for random UUID This implementation is only used if the C based ossp-uuid implementation cannot be found.

    Set the two most significant bits (bits 6 and 7) of the clock_seq_hi_and_reserved to zero and one, respectively according to https://datatracker.ietf.org/doc/html/rfc4122#section-4.4

[Apr 3 2023]

[Feb 28 2023]

  • ADDED: uri_edit/3 to build or modify a URI from components.

[Feb 26 2023]

  • FIXED: Memory leak in uri handling

[Feb 13 2023]

  • FIXED: socket address length to be the actual used length. Linux does not care, but MacOS does.

[Feb 7 2023]

  • MODIFIED: uri_authority_components/3: deal with IPv6 addresses embraced using [].
  • PORT: Deal with IPv6 address struct for MacOS
  • FIXED: ip_name/2 for `::1`.
  • ENHANCED: tcp_connect/3 to stick with using the address information if no socket domain is specified, rethrowing the first exception if the connection fails.

[Feb 6 2023]

  • MODIFIED: tcp_connect/3 now tries addresses returned by host_address/2 in order. This typically prefers IPv6 addresses over IPv4 and connects properly if the server can only be accessed on one of these domains.
  • ADDED: ip_name/2 to translate between string and ip address structure.
  • ADDED: host_address/3.

[Feb 5 2023]

  • CLEANUP: Update socket data structures to support IP6
  • ADDED: socket_create/3. Will replace all other socket creation predicates.

[Feb 1 2023]

[Jan 29 2023]

  • TEST: Fixed encoding of test file.

[Jan 26 2023]

  • FIXED: uri_iri/2 to not decode encoding &=; in the query string.

[Jan 17 2023]

  • PORT: Fix some Sdprintf formats

[Jan 9 2023]

  • FIXED: detach_IO/1: Protect I/O stream against garbage collection.

[Nov 23 2022]

  • TEST: Disable tests that require threads on the single threaded version.

[Sep 26 2022]

  • ENHANCED: prolog_server/2: ensure the server thread terminates, also if the client disappears with an error. Improved docs.

[Sep 5 2022]

  • TEST: Synchronize libraries included and tests included. Also includes library(filesex) into the Emscripten version.

[Sep 4 2022]

  • PORT: Windows executable files may not have read access if they are a reparse point.

[Aug 30 2022]

  • FIXED: relative_file_name(Dir, SameDir, Rel) to return Rel as `.` rather than ''.

[Aug 20 2022]

  • TEST: Disable tests that need threads on the single threaded version.

[Aug 19 2022]

  • WASM: Re-group plugins to make it easier to select only those that do not depend on OS features.
  • PORT: Replace old K&R declarations

[Jul 7 2022]

  • ADDED: library(sched), providing a start at accessing the OS scheduling primitives.

[Jun 28 2022]

  • FIXED: read_line_to_codes/2: avoid line ending with \r if the \n is found just after a flush. This patch also includes a rewrite of this predicate and read_stream_to_codes/3 to use UTF-8 as intermediate representation rather than wchar_t, avoiding the need for UTF-16 surrogate pairs.

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

[Feb 23 2024]

  • CLEANUP: tests and clarification of term to string conversion.

[Feb 20 2024]

  • DOC: add missing method/function documentation

[Feb 19 2024]

  • FIXED: term-to-string and related functions
  • ENHANCED: added PlTerm::must_be*() methods
  • ENHANCED: remove unnecessary "const ...&" from parameters; deprecate some dubious functions

[Jan 14 2024]

  • DOC: Add some background documentation for C++ constructors, destructors, unique_ptr

[Jan 2 2024]

  • ENHANCED: added PlBlob::pre_delete()

[Dec 17 2023]

  • DOC: Improve blob sample code

[Nov 2 2023]

  • MODIFIED: SWI-cpp2.h includes inlined methods by default
  • PORT: Removed check_rc(). Seems not all C++ compilers can deal with this.

[Oct 21 2023]

  • ENHANCED: added unwrap() method and PlUnwrapPtr()

[Oct 19 2023]

  • PORT: Retain C++17 compatibility by removing designated initializer (a C++20 feature)
  • TEST: Ensure strict checking of C++17 standard on GCC.

[Oct 4 2023]

  • ENHANCED: PlStream error handling + wrapper methods (and remove PlAcquireStream)

[Sep 17 2023]

  • ENHANCEMENT: added PlAcquireStream

[Sep 11 2023]

  • ENHANCED: AtomMap utility

[Sep 7 2023]

  • DOC: blobs and exceptions
  • ENHANCED: std::string instead of char* in some calls (no code change needed) - Can add char* interface if needed for performance (unlikely) PlTerm(term_t) constructor is public, for consistency with PlAtom

[Sep 1 2023]

  • PORT: MSVC MSVC work-arounds for compiling the tests. MSVS requires c++20 for the blob type initialization.

[Aug 18 2023]

  • FIXED: likes.cpp sample code

[Aug 7 2023]

  • CLEANUP: Simplify blob interface and more Simplify blob interface (PlBlob) - Add PlTerm::unify_blob for unique_ptr - Add try/catch to blob callbacks - Improve documentation of PlBlob Rename some implementation functions to more meaninful names Fix inverted condition test (zero vs non-zero return code) Move some code from SWI-cpp2.h to SWI-cpp2.cpp Add PREDICATE_CATCH macro to remove copy&paste code duplication Rename some example classes to improve the documentation Improve some garbage collection tests for blobs Update with changes from swipl v9.1.12

[Aug 2 2023]

[Jul 26 2023]

  • TEST: Failed on Windows Windows writes %p without leading 0x.

[Jul 25 2023]

  • PORT: Fixed Windows build Not clear to me why the Windows specific C++ wrapper claims the API functions cannot be found. Disabled for now.

[Jul 16 2023]

  • DOC: Fixed LaTeX errors

[Jun 11 2023]

  • ADDED: added API for blobs

[Apr 29 2023]

  • DOC: Fixed LaTeX errors and duplicate conclusion section.

[Apr 8 2023]

  • ENHANCED: C++-compatible exception handling + more wrapper functions and classes SWI-cpp2-plx.h contains wrapper functions (imported from SWI-cpp2.h) - throw PlException for Prolog errors - most SWI-Prolog.h functions have a wrapper. verify() methods removed from PlAtom, PlTerm, etc. - the wrapper functions do the checking. Some executable code has been moved to SWI-cpp2.cpp - can be inlined, if desired. PlException is now a subclass of std::exception, not a subclass of PlTerm. PlTypeError, PlDomainError, etc. are no longer subclasses of PlTerm, but are functions for creating suitable PlException objects. The string comparison operators are deprecated; use as_string() and std::string comparison instead, which allows specifying the encoding. Added PlRecord, PlRecordExternal, PlControl (used by PREDICATE_NONDET), PlStream. Fixed numerous bugs and misfeatures; added tests.

[Mar 24 2023]

  • TEST: Do not build and link the tests when building with STATIC_EXTENSIONS

[Mar 10 2023]

  • TEST: Updated for new qlf integer exchange functions.

[Mar 5 2023]

  • TEST: Add some PL_qlf_*() tests
  • TEST: Fix C++ allocation tests

[Feb 8 2023]

  • TEST: PL_open_query with various options plus some foreign.doc examples

[Dec 6 2022]

  • FIXED: PlQuery() should resolve the predicate in the target module if one is provided as well as set the context. This bug breaks completion in swipl-win.

[Dec 5 2022]

  • TEST: Avoid encoding issues when running the tests.

[Dec 4 2022]

  • TEST: Fixed PL_scan_options() test for 32-bit platforms.
  • TEST: Avoid test_common.pl. Although avoiding duplication is good, it is not a good idea that when build with -DINSTALL_TESTS, this file ends up in the public library.

[Dec 3 2022]

  • DOC: Fixed LaTeX errors and duplicate labels.

[Dec 2 2022]

  • DOC: Add "philosophy" section on classes Remove some obsolete sections Some cleanup of markup
  • ADDED: PlPredicate, PlModule classes, support Pltermv(0) Also removed some unused parameter defaults and clean up initialization checks.

[Nov 29 2022]

  • DOC: fix description of how exceptions work

[Nov 26 2022]

  • TEST: Disabled invalid tests on Windows.

[Nov 24 2022]

  • DOC: more details about exception handling

[Nov 22 2022]

  • TEST: Fixed C interface PL_scan_options() tests.

[Oct 20 2022]

  • TEST: Renamed foreign function test module to test_ffi. This avoids a conflict (and confusion) with the ffi pack to run the tests interactively.

[Oct 18 2022]

  • TEST: Added PL_scan_options example

[Oct 10 2022]

  • TEST: Avoid dependency on gethostname introduced by the tests.

[Oct 6 2022]

  • TEST: Remove .as_string.c_str() as this is unsafe.

[Oct 4 2022]

  • DOC: Document both version 1 and version 2.
  • DOC: Setup for documenting both SWI-cpp.h and SWI-cpp2.h

[Sep 24 2022]

  • ENHANCED: added PlTerm::record(), PlTerm::write(), PlTerm_recorded, PlRewindOnFail(), PlStringBuffers Removed PlTerm::unify_*_check() Added example code for backtracking predicate that gets info on int types Fixing integer overloading for win32, MacOS - remove many of the overloaded methods and instead use names derived from the underlying SWI-Prolog PL_put_*() and PL_unify*()

[Sep 6 2022]

  • DOC: Added a porting section
  • PORT: Make SWI-cpp2.h compile on systems where `long int` is 32 bits (Win64). Patch by Peter Ludemann.

[Sep 5 2022]

  • CLEANUP: better reuse of Prolog exceptions.

[Jul 7 2022]

  • ENHANCED: Version 2 of C++ interface - removed some implicit conversions and constructors whose use can cause subtle bugs - made most conversions and constructors explicit - added subclass constructors to make Prolog types explicit and avoid some subtle bugs
    • added copy constructors, assignment operators - renamed handle_, ref_ to C_, for simplified "getter/setter" - added PlCheck() for easier calling of SWI-Prolog.h functions - removed conversion (cast) operator - added pseudo-exception PlFail for returning failure from a PREDICATE - also used by the unify_XXX_ex() methods - deprecated assignment operator for term unification - replaced by unify_XXX() and unify_XXX_ex() methods - added some support for std::string, std::wstring - and additional support for wchar_t - added some more methods that allow using PlTerm:xxx(...) instead of PL_xxx(t.get_term_t(), ...); also for PlAtom - added PlTerm::type(), PlTerm::is_variable(), etc. methods - moved atom_t handle into private PlAtom, term_t into private PlTerm - added get_atom_t(), get_term_t() - added verify(), is_valid(), reset() methods - some refactoring, e.g., PlTerm::check(), PlTerm::null - refactored the integer "getters" to get around problems with C++ built-in conversions and integer promotion. - refactored comparison methods, added PlTerm::compare() - replaced "int" as return type by "bool" in many places - use common C++ naming practice for class fields (suffixed by "_") - added unit tests - moved examples from test.cpp to unit tests file (cpp4pl.cpp, test_cpp.pl) - used C++ initializer lists where possible - added [[nodiscard]] to many methods - added [[deprecated]] to some methods - (internal: used a template class to handle some boilerplate)

[Jul 3 2022]

  • ADDED: PlTerm casts for bool and uint32_t

Package http

[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)

[Feb 28 2024]

  • ENHANCED: http_read_data/3: map syntax errors to status 400 If reading the data results in a syntax error we add context that causes http_exception.pl to map the error to a HTTP 400 reply rather than HTTP 500.

[Feb 26 2024]

  • FIXED: HTTP Session data plugin for Redis timeout handling.

[Feb 21 2024]

  • ENHANCED: Redis support for HTTP sessions This patch deals with IPv6 peers and allows for specifying both an RW and RO Redis database. An RO Redis database may be used for high-availability (sentinel) or clustered Redis DB.

[Feb 19 2024]

  • FIXED: json_write/2,3: deal with high Unicode characters on Windows.
  • FIXED: use-after-free memory access error This notably causes the close/0 on a stream opened using http_open/3 to fail on some platforms.

[Feb 14 2024]

  • FIXED: http_open/3: avoid TSL handshake error when reading data If we have an HTTPS connection, some servers hangup the line after sending the reply rather than using the proper TLS EOF handshake. This patch uses a range stream to read only the indicated content-length bytes, also if we agree to close the connection after the transfer.
  • FIXED: http_open/3: reconnect a Keep-alive connection if we read an empty header.

[Feb 8 2024]

[Jan 26 2024]

[Nov 26 2023]

[Nov 9 2023]

  • ENHANCED: http_stop_server/2: try to avoid connecting This sends a signal to the HTTP accept thread. To make sure the signal is processed it connects after the signal. Unfortunately this takes 2 seconds before raising an error on Windows. We now first check that the signal is processed within 0.1 second. If so, we are happy. If not, we try to connect anyway.

[Oct 11 2023]

  • ENHANCED: Pass number reading exceptions rather than generating invalid_number.

[Sep 6 2023]

  • FIXED: Several predicate options declarations.

[Aug 29 2023]

  • PORT: Support MSVC Cleanup types.

[Aug 1 2023]

  • ADDED: Updated list of HTML void elements

[Jul 28 2023]

[Jun 20 2023]

[Jun 1 2023]

  • ADDED: Full HTTP chunked support for CGI streams The CGI stream, as used by the HTTP server framework, supports setting the transfer encoding to chunked, but ctually had its own separate implementation. This commit shares most of the code with http_chunked.c and provides support for emitting chunk extensions as well as trailers.
  • ENHANCED: http_open/3: add lazy loading of chunked encoding support.

[May 31 2023]

[May 30 2023]

  • ADDED: UTF-8 as default encoding for several SPARQL related content types.

[May 19 2023]

  • FIXED: Prevent type error in redis based session management.

[May 2 2023]

  • FIXED: http_open/3 with keep-alive connections Fixes two issues: (1) streams may be left open (leaking stream handles) when an error occurs during the HTTP handhake and (2) errors during the http handshake were propagated without the error(_,_) wrapper. With http handshake we refer to sending and reading the header as well as, for https, the TLS handshake.

[Apr 25 2023]

  • MODIFIED: reply_json_dict/2 to explicitly use UTF-8 by default. Where the other reply_json variants used application/json; charset=UTF-8, reply_json_dict/2 used only application/json. This is fine according to the standards, but some clients insist on the charset. Ths patch makes all versions compatible.

[Apr 24 2023]

  • FIXED: library(http/http_log): exception when logging was disabled. Harmless as the exception was printed but otherwise ignored.

[Mar 7 2023]

  • FIXED: When stream garbage collection is enabled we cannot make a callback from the CGI context stream in case a context was lost and reclaimed through AGC.

[Mar 2 2023]

  • ADDED: #158: Handle surrogate pairs in http/json The JSON string "\ud83d\udc95" has one codepoint, not two.

    This is because the spec allows extended characters to be encoded as a pair of 16-bit values, called a "surrogate pair".

    From RFC 4627:

    To escape an extended character that is not in the Basic Multilingual Plane, the character is represented as a twelve-character sequence, encoding the UTF-16 surrogate pair. So, for example, a string containing only the G clef character (U+1D11E) may be represented as "\uD834\uDD1E".

    This commit fixes the JSON parser to handle such surrogate pairs.

[Feb 28 2023]

[Feb 25 2023]

  • FIXED: Possible non-determinism in write_html/2 on a mailbox that has not been posted to.

[Feb 10 2023]

  • FIXED: Issue#157: do not try to read the reply data for HTTP return codes that have no reply: 1xx and 204.
  • ADDED: http_open/3 using the headers(-Reply) option to add status_code(Code) to the headers.
  • FIXED: Issue#157: reading reply for OPTIONS method.

[Feb 9 2023]

  • MODIFIED: If the server is terminated on a signal, exit with 128+signum.

[Feb 7 2023]

  • DOC: IPv6 consequences for the HTTP libraries.
  • ADDED: http_server/2 to allow creating IPv6 sockets.

[Jan 27 2023]

  • FIXED: `1Inf -> 1.0Inf` syntax.

[Jan 23 2023]

  • ENHANCED: More robust restoring of current output after redirection to the CGI stream.

[Jan 11 2023]

[Jan 9 2023]

  • FIXED: Avoid recursion when garbage collecting HTTP sessions under Redis session management.
  • ENHANCED: Do not try to send websocket broadcast messages after shutdown progressed too far.

[Jan 6 2023]

  • ADDED: library(http_unix_daemon) to broadcast http(shutdown) before calling halt(0).
  • ENHANCED: http_absolute_uri/2 to use the setting http:public_scheme or the port to find the scheme (http or https)

[Jan 4 2023]

  • ENHANCED: Redis http session plugin to use caching to speedup checking whether a session is alive.

[Dec 21 2022]

  • FIXED: Issue#120: term//2 (term to HTML) rendering of infix terms if these contain "member" terms with arity 2.

[Dec 7 2022]

  • TEST: Avoid using test condition bindings.

[Nov 23 2022]

  • CONFIG: Reorganise installation and docs to distinguish core part we always want, the HTTP client and HTTP server libraries.

[Sep 23 2022]

[Sep 16 2022]

  • WASM: Support more the HTML related infrastructure.
  • PACKAGE: Include http_quasiquotations.pl and the term_html.pl imported from the Pengines package into the minimal installation.

[Sep 5 2022]

  • TEST: Synchronize installed and tested packages.

[Sep 1 2022]

[Aug 19 2022]

  • WASM: Provide a stripped down version for the WASM target, currently providing the library(http/html_write), the json and stream library.

[Aug 2 2022]

  • ADDED: Mime type mappsing from .data to application/octet-stream.

[Aug 1 2022]

  • ADDED: MIME type rules: added .wasm -> application/wasm.

[Jul 10 2022]

[Jul 8 2022]

Package inclpr

[Sep 1 2023]

  • PORT: MSVC Cleanup old code.

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.

[Dec 12 2023]

  • BUILD: replace CMake deprecated exec_program() with execute_process()

[Nov 5 2023]

  • PORT: Avoid conversion messages and warnings for MSVC

[Oct 16 2023]

  • COMPAT: Set Prolog flag gc_thread to false SWI-Prolog used to disable the garbage collection thread on `--no-signals`. This was for JPL and is removed in version 9.1.18. It is unclear why using a separate GC thread causes the prolog_in_java test to hang.

    This patch sets the GC thread explicitly.

[Sep 25 2023]

  • UPDATED: Java standards from 7 to 8. Support for 7 is dropped from latest OpenJDK releases and 7 is officially EOL for a while.

[Jul 18 2022]

  • TEST: simplify & tidy unit tests Tidier, simpler JUnit tests, removing dead code and duplicated stuff, with reduced noise from succeeding tests (still available via REPORT flag, but now quieter by default).
  • ENHANCED: non-recursive Term.getSubsts reimplementation This fixes another term-depth-limited issue with JPL's public API by reimplementing Term.getSubsts() non-recursively

[Jul 5 2022]

  • ENHANCED: Non-recursive Term.getTerm reimplementation Replaces the original recursive implementation of Term.getTerm() etc. (which runs out of JVM stack for e.g. lists of more than a few thousand members) with a depth-unlimited non-recursive version (see Term.getLoop) and adds a couple of JUnit tests

[Jul 3 2022]

  • ENHANCED: Non-recursive Term.put reimplementation Replaces the original recursive implementation of Term.put() etc. (which runs out of JVM stack for e.g. lists of more than a few thousand members) with a depth-unlimited non-recursive version (see Term.putLoop) and adds a couple of JUnit tests

[Jun 22 2022]

  • TEST: Cleanup and enhancements.

Package ltx2htm

[Mar 2 2024]

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

[Dec 8 2023]

  • MODIFIED: As all extensions are now installed in a subdirectory we no longer need an extra layer.

[Sep 30 2023]

  • FIXED: Various math symbols Unicode translation

[Aug 29 2023]

  • PORT: Support MSVC Silense warnings, cleanup types.

[Aug 14 2023]

  • ENHANCED: Use more Unicode characters for math commands.

[Sep 18 2022]

  • FIXED: Memory error.

[Aug 23 2022]

  • PORT: Allow for static linking

Package mqi

[Dec 8 2023]

  • MODIFIED: Install MQI as a SWI-Prolog app This simplifies the command line interface and avoids the need for autoloading. New interface is
    swipl mqi [option ...]

[Aug 17 2023]

  • TEST: Don't use Unix domain sockets if the path is so long that it will fail

[Aug 16 2023]

  • BUILD: Avoid dependency on CMAKE_SOURCE_DIR

[Mar 4 2023]

  • TEST: Do not run tests if Pythin cannot be found.

[Dec 12 2022]

  • TEST: Avoid recorsive Python exception

[Sep 2 2022]

  • DOC: hard links to swipl manual
  • DOC: hard links to swipl manual the "section references" do not get connected properly

Package nlp

[Aug 29 2023]

  • PORT: Suppress MSVC warnings

Package odbc

[Oct 18 2023]

  • ADDED: odbc_table_column/4: improved mapping to Prolog types. Maps 'TEXT' to longvarchar(Length).
  • ADDED: odbc_prepare/4: return derived parameter mapping This commit also improves debug messages on type mappings to use type names rather than integers and writes debug messages for the type mapping for prepared statement arguments.

[Aug 31 2023]

  • PORT: MSVC Cleanup types (inroduce more size_t)

[Jan 29 2023]

  • PORT: Fix some printf formats

[Dec 18 2022]

  • PORT: More odbc type work around. As we do not use long [long] int sizes or availability, just leave them undefined and let unixODBC do its magic.
  • PORT: Include patch from Debian for some 32-bit systems. Some versions of sql.h depend on HAVE_LONG_LONG. Our code does not use any of the properties for `long int`.

[Nov 23 2022]

  • PORT: Allow compiling in single threaded mode.

Package pcre

[Aug 30 2023]

  • PORT: MSVC Avoid type warnings.

[Jul 31 2023]

  • TEST: Install input files.

[Mar 12 2023]

  • ADDED: added save/load functionality to pcre blob

[Feb 7 2023]

  • ADDED: re_match/2,3: calls to known patterns may be compiled using set_prolog_flag(re_compile, true).

[May 24 2022]

  • TEST: Add Unicode>0xffff test

[Apr 6 2022]

  • TESTS: Fixed tests to work on systems without pcre2 jit

[Apr 5 2022]

  • DEBUG: Removed debugging prints. The print statement in the pcre_release() function is unsave as during proces cleanup the pattern may vanish before the regular expression.
  • FIXED: Make comparison and printing the blob work for Unicode patterns.

[Mar 29 2022]

  • ENHANCED: re_config/1 backtracks through all possible values re_config/1 fails if an invalid otption is given instead of throwing an error fixed some PCRE1 vs PCRE2 documentation for re_config/1 added a test to check that re_config/1's documentation is a complete list comparison now uses the pattern; blob-write also shows pattern fix bug in compare_pcres() that incorrectly resulted in equality

[Mar 27 2022]

  • FIXED: memory leak if re_compile fails or throws an error

[Mar 25 2022]

  • PORT: Make compiled and test using pcre2 10.31.
  • PORT: Make work on systems that do not provide JIT support. Possibly it is better to fail on the option in that case?

[Mar 24 2022]

  • ENHANCED: use pcre2 library instead of pcre1 - Issue #2 - Numerous small bug fixes and enhancements (e.g., handling of duplicate options, capture_type, error checking). - This commit takes advantage of refactoring that was done on the pcre1 code to make it easier to handle the pcre2 options (which are both more numerous and have a different underlying API). - Added new pcre2 options - Removed some obsolete options, preserving backwards compatibility where possible - The meaning of optimise(true) has changed - it now calls the JIT compiler - Renamed bsr(...) and newline(...) options to bsr2(...) and newline2(...) because the pcre2 interface has changed - compat(javascript) is replaced by alt_bsux(true) and extra_alt_bsux(true) - Code improvements: use uint32_t wherever possible instead of unsigned or int - Does not use the new pcre2_substitute() for re_replace/{4,5}, re_split/{3,4}, re_foldl/6 (however, some improvements have been made to the APIs for these). - Added test cases

[Mar 9 2022]

[Feb 4 2022]

  • ENHANCED: re_replace/{4,5}, re_split/{3,4} handle capture_type option - some refactoring - some bug fixes - added tests

[Jan 26 2022]

  • FIXED: re_replace/4 can now handle duplicated back references (Issue #6) - added escapes for "$" and "\" Refactored "capture map" code Minor reformatting

[Jan 22 2022]

  • ENHANCED: re_replace/5 with options list, similar to re_matchsub. There are still some "fixme" tests, related to global capture_type. Fixed: caching of compiled patterns with options. Renamed some predicates to make things clearer.

[Nov 23 2021]

  • FIXED: re_config/1 throws error for all cases of invalid argument Added Unicode tests (for migration to PCRE2 Issue #2) Fixed uncleared exception Use convenience function or error returns Regularize some names Documentation had "optimize" option; code had "optimise"
    • allow both Fixed detection of type suffix in pattern names Fix potential memory leaks and missed error checks Refactor conflated pcre return code PL_... return code Document return codes Lower-case cmake functions that are lower-case elsewhere Small fixes from turning on more compiler warning

Package pengines

[Dec 10 2023]

  • CLEANUP: use uri_edit/3 to compute the final server path

[Nov 26 2023]

  • FIXED: chunk=false. Spotted by @meditans

[Nov 22 2023]

  • ADDED: Allow no-chunking behavior for pengines. If chunk=false we avoids the usage of findnsols (and the effects on global variables associated with its backtracking). Initially, this was motivated by the fact that I wanted the pengine top-level (which is recursive in nature) to respect the chr store, but I also think it's a more principled thing to do.

[Sep 6 2023]

  • FIXED: Predicte option declarations.

[Sep 16 2022]

  • PACKAGE: Move term_html.pl to the http package. It is not specific for Pengines.

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.

[Dec 15 2023]

  • FIXED: Avoid dependency on library(pce) Allows running the documentation tools without library(pce)

[Dec 12 2023]

[Dec 10 2023]

  • CLEANUP: File system interaction to use more libraries.
  • DOC: Document doc_save/1 include_reexported(Bool) option.

[Nov 26 2023]

  • ADDED: `@since` tag Allows annotating the version when a predicate was added.

[Oct 18 2023]

  • ADDED: man_pages//2 option qualified(always) This is used by help/1 on the commandline to show documented private predicates when found in some module.

[Oct 17 2023]

  • FIXED: Handle search if summary contains non-ASCII characters.

[Jul 12 2023]

  • ENHACED: Give manual section in HTML title

[May 9 2023]

  • ADDED: Include documentation for exported predicates loaded from other files. While this was in place for imported modules (re-export), documentation from non-module files loaded by and exported from a module was not included.

[Feb 28 2023]

  • FIXED: LaTeX backend: generating \url{} must escape #.

[Jan 25 2023]

  • FIXED: Possible race condition when pldoc is loaded concurrently from multiple threads. Hook is installed before the predicates it needs are defined.

[Nov 23 2022]

  • CONFIG: Make most of PlDoc work in the single threaded version.
  • CONFIG: Make PlDoc work if the HTTP server components are not part of the configuration.

[Nov 20 2022]

  • ENHANCED: Source button to prefer loaded code over xref data.

Package plunit

[Mar 13 2024]

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

[Jan 17 2024]

  • MODIFIED: removed library(test_cover). This library is moved to the core as library(prolog_coverage) because it has no dependencies on the unit testing and serves more purposes.

[Jan 16 2024]

  • ADDED: library(test_cover): allow to save and restore coverage data. This patch is a major improvement to the coverage analysis tool. It modifies the API, although the old show_coverage/2 is still working as it used to.

    It improves the report and, most importantly, allows for combining coverage data from multiple Prolog invocations.

  • ADDED: cov_save_data/1.
  • FIXED: #23 allow set_tests_options([run(make(all))]).

[Jan 12 2024]

[Dec 14 2023]

[Nov 14 2023]

  • FIXED: show_coverage/2: details for non-module files with tests. A non-module file that defines a test was not considere a non-module file due to the existence of the test module and as a result, coverage details were no shown for such files.

[Oct 13 2023]

  • ENHANCED: If --on-warning=status or --on-error=status is active, consider such messages testv failures When running tests using --on-error=status, printing an error message that does not cause a test to fail silently ignores the message while Prolog exits with status 1. That is hard to debug. Now, if these flags are present, tests that emit warnings or errors are considered failed and thus the test is printed.

[Jul 26 2023]

  • FIXED: call print_message/2 for begin/end unit also when tests run in paralel Runs print_message(silent, plunit(begin(Unit))) and print_message(silent, plunit(end(Unit, Summary))).

[May 1 2023]

  • ENHANCED: Name of failed test. Now prints both the unit and test and uses quoted write so you can copy/paste the result.

[Mar 5 2023]

[Feb 18 2023]

  • DOC: Sync recent changes into the LaTeX docs

[Feb 13 2023]

  • FIXED: forall(Generator) tests that failed on an assertion considered all subsequent generated tests to fail as well.
  • FIXED: run_tests/0-2: failing tests were no longer reflected in the success/failure of this predicate.

[Feb 12 2023]

  • MODIFIED: Removed global concurrent(true), keeping only jobs(Count). At unit level, the option is maintained, but currently prints a message that it is not supported.

[Feb 10 2023]

  • FIXED: make/0 to run all unit tests in changed files rather than only the first unit.

[Feb 2 2023]

  • FIXED: Avoid using tty width if really narrow.
  • FIXED: Bad format string. Peter Ludemann.

[Feb 1 2023]

  • ADDED: Re-implemented library(plunit) option processing, mapping all global test options to Prolog flags plunit_<option>, e.g. ?- set_prolog_flag(plunit_format, log).

    is the same as

    ?- set_tests_options([fomat(log)]).

    Added option show_blocked(+Boolean) to list names of blocked tests and their reason only on demand.

[Jan 31 2023]

  • FIXED: reporting blocked tests.

[Jan 30 2023]

  • ENHANCED: load_test_files/1: provide feedback on found/loaded tests.
  • FIXED: Restore output when interrupting a running test. @swi.

[Jan 26 2023]

  • FIXED: Avoid defining term_expansion/2 as discontiguous. It is not defined for swi, causing check/0 to report a warning.

[Jan 25 2023]

  • MODIFIED: Large scale rewrite the library(plunit). Highlights:
    • Added timeout support - Added concurrency at the unit level using the jobs(Jobs) option. - Added output(on_failure) (default) to only emit console output of a test when it failed. - Added two output formats:
      • tty, which is the default it the output is a tty reuses the current output line on success, only displaying failed tests.
      • log, which maintains all output. - Removed the sto(Mode)

      options, replaced by an occurs_check(+Mode) option at the global, unit and test level.

    A lot of internal restructuring.

[Jan 20 2023]

[Dec 8 2022]

  • ADDED: test_set_options/1: output(+Mode) to suppress output or emit it only after the test fails.

[Dec 7 2022]

  • CLEANUP: Cleaner code for running tests and map to results. This is a squashed commit for a large set of improvements. Roughly, in tackles:
    • Cleaner wrapping code for running the tests, removing a lot of code duplications
    • Make test time available to a larger part of the code and use call_time/2 to get more extensive resource usage information than just time.
    • MODIFIED: Various message formats have changed. This may impact code that uses the message hooks to make the output satisfy some test driver. This is also the driving force: the end-goal of these changes is to provide a good concurrent test framework.
  • ADDED: current_test_unit/2 to enumerate the available unit tests.

[Dec 2 2022]

  • MODIFIED: extend message term plunit(end(Unit)) to plunit(end(Unit, Summary)) where summary provides the status and time spend on the unit.

Package protobufs

[Dec 12 2023]

  • BUILD: replace CMake deprecated exec_program() with execute_process()

[Aug 30 2023]

  • PORT: MSVC Cleanup float32 and int32 handling.

Package redis

[Feb 16 2024]

  • ADDED: sentinel_slave/4
  • FIXED: redis_get_list/3,4: LLEN can return OK. Unclear why this is possible. It happens in HTTP Redis based session management, where the list is created using LPUSH. As a work-around, we return the empty list.

[Jun 1 2023]

  • FIXED: Better reconnect implementation

[Jan 2 2023]

  • ENHANCED: Avoid hanging connection on invalid authentication.

[Dec 30 2022]

  • ADDED: Split authentication for the redis instances from the sentinel network.
  • FIXED: Also connecting to the sentinels require authentication.

[Dec 28 2022]

  • ADDED: Connect to a master through a sentinel network.
  • ADDED: Support Redis TLS connections.

[Dec 12 2022]

  • TEST: More relaxed timing to make test pass on heavily loaded machines.

[Oct 18 2022]

  • FIXED: Handle push messages that do not include a pubsub header (@swi).

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.

[Nov 30 2023]

[Sep 6 2023]

  • FIXED: Predicate options declarations.

[Sep 1 2023]

  • PORT: MSVC Type cleanup, added atomic versions.

[Apr 29 2023]

[Mar 7 2023]

  • FIXED: rdf_literal/1 should not succeed on IRIs in object position

[Feb 26 2023]

  • FIXED: memory leak in Turtle parser in create/destroy cycle.

[Jan 29 2023]

  • PORT: Fix some *printf formats

[Jan 17 2023]

  • PORT: Fix some Sdprintf formats

[Dec 8 2022]

  • PORT: Support full Unicode input for ntriples and trutle on Windows. Based on PR#108 by @mgondan.

[Nov 21 2022]

  • FIXED: rdfa.pl: Avoid dependency oin development tools

[Oct 3 2022]

  • DOC: Fixed LaTeX errors.

[Sep 5 2022]

  • TEST: Make tests work in restricted single threaded version.

[Aug 20 2022]

  • BUILD: add cmake dependency
  • PORT: Make the turtle and ntriples readers and writers load without library(semweb/rdf_db). Still issues using them.
  • PORT: Do build build library(semweb/rdf_db) in single threaded mode. In this mode the semweb only provides the turtle and ntriple readers and writers.

[Jun 21 2022]

Package sgml

[Jan 28 2024]

  • PORT: Define PATH_MAX by hand if all fails

[Aug 29 2023]

  • PORT: MSVC More portable types and avoid possible overflows by using size_t
  • PORT: Support MSVC Suppress warnings, support MSVC atomic intrinsics.

[Aug 11 2023]

  • FIXED: Race condition in dtd_property/2 Can lead to Domain error: dtd_property’ expected, found entities(_37838)'

[Apr 16 2023]

  • ADDED: the atom transformation to the attribute value in xpath. The content attributes provided with load_structure/3 can be atoms or strings depending on the attribute_value/1 option. So adding a transformation of attribute values to an atom in xpath/3 should be a useful feature, such as string transflation.

[Feb 26 2023]

  • TEST: Free sgml parser and end of test to avoid a memory leak.

[Jan 18 2023]

  • FIXED: Back skip over UTF-16. @UweR.

[Jan 17 2023]

  • ENHANCED: Partial support for full Unicode handling ion Windows (UTF-16).

[Jan 16 2023]

  • ADDED: Add ignore_doctype(+Bool) option to explicitly ignore DOCTYPEs embedded in XML

[Aug 19 2022]

  • CLEANUP: Avoid function pointers with incomplete prototypes and make the install function follow the conventions to allow for statically linked extensions.

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? [Feb 21 2024]
  • FIXED: #170 crypto_data_hash/3: allow hmac key to contain 0-bytes.

[Nov 7 2023]

  • PORT: Add OPENSSL_Applink() to ssl4pl.dll This function is used by OpenSSL to get module-consistent of the MS CRT library. It is expected at the application level. This patch tries to keep it locally in the ssl binding with a small relay function from the SWI-Prolog executable.
  • PORT: Make use of OpenSSL "applink" Consistency use OpenSSL applink.c if this is defined. This patch itself does not enable applink.
  • TEST: Allow running SSL test suite from main build directory.

[Nov 6 2023]

  • PORT: Create test certificates when running under Conda

[Oct 13 2023]

  • FIXED: Avoid leaking file handle in test

[Sep 27 2023]

  • PORT: Handle the zlib OpenSSL dependency correctly on Windows.

[Aug 29 2023]

  • PORT: MSVC Make configure work by removing z.lib dependency when not using MinGW and avoid several type errors.
  • PORT: MSVC MSVC doesn't allow for array declaration from `const int`. Also use MSVC intrinsics for atomic operations.
  • FIXED: Return type for Prolog term.

[Feb 22 2023]

  • ADDED: crypto_password_hash/2,3 option algorithm(bcrypt) Uses the Openwall implementation of BCrypt, a public-domain, widely-used C implementation.

    Requires openbsd support from library(base64), added Feb 22 2023.

[Jan 14 2023]

  • FIXED: Allow HTTPS server to be started as Interface:Port.

[Nov 29 2022]

[Nov 23 2022]

  • TEST: Drop tests when single threaded.

[Aug 13 2022]

  • FIXED: Zero the PL_CRYPTO_HASH_CONTEXT struct on first allocation

[Apr 24 2022]

  • PORT: RTools42, link order for OS libs, add libz

[May 6 2022]

  • BUILD: Ensure HOME is set to a writable path for generating the SSL test certificates.

[May 3 2022]

  • PORT: Avoid deprecated SecKeychainOpen().

[Mar 8 2022]

  • ADDED: Implement clean shutdown hook support for HTTPS.

[Feb 28 2022]

  • TEST: test_ssl won't SIGPIPE without signals

[Feb 21 2022]

  • PORT: Override OPENSSL_OS_LIBS with cmake -Detc. For some reasons, RTools42 needs libz included in the OPENSSL_OS_LIBS

Package table

[Aug 30 2023]

  • PORT: MSVC

Package tipc

[Aug 25 2023]

Package windows

[Oct 26 2022]

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.

[Jan 28 2024]

  • PORT: Define PATH_MAX by hand if all fails.

[Dec 18 2023]

  • CLEANUP: Removed unused code.

[Dec 11 2023]

[Dec 9 2023]

  • ADDED: GUI tracer settings: allow setting ellipses length for text.

[Nov 13 2023]

  • FIXED: Huge spacing in PceEmacs on some fixed width fonts.

[Sep 2 2023]

  • FIXED: Windows possible memory corruption due to long/intptr_t mismatch

[Aug 31 2023]

  • PORT: MSVC - Avoid dependency on globbing in CMake command by using CMake file(GLOB) - Suppress compiler warnings on data loss and signed/unsigned types - Small typing cleanup. - Avoid RedrawWindow() (renamed to pceRedrawWindow()) - Fix SendFunc casting - Avoid conflict over "small"!?

[Aug 28 2023]

  • PORT: Include Win32 port of Xpm dependency This simplifies the build process. The code has been included and updated to avoid many compiler warnings.
  • PORT: C11 compatibility

[Aug 16 2023]

  • BUILD: Copy swipl-rc to home/xpce/prolog This is the only file that required running the binary without installation that was in the source. By copying it to the binary pre-stage home dir we can greatly simplify build_home.pl

[Aug 11 2023]

  • ENHANCED: Hide internal xpce symbols This avoids symbol conflicts and reduces the startup time

[Jul 15 2023]

  • FIXED: Prevent persistent changes to the Prolog stacks in the gui tracer

[May 13 2023]

  • FIXED: finder with default mode to find files for reading.

[Apr 1 2023]

  • PORT: Add function prototypes.
  • PORT: migration of regex library to ANSI C prototypes
  • PORT: Convert gitwrite.c code to ANSI C.

[Mar 26 2023]

  • FIXED: directory->scan existence checking.

[Mar 9 2023]

  • ADDED: Deal with new port option of the profiler.

[Feb 26 2023]

[Feb 14 2023]

  • FIXED: Marshall 64 bit integers from xpce to Prolog.
  • FIXED: pce->write for integers > 32 bits.

[Feb 13 2023]

  • CLEANUP: Use PRIdPTR from <inttypes.h>for printing intptr_t rather than our own creation.

[Jan 27 2023]

  • ADDED: Also bind M-j to newline_and_indent. This is not exactly the same as Emacs does, but in most cases close.

[Jan 24 2023]

  • TEST: Skip test if xpce cannot be found.

[Dec 10 2022]

  • FIXED: file<-time default was accidentally to access where it used to be modified.

[Nov 30 2022]

  • PORT: Make the xpce source compile clean using GCC -pedantic flag. Note that an important part of the problems is that XPCE threads data and function pointers the same. This used to work with a cast to `void*`. This is not allowed in C11. It is allowed to cast both pointers and functions to intptr_t, so with a little detour we get where we need to be. Time will tell whether we will see systems where this conversion is not allowed.

[Nov 23 2022]

  • CONFIG: Avoid dependency on threads.

[Oct 29 2022]

[Oct 4 2022]

  • ENHANCED: PceEmacs: properties of predicates in status line (better text and ignore more irrelevant).
  • ADDED: gxref_called/2 hook into gxref/0 to allow silencing predicates that are called by means of hooks or some other mechanism.
  • FIXED: gxref/0: edit predicate on click to properly handling included files.

[Sep 20 2022]

  • PORT: suppress uninitialized warning in msys2 gcc

[Sep 19 2022]

  • PORT: msys2-compatible mkdir and wildcards

[Sep 7 2022]

  • FIXED: PceEmacs sgml mode: use setup_call_cleanup/3 to ensure Prolog streams to editors are always closed.

[Sep 4 2022]

  • TEST: Create files and directories in temp.

[Sep 2 2022]

  • PORT: Avoid using Windows stat()

Package yaml

[Aug 30 2023]

  • PORT: MSVC

[May 4 2023]

  • FIXED: Stricter number syntax checking. The library tests scalars for numeric syntax and then invokes the Prolog parser. It passed "e" as a number. This patch also documents that, violating the standard, we parse "0." as a string rather than a float.

Package zlib

[Sep 6 2023]

  • FIXED: Predicate options declarations.

[Nov 23 2022]

  • TEST: Disable tests that requires threads

[Sep 6 2022]

  • TEST: Disable socket based tests if sockets are not supported.