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

SWI-Prolog Changelog from version 8.2.4 to 8.4.0

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

[Sep 7 2021]

  • DOC: Updated section "Prolog exceptions in foreign code". Was pretty outdated.

[Sep 6 2021]

  • FIXED: clause/2 moved unification for s(X) :- X = f(Y), p(Y). Bug introduced in fb96dc77bbd86df31ed7bd2282dd5b20f341f534.

[Sep 3 2021]

  • FIXED: clause/2 (decompiler for moved unification instructions against the head.
  • FIXED: clause/2 (decompiler for moved unification instructions against the head.
  • RELEASE: Merging devel (V8.3.29-8-gf6e856bdb)
  • DOC: enhanced docs for ;/2, ->/2, and other control structures.

[Sep 2 2021]

  • PORT: The MUSL C runtime library as used in e.g. Alpino Linux cannot safely call pthread_detach() from the pthread cleanup handler.

[Sep 1 2021]

  • BUILD: Fixed building docs when building without xpce.
  • BUILD: Use PGO optimization for the Debian builds.
  • FIXED: clause/2 (and related predicates) on clauses where unifications are moved into the head failed in a saved state.
  • FIXED: clause/2 for unification that was migrated to the head and used nested in a term used as argument to some body call (using B_ARGVAR instead of B_VAR).
  • ADDED: format_time/3: handle '%P' on systems not using glibc.

[Aug 30 2021]

  • FIXED: Adding missing newlines in tracer commands

[Aug 26 2021]

  • TEST: Fixed answer tests for new toplevel output.

[Aug 24 2021]

[Aug 15 2021]

  • FIXED: Avoid optimizing memory load, causing an infinite loop when creating a new atom.
  • FIXED: =../2 to avoid truncating to int (for arity > 2g).

[Aug 11 2021]

[Aug 10 2021]

  • FIXED: make sure the monotonic propagation flag is only set during monotonic propagation and not while reevaluating non-monotonic nodes.
  • FIXED: Possibly loop adding a lazy monotonic dependency.
  • FIXED: date_time_stamp/2 was broken in timezone handling after e68098ba2b38d7d9597def1b4fc0a8cef1ed43cb.
  • FIXED: Possibly crash in completion detecting for lazy monotonic tabling.

[Aug 9 2021]

  • FIXED: format_time/3 using date/9 term computed the weekday and year day of the UTC time rather than the local time. Mike Elston.
  • TEST: one more test for lazy monotonic tabling.
  • FIXED: We must remove the queued answers or a recursive call will keep re-evaluating them. This triggered tabling_monotonic_lazy_14 after fixing the issues from tabling_monotonic_lazy_16. The disadvantage is that if we get an exception during the propagation we cannot retry. There are probably more troubles with that and we should probably just abolish the involved tables.

[Aug 7 2021]

  • FIXED: If we call an invalid table we must re-evaluate the table immediately, also if this is a lazy table and we are inside lazy answer propagation.

[Aug 9 2021]

  • ENHANCED: Avoid recording duplicate dependencies for lazy monotonic tabling.

[Aug 6 2021]

  • ENHANCED: trace/1,2: add recursion depth to output to make it easier to understand.

[Jul 10 2021]

[Aug 5 2021]

  • FIXED: write_term/2,3 numbervars for '$VAR'(N) terms where N is a GMP integer.

[Aug 4 2021]

  • PPA: Groovy is no longer supported. Added Hirsute
  • DOC: absolute_file_name/2. Issue#871
  • MODIFIED: absolute_file_name/3 to return directories if the requested access is none and no file type is specified as regular or directory.

[Aug 1 2021]

  • MODIFIED: b_setval/2: backtracking over creating a global variable deletes the variable. If the old behavior is desired one can use nb_setval(Var, []) before calling b_setval/2.
  • MODIFIED: Global variables no longer use exception/3 for lazy evaluation after nb_delete/1 or after exception/3 called by nb_current/2 with a given variable name failed to define the variable.

[Jul 28 2021]

  • ADDED: Integrate language_server package into the infrastructure
  • ADDED: language_server package by Eric Zinda

[Jul 22 2021]

  • FIXED: Removed remaining literal __PL_ld references
  • ADDED: SICStus-compatible "FD set" API to library(clpfd).

[Jul 21 2021]

[Jul 20 2021]

  • MODIFIED: LDFUNC refactor, part 2 (manual) This is the second of two commits that applies a refactor across the entire SWI-Prolog codebase, changing the syntax of passing LD from one function to another in internal library code. The bulk of the changes in this refactor were automated via Perl script in the previous commit; see that commit message for more details on that.

[Jun 24 2021]

  • MODIFIED: LDFUNC refactor, part 1 (automated) This is the first of two commits that applies a refactor across the entire SWI-Prolog codebase, changing the syntax of passing LD from one function to another in internal library code. More details on the refactor are in the following commit, but since this touches so much code and to avoid having to manually verify a 20,000+ line diff, the bulk of the changes in this commit are automated by a Perl script, saved here (for this commit only) as src/ld-refactor.perl, with the output of the run saved in src/ld-refactor.out. This way, the script itself can be audited for correctness, and only the special cases in the following commit need to be checked manually.

[Jul 15 2021]

  • FIXED: Re-evaluation through a cycle where the argument of tnot/1 is invalid.
  • FIXED: reloading with :- discontiguous/1 directive in included file. Edison Mera.
  • ADDED: predicate_property/2 property discontiguous to reflect the effect of the discontiguous/1 directive.
  • FIXED: If tnot/2 is evaluated from an existing table we must make sure this table is part of the dependency graph.
  • FIXED: We must reset some worklist properties prior to reevaluation for WFS to work properly.
  • FIXED: We must preserve the TN_IDG_UNCONDITIONAL flag during re-evaluation to be able to detect that a previously conditional answer became unconditional after reevaluation. This also implies we no longer need the save/restore related to exception handling.
  • FIXED: we must consider a table modified if an answer turns unconditional while it was conditional before.

[Jul 13 2021]

  • FIXED: If reevaluation changes conditions for a trie we must recompile the trie.
  • FIXED: tnot/1 table status evaluation during incremental re-evaluation.

[Jul 12 2021]

[Jul 9 2021]

  • FIXED: Failure in incremental tabling if a leaf predicate is both tabled and dynamic.
  • FIXED: Issue#861: blobs with PL_BLOB_NOCOPY|PL_BLOB_UNIQUE must only compare the pointer.

[Jul 7 2021]

  • BUILD: Issue#860: PGO building did not work with make on MacOS.

[Jul 6 2021]

[Jul 7 2021]

  • BUILD: Issue#859: Building main.pl docs now depends on xpce.

[Jul 6 2021]

  • PORT: Allocator detection.
  • ADDED: trim_heap/0 and a Prolog flag malloc to identify the malloc implementation and provide additional features when detected.
  • ADDED: Integrated stomp into the build process
  • ADDED: packages/stomp.

[Jul 5 2021]

  • FIXED: lazy monotonic tabling requires a proper completion check. Such a table is complete if the dependencies do not contain any invalid incremental tables and all lazy queues are empty. Dependency tracking must be recursive and has to deal with loops. This fix avoids non-termination whil reevaluating lazy monotonic tables that contain cycles.
  • FIXED: While reevaluating a lazy monotonic node we should not consider it invalid.
  • FIXED: lazy monotonic update to set the current IDG node properly.

[Jul 2 2021]

  • ENHANCED: explain/1 to support dicts, hide references from the cross-referencer and show file and line numbers for references from clauses.

[Jul 1 2021]

  • ADDED: Supply a depth with the tracer r command to retry immediately on a parent goal.
  • ADDED: [level] S trace command to save a goal to the recorded database.
  • ENHANCED: Command line debugger 'h' command
  • ADDED: Command line debugger 'g' command to accept a negative number of frames as numeric parameter to print the outermost N frames rather than the innermost. As a result, the '-' command (no spy) must be followed by the RETURN key.

[Jun 30 2021]

  • FIXED: Issue#853: prolog_walk_code/1 did not respect the module_class option, scanning all modules.
  • ENHANCED: library(prolog_codewalk): avoid trying to find the file -.
  • FIXED: Avoid permission error when using autoload/1 after autoload/2.

[Jun 29 2021]

[Jun 27 2021]

[Jun 24 2021]

  • ENHANCED: trace/1,2 to work better on imported predicates, applying the wrapper directly to the implementation.

[Jun 23 2021]

  • ADDED: File access mode search as an alias for execute. Improves compatibility with SICStus.

[Jun 22 2021]

  • FIXED: Prevent source analysis to loop on an unbound module export list.

[Jun 23 2021]

  • ADDED: library(file_systems) to SICStus 4 emulation.

[Jun 22 2021]

  • FIXED: Accidentally left debug test that could lead to an "Too many stacked strings" fatal error.
  • FIXED: Monotonic table that depends on a monotonic table that has forced reevaluation due to a retract and a normal monotonic table.
  • ADDED: PL_get_uint64() and PL_get_uint64_ex() API functions for consistency.

[Jun 20 2021]

  • ENHANCED: nb_setarg/3 to only copy for a compound term

[Jun 17 2021]

  • ADDED: samkeysort/2 to SICStus 4 library(samsort) emulation.
  • DOC: Tabling and transactions
  • FIXED: Invalidate lazy monotonic tables when reevaluation inside a transaction introduces new dependencies on predicates modified inside the transaction.

[Jun 16 2021]

  • TEST: transactions and lazy monotonic tabling
  • TEST: transaction and monotonic tabling
  • ADDED: Consistency of eager monotonic tables over transactions.
  • TEST: transactions and incremental tabling
  • ADDED: Keep track of incremental tables that needs reevaluating when we rollback a transaction.

[Jun 15 2021]

  • MODIFIED: Interaction between thread_wait/2 and transactions: database changes do not wakeup threads that are in a transaction because the change is invisible anyway and thread_wait/2 cannot be called inside a transaction as nothing can cause a wakeup.
  • ENHANCED: Avoid unnecessary wakeup in thread_wait/2 from modifications inside a transaction. Do notify on the transaction commit.
  • CLEANUP: Make role of special transaction generations clear by using a macro for them.
  • FIXED: last_modified_generation logic for predicates that are modified inside a transaction.

[Jun 14 2021]

  • BUILD: Single threaded version still requires pthread library on Windows as this is a dependency for the gcc runtime library.
  • MODIFIED: Do not define rational/1 if rational number support is not enabled.
  • FIXED: library(sandbox) to handle the possibility that rational/1 is not defined.
  • TEST: Avoid rational number syntax errors when GMP is not used.

[Jun 13 2021]

[Jun 12 2021]

  • FIXED: Build for single threading

[Jun 9 2021]

  • FIXED: missing GMP exports, -Wmissing-prototypes This addresses issues exposed by adding -Wmissing-prototypes to the build, hacked in as cmake -DCHECK_PROTOTYPES=1. This flag emits a warning when any non-static function is defined without first declaring a separate prototype, which usually means that either a header hasn't been included, or that a function that should have been static wasn't marked as such. The Linux compile is clean now, after having:
  • MODIFIED: Moved includes to files that use them This also moves some inline definitions out of pl-inline.h, specifically those that call functions defined in other headers.

[Jun 8 2021]

  • FIXED: Changing _xos defs to function-like macros Fixes a compilation error in atom.c:1151, where a->type->write is transformed into a->type->_xos_write.

[Jun 4 2021]

  • MODIFIED: Refactoring to per-module header files

[Jun 3 2021]

  • BUILD: Changing default visibility to hidden. This makes portable shared library builds work like Windows DLL builds, i.e. all symbols are library-private rather than exported by default. This fixes a fair amount of symbol leakage that had been happening when functions and variables weren't marked COMMON().

[Jun 6 2021]

  • BUILD: Fix possibly failing PGO build due to lacking dependency
  • FIXED: optimise_unify Prolog flag was handled negated. Jan Burse.

[Jun 1 2021]

  • BUILD: Moved pl-alloc/index/fli out of pl-wam This adds USE_*_INLINES as a flag that can be set before including pl-incl.h, to include some of the function definitions from various files in a "can-inline" context. It also separates the majority of pl-alloc.c, pl-index.c, and pl-fli.c out into their own object files, to speed up the build.

[Jun 2 2021]

  • PORT: Avoid UTF-8 characters in source code.
  • PORT: Avoid relying on GCC -Werror=missing-profile flag that is not supported on older systems.

[May 26 2021]

  • FIXED: Silent failure in CLP(FD) domain calculation for truncated division.

[May 28 2021]

  • ADDED: Prolog flag shift_check to check for suspicious continuations.
  • FIXED: flipped shift/1 and shift_for_copy/1 behaviour.
  • FIXED: Capturing the continuation inside a meta-predicate restores the wrong module context.

[May 26 2021]

  • FIXED: frozen/2 leaves residual variables on backtracking.

[May 25 2021]

[May 24 2021]

[May 23 2021]

  • FIXED: negative numerical argument for format from argument list

[May 19 2021]

  • PGO: Updated docs and utility scripts to use the new CMake PGO build type.

[May 18 2021]

  • BUILD: Added self-contained PGO process to CMake. This change makes it possible to run a PGO build with a single invocation of the build process. To do so, use the "PGO" configuration in CMake rather than "Debug" or "Release", which will:

[May 14 2021]

  • DEBUG: Debug wildcard and complement; DEBUG_IF The -d command line option now takes an optional asterisk (*) on the end of a debug flag name to enable all flags that begin with that name. Also, flag names can be prefixed with a caret (^) to disable that flag; only particularly useful in combination with the wildcard, to silence chatty channels. For example,

[May 13 2021]

  • CLEANUP: Issue#835: Avoid singleton variable in branch when compiling with optimization.
  • TEST: Added when/2 test suite.
  • FIXED: Issue#818: when/2 conditions with nested disjunctions not being displayed properly by toplevel and copy_term/3.

[May 7 2021]

[Apr 20 2021]

[May 11 2021]

  • REFACTOR: This patch completes the first round of refactoring the VM. It allows for the same source to create a VM as threaded code jumping to label addresses in a giant function as well as a VM that has an array of function pointers, one function for each VM instruction. This is work by @dmchurch.
  • CMAKE: Added -DVMI_FUNCTIONS=ON
  • ADDED: Allow foreach//2 from library(dcg/high_order) to work with non-lists.
  • FIXED: listing/1 and friends for compound terms using [] as functor.

[May 10 2021]

  • FIXED: Make PGO build work again
  • ADDED: Define undo/1 as sandbox-safe

[May 9 2021]

  • FIXED: Issue#830: assertion failure in GUI debugger. Wouter Beek.

[May 8 2021]

  • TEST: Make a test fail if an error message is printed.
  • FIXED: locale_create/3: handling of default and current_locale.
  • ADDED: Make the new on-error and on-warning options work both in normal mode and in compilation (-c) mode.
  • ENHANCED: Handle underscores and minus the same when parsing compilation options for -c.
  • ENHANCED: Enable color output when compiling
  • ADDED: Prolog flags on_error and on_warning connected to commandline options.
  • ADDED: Provide a (silent) message reporting the error and warning count while loading a file and document error handling during compilation.
  • ADDED: statistics/2 and thread_statistics/3 keys warnings and errors.

[May 7 2021]

  • ADDED: undo/1 to schedule goals to be called on backtracking.
  • FIXED: Issue#110: Nested consult/1 on already loaded files (reconsult) did not do generation management correctly.

[May 6 2021]

[May 5 2021]

  • ADDED: incr_propagate_answer/1 and incr_invalidate_answer/1.
  • MODIFIED: Move library(increval) from dialect/xsb to the core library. Code using the XSB emulation should run unmodified. Code that uses this library as library(dialect/xsb/increval) must be updated to load library(increval) or rely on autoloading.
  • DOC: Updated stream_property/2 for representation_error
  • ADDED: Prolog flag character_escapes_unicode
  • CLEANUP: Generalize fast access to boolean Prolog flags such that we can host more than 32.
  • ENHANCED: Use Unicode classifiers for deciding on which characters to escape for quoted write.

[May 4 2021]

  • DOC: Escape sequences used for quoted write.
  • MODIFIED: Make quoted write depend on iswgraph() rather than not quote any non-ascii character. Escaped characters are written as \x<hex>\.
  • ADDED: code_type/2: category print
  • FIXED: Tighter checking correctness of sandbox declarations and fix wrong declaration for '$moded_wrap_tabled'/5 (was /4).
  • DOC: stream_property/2 representation_errors property.

[May 3 2021]

  • DOC: Explain current status wrt dynamic and static linking.

[May 2 2021]

  • BUILD: Added -DSWIPL_STATIC_LIB=ON config option to also build a static library.
  • BUILD: Use CMake OBJECT library as intermediate.
  • ENHANCED: Issue#825: Error handling when goal_expansion/2 binds a variable in \+/1 or ;/2.

[Apr 30 2021]

  • ADDED: Prolog flag optimise_unify to prevent moving unifications to the head. as these harm notably the source level debugger experience.

[Apr 29 2021]

  • FIXED: runtime change of det/1 property. Peter Ludemann.
  • FIXED: Fresh table that depends on an invalid monotonic lazy table causes a permission error.

[Apr 26 2021]

  • DOC: "pinned" -> "developed"

[Apr 28 2021]

  • PORT: Make Windows build work again due to changed debug infrastructure.

[Apr 24 2021]

  • BUILD: Issue#819: CMake Policy CMP0115. Wouter Beek.

[Apr 23 2021]

  • FIXED: same_functor/4 and derived predicates to be fully compatible with SICStus and handle zero-argument compounds.
  • ADDED: functor/4 to make dealing with zero-argument functors and atoms easier. This is a result of Issue#815

[Apr 21 2021]

[Apr 11 2021]

  • DEBUG: Early/better internal debug output Initialize the global debug_level as soon as possible if "-d" is passed first on the command line, to avoid missing early debug lines. Also, track use of the DEBUG() macro on a per-thread basis and use Serror as the default output stream when inside a DEBUG clause, so that statements that mix e.g. Sdprintf() and write_term() will get printed to a single output. Finally, prefix debug lines with the debug channel and the file/line source.

[Apr 20 2021]

  • FIXED: Issue#815: same_functor/4 (and friends) to be more SICStus compatible.

[Apr 9 2021]

  • ADDED: library(aggregate), library(between) and library(samsort) to SICStus 4 emulation.
  • ADDED: sublist/[3,4,5] to SICStus 4 library(lists) emulation.
  • ADDED: host_type Prolog flag to SICStus emulation.
  • ADDED: at_end_of_stream/[0,1] to SICStus emulation.
  • ENHANCED: SICStus emulation now disables quoted printing of atoms.

[Apr 19 2021]

  • FIXED: vm_list/1 to handle clauses with breakpoints and list these.
  • ENHANCED: Multiple clauses may be registered at a specific source line. We need to consider all of them for set_breakpoint/4.

[Apr 16 2021]

  • FIXED: Context module handling in a tail-recursive transparent predicate.

[Apr 12 2021]

  • FIXED: $/1 for goals doing variable balancing using C_VAR_N

[Apr 7 2021]

  • FIXED: Save det/1 flag in saved states and Qlf files.

[Apr 6 2021]

  • FIXED: Propagate error when tabling traps an update to a dynamic predicate that is involved in a table reevaluation.
  • ENHANCED: Error message when using =>/2 as a goal. Boris Vassilev.
  • FIXED: Bug#810: Failed to re-initialize trailing of table operations in a nested transaction. Crashed. Eric Zinda.

[Apr 5 2021]

  • ENHANCED: Handle $/1 as control structure for goal_expansion/2 such that var_property/2 is correct.
  • ENHANCED: lazy_list/2 to avoid duplicating the iterator closure. This allows for using a complicated closure and using destructive assignment in the closure to update the state.
  • FIXED: Decompilation (clause/2 and friends) for unifications moved into the head had several bugs, mainly related to optimized-away H_VOID before I_ENTER and friends. Reported by Edison Mera.
  • FIXED: H_LIST_FF translation for a unification against a list moved to the head.

[Apr 4 2021]

  • FIXED: $/1: garbage collector crashes on GC inside the goal.
  • FIXED: Variable balancing, decompilation and error reporting of $(Goal) if Goal introduced new variables.

[Apr 2 2021]

  • ADDED: IDE support for det/1: highlighting and checking that there are clauses.

[Apr 1 2021]

[Mar 30 2021]

  • FIXED: cb55f2c3da164d61c5f684482653bee1c31d51f3 for handling of -0.0.
  • ENHANCED: Issue#806: Also use SSU rules for the wrapper in max_member/2 and max_list/2. David Tonhofer.
  • MODIFIED: Issue#808: The functions max/2 and min/2 now return the type used for the comparision when the two numbers are numerically equivalent. David Tonhofer.
  • FIXED: Allow changing :- predicates to => or back while reloading a file.
  • MODIFIED: Allow unifications in the guard of => rules to migrate to the head. This patch also adds documentation that answers questions on Discourse about the behaviour of the guard.

[Mar 29 2021]

  • FIXED: Error reporting from $/1 crashed.
  • ENHANCED: Simplify !/0 if there is nothing to prune.

[Mar 28 2021]

  • ADDED: $/1 to state that the argument goal must succeed deterministically.
  • FIXED: When re-evaluating a monotonic table falsecount propagation should not pass the node we are reevaluating. This was already the case for incomplete tables, blocking this propagation for incremental tabling.

[Mar 25 2021]

  • FIXED: Detection of which choice-point references are captured in a continuation.
  • FIXED: Make cross referencer split head and guard in Head,Guard => Body rules.

[Mar 21 2021]

  • FIXED: Positioning fixes and tests for ansi_format/3. Changes ansi_format/3 to format prepended and appended escape sequences separately while keeping line position information on the stream intact.

[Mar 18 2021]

  • FIXED: Use safer shift_for_copy/1 to erroneous interaction with choicepoints in tabling.
  • ADDED: shift_for_copy/1 to deal with the rstrictions for shift that we need if we want to restart the continuation in a different context.
  • FIXED: clause_info/5 to avoid creating a cyclic term. due to wrongly recognised X -> call(X) translation.
  • ENHANCED: Move unification to plain head arguments at the start of the body to unification in the head. Possible reuse of these arguments in the body reuse the head argument. This allows for clauses like below to exploit clause indexing while avoiding to copy the f(_) term. p(X) :- X = f(_), q(X).

[Mar 17 2021]

  • ADDED: $/0: Cut that claims determinism for the remainder of the predicate.

[Mar 16 2021]

  • ADDED: det/1 declaration to declare a predicate deterministic and check this at runtime at the VM level.
  • REFACTOR: Move P_INCREMENTAL flag to tabling properties.
  • ENHANCED: Compilation of head => true to avoid calling true/0.

[Mar 15 2021]

  • ENHANCED: Remove true guard for SSU unification.
  • FIXED: instance/2 to handle single sided unification rules. Abramo Bagnara.
  • FIXED: goal_expansion/2 on the guard for an SSU rule head, guard => body. Abramo Bagnara.
  • FIXED: Updated QLF version number as fix for => breaks loading old qlf files.

[Mar 12 2021]

  • FIXED: Handle => rules in saved states and .qlf files. Abramo Bagnara.

[Mar 11 2021]

  • FIXED: When updating a monotonic answer subsumptive tabled node we must remove old answers from the queues before removing these answers from the trie.

[Mar 10 2021]

  • FIXED: GUI tracer could reset live variables in a stack trace, leading to different behaviour in trace mode.
  • FIXED: Recursive calls from C should reset the FR_INRESET flag as delimited continuations do not pass callbacks.
  • FIXED: goal_expansion/2 for => rules. Abramo Bagnara.
  • FIXED: Uninitilized tr_erased_no for clauses loaded from a QLF file or state.
  • FIXED: Transaction rollback from lazy monotonic tables did not properly delete new answers, leaving the trie in an inconsistent state.
  • DEBUG: Wrong assert() check when compiled for debugging.

[Mar 8 2021]

  • FIXED: Provide new internal API for dealing with UTF-8 decoding that cannot peek after the given buffer when decoding UTF-8 from a length-delimited string. The old code could read up to 5 characters after the buffer on invalid UTF-8 input. Decoder provided by Abramo Bagnara.

[Mar 4 2021]

  • FIXED: Processing lazy monotonic queued answers may queue new answers for this table, so can only mark it valid if all dependents are valid and no new answers are queued.

[Mar 3 2021]

  • ENHANCED: update of falsecount after partial reevaluation of a lazy monotonic predicate can be accurate, possibly avoiding recomputation.

[Feb 25 2021]

  • ADDED: CLP(FD): implement propagation for bitshifts This is a squash of 3 commits. Their commits messages are shown below
  • ENHANCED: clp/clpfd.pl propagate bitshifts
  • MODIFIED: clp/clpfd.pl pshift/4 propagation
  • MODIFIED: CLP(FD): Fix pshift propagation bug

[Feb 24 2021]

  • ADDED: CLP(FD): implement div propagation Squash of 4 commits, their commit messages are shown below
  • MODIFIED: clp/clpfd.pl cis_div_/3 fix typo?
  • ENHANCED: clp/clpfd.pl propagation of pdiv/3
  • MODIFIED: CLP(FD): Fix mistake in cis_div
  • MODIFIED: CLP(FD): Fix mistakes in div propagation

[Mar 3 2021]

  • FIXED: Re-evaluation of lazy monotonic tables with cyclic dependencies could result in non-termination after e13b73087dcd64e252430bb19f36e37681f7e8a1
  • ENHANCED: Use efficient list_to_set/2 internally.
  • ENHANCE: prune valid nodes from the re-evaluation graph.
  • FIXED: transaction rollback of a new lazy monotonic answer must remove the deleted answer node from the affected queues.

[Mar 2 2021]

  • FIXED: Lazy monotonic reevaluation with not equal length falsepaths.
  • FIXED: tabled re-evaluation path minimization (mainly avoids some redundant memory usage and computations).

[Mar 1 2021]

  • ENHANCED: trace/1,2: show calling thread if not main

[Feb 28 2021]

  • FIXED: Need to enable capturing dependencies when processing lazy monotonic answers.

[Mar 1 2021]

[Feb 28 2021]

  • FIXED: abolish_all_tables/0 inside a transaction (more generally, abolishing tables inside a transaction).

[Feb 27 2021]

  • FIXED: Predicates using trie_gen_raw() did not properly handle cuts.

[Feb 26 2021]

  • FIXED: '$idg_mono_empty_queue'/2 should only empty the dependency that we just processed (now '$idg_mono_empty_queue'/1).

[Feb 24 2021]

  • FIXED: Issue#791: compiling calls to dynamically creating calls that exceed the maximum procedure arity. Exception changed to representation_error(max_procedure_arity) (was `max_arity)`. Added Prolog flag max_procedure_arity.
  • FIXED: transaction_updates/1: avoid reporting compiled trie clauses. Tabling consistency must be managed elsewhere.
  • DOC: transaction_updates/1: erased clauses are flagged erased(Ref) rather than erase(Ref).

[Feb 23 2021]

  • ENHANCED: Save --no-signals state into a saved state.

[Feb 21 2021]

[Feb 19 2021]

  • FIXED: After lazy reevaluation of table using answer subsumption we should not queue a possibly deleted answer and we must delete pruned trie nodes from the lazy queues to affected nodes.

[Feb 17 2021]

  • FIXED: Issue#785: Crash when creating too many "predicate references" as created by e.g. clause/2 and retract/1.

[Feb 16 2021]

  • FIXED: Path canonisation for relative directories with sequences of "../". Makes read_link/3 fail on links to ../../file. Nicos Angelopoulos.
  • ADDED: attach_pack/2. Suggested by Falco Nogatz.
  • PORT: Make compile using MinGW 10: include new libssp*.dll runtime dll in distribution.

[Feb 15 2021]

  • PORT: Windows: use __declspec(dllexport) extern type. Abramo Bagnara.

[Feb 14 2021]

  • FIXED: propagate changing lazy monotonic into incremental tabling.

[Feb 12 2021]

  • FIXED: Only clear falsecount if the table is eager.

[Feb 11 2021]

  • FIXED: False count update after lazy evaluation of monontonic dependencies does not need to decrement the falsecount to zero. Instead we need to decrement after we processed all answers from an dependency edge.

[Feb 10 2021]

[Feb 9 2021]

  • DOC: get_prolog_backtrace/3: wrong doc for options.
  • DOC: Fixed "Predicate behaviour and determinism" table. Jan Burse.

[Feb 8 2021]

  • FIXED: If we normal incremental re-evaluation considers a monotonic table valid again we must clear force_reeval to avoid a second re-evaluation.

[Feb 6 2021]

[Feb 3 2021]

  • FIXED: We should not decrement the falsecount on incomplete tables that are created while reevaluating incremental tables.
  • FIXED: reevaluation completion may be in a merged SCC. In that case we must be careful not to propagate falsecount through re-evaluating nodes by setting the reevaluating status to FALSE after completing all reevaluated tables.

[Feb 2 2021]

[Feb 1 2021]

  • TEST: Fixed user defined arithmetic tests. Rick Workman.

[Jan 29 2021]

  • ADDED: More statistics/2 keys to SICStus emulation, especially ones introduced in SICStus 4 and later.
  • ADDED: library(sockets) to SICStus 4 emulation. The server socket-related predicates are not emulated yet.

[Jan 30 2021]

  • ADDED: Prolog flag max_char_code and updated docs wrt. A is "a".

[Jan 27 2021]

[Jan 26 2021]

[Jan 22 2021]

  • FIXED: Make lazy monotonic tabling using answer subsumption avoid fully invalidating indirect dependencies and keep using the lazy monotonic reevaluation.

[Jan 21 2021]

  • FIXED: Lazy monotonic predicate depending on two nodes may fail to be updated if the first node has no new answers.

[Jan 20 2021]

  • FIXED: Various small issues that allow using []/N (notably []/3) as a predicate. After report by Rick Workman.
  • ADDED: Undocumented way to define new functions. Experimental.

[Jan 19 2021]

  • FIXED: Like monotonic dynamic predicates, avoid monotonic tabled predicates to shift a dependency if there is no innermost monotonic tabled predicate.

[Jan 17 2021]

  • FIXED: A monotonic table that was invalidated twice including a retract could be re-evaluated twice, first as normal incremental predicate and later as monotonic predicate. This could re-validate an affected node twice.

[Jan 16 2021]

  • FIXED: Nest re-evaluation of an invalidated monotonic table (lazy or due to a retract).

[Jan 14 2021]

  • ENHANCED: Speedup generation of false paths for incremental tabling by only reporting one edge to a dynamic or complete node of the IDG and merge fetching the edge and getting the status.
  • DOC: Deprecate current_stream/3. Patch by David Tonhofer.
  • DOC: sub_string/5: clarify type handling on input and output.
  • DOC: Unified descriptions of sub_atom/5 and sub_string/5
  • DOC: Removed erroneous markup

[Jan 13 2021]

  • DOC: Reviewed length/2 description
  • DOC: Remove reference to -L, -G and -T options.

[Jan 11 2021]

  • FIXED: Issue#767: print_term/2 for printing zero-argument compounds. Wouter Beek.
  • FIXED: current_table/2 for shared tables.
  • FIXED: Possible crash when creating a dict from a list if the list contains an invalid key.
  • FIXED: Issue#766: debug portray for continuations in boot/tabling.pl prevents printing zero-arity compounds. Wouter Beek.

[Jan 10 2021]

[Jan 9 2021]

  • ADDED: Allow monotonic tables to depend on incremental dynamic predicates. As a result, a change to an incremental dependent invalidates the monotonic table.

[Jan 8 2021]

  • ENHANCED: A dynamic monotonic predicate should only try to capture the continuation if the inner dependency is monotonically tabled.
  • FIXED: Issue#763: Attempt to create cycle import module dependency exception was not handled correctly. Reported by David Tonhofer.

[Jan 7 2021]

[Jan 6 2021]

  • FIXED: incr_is_invalid/1 from library(dialect/xsb/increval) to enumerate instances of the arguments that have invalidated tables.

[Jan 4 2021]

  • ADDED: sumlist/2, transpose/2, partition/5, clumped/2 to SICStus 4 library(lists) emulation.
  • ADDED: nonmember/2 to SICStus 4 emulation.
  • ADDED: [is_]mutable/1 to SICStus 3 and 4 emulation.
  • ADDED: More SICStus 4 library(terms) predicates, from SWI library(occurs).
  • FIXED: Windows swipl-win.exe console: check input messages before handling output such that e.g., Control-C works when the output is flooded.
  • MODIFIED: Allow processing interrupts in Windows when in critical state.
  • FIXED: Possible deadlock when passing Control-C from swipl-win.exe.
  • FIXED: possible race in swipl-win.exe output handling.
  • FIXED: sleep/1: interrupt processing for Windows.

[Jan 3 2021]

  • MODIFIED: Run compilation of a file in signal atomic mode to avoid partial loads of a source file. Double Control-C allows (dangerous) abort of the load.
  • MODIFIED: Pass sigint on even when in critical mode. Allows for double Control-C to break out of blocked operations.
  • FIXED: detection that we are currently loading a library needed for autoloading, so we need to block.
  • COMPAT: clumped/4 in SICStus does not first sort the list, i.e., it implements run length encoding rather than frequency counting.

[Jan 2 2021]

[Dec 30 2020]

  • CLEANUP: Issue#128: silence maybeUnregisterDirtyDefinition() message for release build. Fabrizio Riguzzi.

[Dec 29 2020]

[Dec 27 2020]

  • BUILD: Issue#704: skip building the HTML docs if some dependency is missing.

[Dec 26 2020]

  • FIXED: absolute_file_name/3 regressing for creating config directories. Resulted in pack install issues reported by Nicholas Hubbard.

[Dec 25 2020]

  • ENHANCED: cannot_create_dir message if there are no candidates.

[Dec 24 2020]

  • FIXED: Possible crash of the debugger on the call port. We need to set PC to the new predicate before the trace callback or clearUninitialisedVars() may reset wrong variables.

[Dec 23 2020]

  • ENHANCED: absolute_file_name/3: do not create XDG directories unless the requested access is write or append.
  • FIXED: Properly detect change after lazy update of a monotonic table.
  • FIXED: Issue#751: call_with_depth_limit/3 with limit -1. David Tonhofer. This patch also cleans up mixed types for handling the limit and possible limit overflows.

[Dec 21 2020]

  • ADDED: Support answer subsumption together with incremental and monotonic tabling.

[Dec 22 2020]

[Dec 21 2020]

  • FIXED: Issue#747: Windows: expand_file_name/2 Unicode issues.
  • ADDED: Pass additional tabling options for answer subsumption.

[Dec 20 2020]

  • ADDED: Initial SICStus 4 emulation (expects_dialect(sicstus4)). This is separate from the existing SICStus emulation (expects_dialect(sicstus)), which emulates almost only SICStus 3 features. The few SICStus 4-only features that were emulated by the sicstus dialect have been moved to the sicstus4 dialect.
  • FIXED: SICStus library(lists) emulation now only re-exports predicates that exist on SICStus. This fixes name conflicts when code written for SICStus imports all of library(lists) and then defines its own predicate with a name that isn't used in SICStus library(lists) but is used on SWI, for example flatten/2.
  • ADDED: nth/4, is_list/1, memberchk/2 to SICStus library(lists) emulation.
  • FIXED: expects_dialect/1: always load SWI-Prolog library modules in swi dialect.
  • FIXED: Issue#742: expects_dialect/1: switch emulated_dialect flag after loading the dialect specific library.
  • FIXED: Issue#742: file resolution may be based on the current dialect. This patch includes the dialect in the caches.

[Dec 19 2020]

  • DOC: document use of call/N explicitly

[Dec 18 2020]

  • FIXED: We cannot catch a delimited continuation through a findall/3. Raise an error and give better messages for attempts to table this way.

[Dec 16 2020]

  • DOC: Fixed a typo, added commas and needed spaces.
  • DOC: Fixed a type, added commas and needed spaces.

[Dec 15 2020]

  • FIXED: Item#740: cleanup of removed subsumed answers may cause wrong enumeration of tabling worklists as well as use-after-free (and thus crashes). Reported by Damiano Azzolini.
  • FIXED: is_git_directory/1 for submodules.
  • FIXED: Reloading library(git) due to operator conflict.
  • FIXED: is_git_directory/1 for submodules.

[Dec 14 2020]

  • ENHANCED: Detection of Emacs inferior mode. Now sets up tty on Windows as we have no way to detect.

[Dec 13 2020]

[Dec 11 2020]

  • DOC: Reviewed Section 5 (extensions) except "Dicts"
  • FIXED: Possible race condition in retract/1 generation management. This patch ensures that when a clause is considered visible in some thread based on GD->_generation, this remains to be the case. Before, the global generation may be updated before the clause generation is updated, which may trigger a thread to consider the clause visible while it is no longer.

[Dec 10 2020]

  • DOC: Issue#735: PL_put_term(). Michael Duggan.

[Dec 9 2020]

  • FIXED: untable/1 to remove table attributes such as incremental, monotonic, etc.

[Dec 8 2020]

  • ADDED: Lazy monotonic tabling. Still working on test cases.

[Dec 7 2020]

[Dec 6 2020]

  • ADDED: op declarations for mode, do, spy, nospy to SICStus emulation.
  • ENHANCED: use_module/2 with SICStus emulation imports all operators. Fixes part of #731.
  • FIXED: SICStus emulation breaking op declarations in standard modules. As a side effect, the goal expansion no longer rewrites op declarations in library(dialect/sicstus), so they now have to be manually declared in the user module.

[Dec 2 2020]

[Dec 5 2020]

  • FIXED: Issue#722: premature reclaim of a clause reference in retract/1.
  • DOC: Fix typos

[Dec 4 2020]

  • FIXED: Possible crash in B_UNIFY_FC on a global stack overflow.

[Dec 3 2020]

  • FIXED: Make library(prolog_codewalk) work with name() predicate heads.
  • MODIFIED: Delay to start handling SIGINT (Control-C) to when the toplevel is started. Added Prolog flag debug_on_interrupt and command line option --debug-on-interrupt. @swi on Discourse.
  • FIXED: Do not set a Prolog flag if the hook dealing with the side effect fails.
  • ADDED: Dict function get(KeyPath, Default). Suggested by Esad Hajdarevic.
  • ADDED: Dict.get(Key) now allows for a key path, e.g., Dict.get(a/b). Suggested by Esad Hajdarevic.
  • ENHANCED: halt if we tried to handle exit from a thread twice.

[Dec 2 2020]

  • DOC: Fixed link to paper in extensions; bibliography rebuild

[Dec 1 2020]

[Nov 30 2020]

  • DOC: Avoid duplicate section label.

[Nov 27 2020]

  • FIXED: Consistent answer count admin for answer subsumptive tabling. Resulted in "OOPS: trie_property/2: counted %zd values, admin says %zd\n" messages.
  • ENHANCED: library(aggregate) to hide internal details from the debugger. Suggested by Peter Ludemann.

[Nov 26 2020]

[Nov 25 2020]

  • FIXED: Handling of the Prolog flag compile_meta_arguments.

[Nov 24 2020]

  • ADDED: prolog_listen/3: allow naming an event callback using a name(Name) option. Registering a callback on the same channel with the same name updates the associated goal rather than adding a new one.

[Nov 23 2020]

  • FIXED: Save/restore whether we are in monotonic answer propagation when doing a save/restore of the tabling status.
  • FIXED: retract((m:head :- Body)) failed.
  • DOC: Document updating the Docker library.

[Nov 21 2020]

  • FIXED: Issue#714: transaction semantics on some platforms due to missing volatile declaration.

[Nov 20 2020]

  • FIXED: Typo in MemoryBarrier() based sync macros.

[Nov 21 2020]

  • DOC: Reformat textdebugger.md Surround example predicate indicators (<name>/<arity>) with double backticks (``) to prevent auto linking.
  • DOC: Fix typos

[Nov 19 2020]

  • ADDED: Track events on answer tries using prolog_listen/2,3
  • FIXED: Error handling in sending predicate events.
  • ENHANCED: Allow listening on a predicate before it is defined.
  • DOC: Fix priority of `|` operator. Spotted by Falco Nogatz.

[Nov 18 2020]

  • FIXED: protect dynamic clauses in continuations. This patch solves the same problem as cca23badcbfb2dad7089696348aae56e50b84a3c, but also protects the clause itself during the execution of the continuation.

[Nov 17 2020]

  • FIXED: Issue#706: call_continuation/1: environment clause reference cannot be from the blob in the continuation as this may be reclaimed in AGC. May cause a crash while getting a backtrace from restarted continuation. GC also uses the clause info, so this can probably crash as well. Reported by David Tonhofer.
  • PORT: Set MACOSX_DEPLOYMENT_TARGET for building the MacOS dependencies.
  • DOC: Corrext examples for rational numbers to use lowercase "r" instead of formerly discussed "R"

[Nov 16 2020]

  • BUILD: Handle Markdown core documentation components that do not include Prolog files.

[Nov 15 2020]

  • DOC: spy/2 does not exist.
  • DOC: Reformatting textdebugger.md, use [@cite] and fix some code annotations to use ` ```.
  • DOC: CHR section names to include CHR to make them easier to find and reduce ambiguity in search results.

[Nov 13 2020]

  • DOC: Rewrote "Overview of the Debugger" I extended the text/command line debugger overview to add more detail and examples for newer users. It is pretty much a rewrite, but I reused some of the text from the original.

[Nov 12 2020]

[Nov 11 2020]

  • MODIFIED: When using use_module/1,2 and friends on a non-module file the error has changed from domain_error(module_file, File) to domain_error(module_header, FirstTerm) to simplify debugging. Notably this error can be the result of term_expansion/2 that rewrites begin_of_file or the module header to something that is not a module header.
  • FIXED: Do not use sandboxing during autoloading. Note that the autoload directive is not permitted in sandboxed code, so users cannot load untrusted code using autoload/1,2.

[Nov 10 2020]

  • FIXED: debugger could reset wrong variable when debugging a redo action. May lead to incorrect behaviour in debug mode.
  • ENHANCED: xterm interactor font selection and size specification.
  • FIXED: set_prolog_flag/2: propagate errors from switching debug mode using the debug flag.

[Nov 9 2020]

  • ADDED: PL_put_term_from_chars(): flag CVT_EXCEPTION to raise an exception on a failure rather than returning the exception term.
  • ENHANCED: PL_get_nchars(): immediately write to a UTF-8 string if REP_UTF8 is specified. This used to first write ISO Latin 1, then wchar and finally transfer to UTF-8 for terms that cannot be represented as ISO Latin 1.
  • FIXED: PL_get_nchars(): avoid pending exception in write conversion if the term cannot be represented as ISO Latin 1.
  • FIXED: XDG path handling for common_config. common_data returned both the common data and config paths, while common config had no locations.
  • FIXED: incremental tabling with answer subsumption call to start reevaluation.

[Nov 5 2020]

  • ADDED: Started to deal with the relation between transactions and tabling. Currently deals with rolling back answers from monotonic tabling.

[Nov 6 2020]

  • FIXED: arg/3 when compiled as B_ARG_VF did not correctly use the slow route if the argument is unbound. Edison Mera.
  • TEST: wrong format/3 usage causing a failure unrelated to the test.

[Nov 5 2020]

  • TEST: Relax XSB tabling test abol_test3b.P as reclaiming the tables is not guaranteed.
  • FIXED: Possible race in shared table handling. Leads to "Oops, worklist trie doesn't point back at me!" messages.

[Nov 4 2020]

  • FIXED: PL_get_chars() and friends handling of CVT_WRITEQ. This is (among others) used as fallback serialization in the C++ interface.
  • TEST: Test file for destroying local definitions.

[Nov 3 2020]

  • FIXED: Race between destroying thread-local definitions and clause garbage collection. With Matt Lilley.
  • FIXED: Thread-local definitions corrupted the argument declaration. Matt Lilley.
  • DOC: debug/0 does not affect trace points.

[Nov 2 2020]

  • FIXED: Issue#702: call_with_inference_limit/3 determinism when the inference limit is exceeded. David Tonhofer.
  • ADDED: Deal with global predicates if the current file is not a module file. This provides coloring and meta-predicate handling for other predicates in a non-modular program. Unfortunately this still lacks whether or not predicates are called from other global predicates.
  • ENHANCED: Use global meta-predicate properties.

[Nov 1 2020]

  • DOC: reset/3: document interaction between delimited continuations and choicepoints.
  • FIXED: Save/restore tabling status over break/0.

[Oct 30 2020]

  • FIXED: Dependency of incremental tables on monotonic tables.

[Oct 31 2020]

  • FIXED: Possible assertion failure in WFS handling for tabling on 32-bit hardware. Lev Lamberov.

[Oct 30 2020]

  • ADDED: Predicate property monotonic.
  • FIXED: atomic_list_concat/2,3 and atomics_to_string/2,3: wrong exception on atomic_list_concat([a,b|c], X) and posssible memory leak on errors (non-atomic data, cyclic list).
  • MODIFIED: PL_get_nchars() and friends. Due to some typo CVT_WRITE and CVT_WRITE_CANONICAL were the same constant. Also CVT_WRITEQ conflicted with CVT_VARIABLE. These constants have been renumbered to ensure consistent behaviour as documented.

[Oct 29 2020]

  • FIXED: an opaque tabled predicate may depend on incremental and monotonic predicates without raising an error.
  • ADDED: introduce opaque as explicit attribute for dynamic and tabled predicates. An opaque table may depend on incremental and monotonic predicates without raising an error.

[Oct 27 2020]

  • PPA: Support Ubuntu 20.10 (groovy) and reduce the places where the known distros are listed to one.
  • CLEANUP: Cleanly exit when running out of memory on pushSegStack().

[Oct 24 2020]

  • FIXED: Issue#698: format/3 using "~1r". David Tonhofer.

[Oct 19 2020]

  • PORT: Windows: Install libswipl.dll.a as libswipl.lib. The MinGW.dll.a is supposed to be accepted by MSVC.
  • ENHANCED: Go more to the limit extending the stacks when we are printing a message, avoiding loosing messages due to resource exceptions.
  • FIXED: Exception term for running out of stack could be huge if the large term is a list ending in a huge compound term.
  • FIXED: globalize_term_ref() didn't properly handling stack overflows, possibly leading to an infinite loop.

[Oct 17 2020]

  • DOC: Fix typos

[Oct 14 2020]

[Oct 12 2020]

  • PORT: Issue#690: WASM: Remove outdated -s BINARYEN_TRAP_MODE=clamp Jacob Friendman.
  • ADDED: call_time/2 and call_time/3 to get timing info in a Prolog term.

[Oct 10 2020]

  • DOC: Use imperative in man page
  • DOC: Add missing options to man page
  • DOC: Fix typos in manual
  • DOC: Fix typo in CMAKE.md

[Oct 7 2020]

  • FIXED: sort/2 and related predicates: possible crash.
  • FIXED: Restore tries when re-evaluation is abandoned due to an exception. Cory Cohen.

[Oct 6 2020]

  • ENHANCED: Issue#685: must_be/2: verify existence of the type before raising an error. David Tonhofer.

[Oct 5 2020]

  • FIXED: format_predicate/2: prints alarming messages when the letter is already defined. Matt Lilley.
  • FIXED: Crash when creating a dict from an invalid key.

[Oct 2 2020]

[Oct 1 2020]

  • FIXED: library(prolog_xref): handle included data if data is coming from a stream for which the encoding is fixed.
  • FIXED: When overruling an implicit import to define a predicate locally (e.g., dynamic), we should not use the thread-localised definition.

[Sep 30 2020]

  • FIXED: race condition between thread_local/1 and accessing the predicate structure. Vincent Koeman.

[Sep 29 2020]

[Sep 28 2020]

[Sep 26 2020]

[Sep 25 2020]

  • ADDED: library(strings).
  • TEST: Issue#675: avoid duplicate coroutining test unit. David Tonhofer.

[Sep 24 2020]

  • FIXED: Declarations such as dynamic/1 to enforce the argument to be predicate indicators. Before that, a head was accepted which causes these predicates to succeed silently when the arity is omitted, working on name/0.

[Sep 14 2020]

  • CLEANUP: Replace complex macros in the parser by functions. Also added a maintenance debug topic for operator parsing.

[Sep 15 2020]

  • PORT: Only use __declspec for MSVC and MinGW. Also Cygwin now uses traditional extern.
  • PORT: Issue#668: compilation on Cygwin for thread_affinity/3.
  • FIXED: function roundtoward/2 with variable direction was miscompiled, causing a crash. Rick Workman.

[Sep 13 2020]

  • ENHANCED: library(portray_text): use appropriate quote (` or "), escape the quote inside a string and added portray_text:is_text_code/1 to allow the user to extend the codes that are considered likely text codes.
  • DEBUG: invalid internal debug message, crashing in full trace mode.

[Sep 9 2020]

  • FIXED: meta-calling a wrapped thread-local predicate ignored the wrapper.

[Sep 8 2020]

[Sep 3 2020]

  • MODIFIED: qsave_program/2: preserve the autoload flag in the calling process and preserve autoloading if it is enabled and the save class is development

[Sep 1 2020]

  • ENHANCED: frozen/2 to avoid copying. This not only enhances performance, but also maintains the variable identity.
  • FIXED: Possible crash in tabling, notably occurring on MacOS due to wrong assumptions wrt representing pointers in Prolog integers. With a lot of help from Matt Lilley.
  • FIXED: frozen/2 could fail after recent enhancements.

[Aug 31 2020]

  • FIXED: Handle failure inside 'fast' opcodes which D_BREAK replaces with 'slow' opcodes that do not trigger FASTCOND_FAILED. To do this, if we hit D_BREAK and there is a fast condition pending, convert it into a real choicepoint
  • FIXED: Issue#657: Debug flags such as print_write_options in a saved state were overruled by the initialization. Robert van Engelen.
  • DOC: Issue#658: read_history/6 wrong info for substituting the event. Robert van Engelen.

[Aug 27 2020]

  • ENHANCED: Compile simple arg/3 calls to the VM

[Aug 26 2020]

  • ENHANCED: Allow listing and source level debugger to work for clauses the contain non-atom blobs.
  • MODIFIED: numbervars/4 using the singletons(true) option to number variables in LR order rather than in the order where the second occurrence is found. This notably makes the output of portray_clause/1-3 easier to read.
  • MODIFIED: frozen/2 now reports any goal that is delayed on some variable inside the first argument rather than only goals delayed due to freeze/2 and only checking for a direct variable.

[Aug 25 2020]

  • MODIFIED: portray_clause/1,2,3: portray (a,b),c the same as a,(b,c). This is compatible with SICStus and makes sense as the compiler also compiles both shapes to the same code.
  • FIXED: Issue#652: expand_file_name/2 for Windows: double UTF-8 encoding.

[Aug 24 2020]

  • PPA: Removed eoan from PPA list
  • FIXED: Possibly crash in wrap_predicate/4. With help from Peter Ludemann.

[Aug 22 2020]

  • FIXED: re-enable inline unification after switching off debug mode. Rick Workmann.

[Aug 18 2020]

  • ENHANCED: Proper Last Call Optimization (LCO) for a subset of the calls: last calls for which each argument is a variable (with some restrictions), a small integer or atom.

[Aug 12 2020]

  • MODIFIED: Extensive rewrite to avoid variable references inside and between environments, i.e., reference pointers always point at or inside the global stack. This is a necessary step for LCO. The only visible change is PL_put_term(to, from) which used to be a void function but which may now need to allocate a variable on the global stack when two fresh term references are unified. As a result PL_put_term() may fail.

[Aug 20 2020]

[Aug 19 2020]

  • FIXED: is/2 using optimised arithmetic with a float value while the left side is instantiated to a float can exit Prolog (unintended return).
  • FIXED: load_file/2: if(changed) option for loading a non-module file was ignored, always loading the file.
  • ADDED: library(prolog_code): is_predicate_indicator/1.

[Aug 8 2020]

  • FIXED: supporting wide file names in qlf files

[Aug 7 2020]

  • ENHANCED: ignore tty stream errors when there is no active terminal
  • ADDED: set_system_IO/3 to bind stdin/stdout/stderr to Prolog streams
  • FIXED: compile_predicates/1: wrong handling of module qualification causes compile_predicates(Module:List) to fail.

[Aug 6 2020]

  • COMPAT: Export memberchk/2 from library(lists).
  • FIXED: Make sure the xpce boot files are handled as library files and not as user files to avoid xpce failing to load when the user defines global conflicting operators.
  • FIXED: Encoding for command line options passed through '$cmd_option_val'/2. Reported by UweR on Discourse.

[Aug 5 2020]

[Aug 4 2020]

  • DOC: Clarifications, fix section levels.

[Aug 2 2020]

  • DOC: Fix typos in manual

[Aug 4 2020]

  • FIXED: Issue#646: using {} as postfix operator can cause the output to be confused with a dict. Jan Burse.

[Jul 31 2020]

  • FIXED: Handle Unicode file names in QLF files and saved states on Windows.

[Jul 29 2020]

  • FIXED: Do not save the Prolog flag file_name_case_handling.

[Jul 27 2020]

  • FIXED: listing/1: when used with a partly instantiated head to list a subset of the clauses, do not unify the clause head but only test it is unifyable.

[Jul 25 2020]

  • ENHANCED: foreach/2: better performance and avoid copying goal.
  • DOC: Fix typos in manual

[Jul 24 2020]

  • FIXED: HTML text renderer to add a blank line between the first and second par of a list element.

[Jul 23 2020]

  • FIXED: ht_get/3 on an empty hash table.

[Jul 22 2020]

[Jul 18 2020]

  • BUILD: Fixed installation. Nicos Angelopoulos
  • FIXED: make_library_index/1 tested whether `.` was changed rather than the target directory.
  • BUILD: Always the library index commands. Prolog checks the dependencies anyway.
  • TEST: Autoload
  • FIXED: Allow importing a predicate using autoload/2 while it is defined in user and make sure the imported predicate actually gets used.
  • FIXED: Autoloading picked predicates from the module user. Test case by Eric Tauber.
  • DOC: Format each summary to have its own line
  • DOC: Fix typos in manual
  • FIXED: Issue#639: system code depended on library, preventing disabling autoloading. James Cash.

[Jul 17 2020]

  • DOC: get_dict_ex/3 does not exist. Removed the docs. David Tonhofer.
  • ENHANCED: list_debug_topics/0: use quoted print and numbervars to list the topic more precisely. David Tonhofer.
  • FIXED: Actually allow hashtables to have non-ground keys by using variant_hash/2 instead of term_hash/2.
  • DOC: Explain working directory issues for loading likes.pl.
  • FIXED: Issue#637 (following Discourse message): functional notation expansion in ^-meta arguments (bagof/3, setof/3, etc.).

[Jul 16 2020]

[Jul 14 2020]

  • ADDED: Generate events on a transaction rollback. This also fixes consistency for private incremental tables under transactions.

[Jul 12 2020]

  • PORT: 32-bit platform without 64-bit atomic operations.
  • FIXED: Single threaded build.

[Jul 10 2020]

  • ADDED: Support file IRI scheme

[Jul 11 2020]

  • DOC: Clarify transaction/3 and clause ordering inside transactions.
  • FIXED: Generation synchronization wrt transaction constraints.

[Jul 10 2020]

  • FIXED: Generation management of assert/retract
  • FIXED: Possibly crash while enumerating table answers (missing stack space check and expansion).

[Jul 9 2020]

  • FIXED: An asserted term may be visible in arbitrary generations for a short time.
  • FIXED: Clauses asserted in a transaction could become briefly visible outside.
  • FIXED: Avoid inconsistent L_PREDICATE and L_GENERATION locking (deadlock).
  • FIXED: Assert+retract inside a transaction may cause a clause to become visible again.
  • ENHANCED: transaction_updates/2: distinguish asserta and assertz.
  • TEST: Test transaction constraints.

[Jul 8 2020]

[Jul 7 2020]

  • DOC: Mostly changes to atom_codes/2 et al.
  • ENHANCED: Avoid remembering clauses that are asserted and retracted in the same transaction.
  • ADDED: current_transaction/1 to test whether a goal is running inside a transaction.
  • FIXED: transaction nesting

[Jul 6 2020]

  • ENHANCED: Make reconsult predicate updates truly atomic.
  • FIXED: Use L_GENERATION lock for removeClausesPredicate() to make this truly atomic.
  • FIXED: propagate I/O exceptions or signalled exceptions from discarding an unbuffered stream temporary buffer. Report

[Jul 2 2020]

  • ADDED: Transaction isolation support. See transaction/1 and snapshot/1. Experimental. Use ?- help(transactions). for help.
  • CLEANUP: Generation management

[Jul 6 2020]

  • FIXED: Single threaded build.

[Jul 5 2020]

[Jul 3 2020]

  • DOC: Reviewed chapter on "exceptions"

[Jul 2 2020]

[Jul 1 2020]

  • TEST: Added SKIP_SSL_TESTS option to CMake config.

[Jun 27 2020]

[Jun 28 2020]

  • ENHANCED: thread_signal/1: avoid a max 0.25 sec wait if the signalled thread is blocked on a message queue.
  • PORT: Allow pthread_cond_timedwait() to return EINTR.
  • ENHANCED: copy_term/3 to sort the attvars prior to generating the goals. This produces constraints at the toplevel in more predictable order. Rick Workman.

[Jun 11 2020]

  • CLEANUP: Term names set to those of ISO Standard
  • DOC: Updated "exception term" page with ISO info

[Jun 27 2020]

  • DOC: Fix typos in manual
  • DOC: Remove outdated status in manual Shared table space limit was added in commit 6a01fbf70447b419447281826e770ec0cd21ab3d

[Jun 26 2020]

  • ENHANCED: Issue#625: library(settings): only save when modified and document persistency issues.
  • FIXED: Consider files loaded from a state already loaded.
  • FIXED: Allow for saved states of more than 4Gb.
  • DOC: add missing documentation for native zip handling predicates.
  • MODIFIED: Renamed thread_wait_on_goal/2 into thread_wait/2 and added thread_update/2.

[Jun 25 2020]

  • ENHANCED: save_settings/1 to use setup_call_cleanup/3 to guarantee reclaiming resources.
  • FIXED: Recursive autoloading when a saved state loads an additional file that sets the Prolog flag autoload to false. Peter Ludemann.

[Jun 20 2020]

[Jun 17 2020]

  • ADDED: thread_wait_on_goal/2 to wait for database changes. This predicate is similar to its Qu-Prolog cousin.

[Jun 19 2020]

  • MODIFIED: Option processing now raises a type_error(option, Option) if an option is malformed (not Name(Value) neither Name = Value).
  • DOC: Fix typos in manual

[Jun 18 2020]

  • PPA: Removed support for Ubuntu disco (19.10).

[Jun 17 2020]

  • FIXED: library(prolog_codewalk): handle file/4 message terms. Matt Lilley.
  • FIXED: Location of jpl.jar in development tree to be able to run in the dev tree.
  • PORT: Windows: make condition variable abstraction compile again.
  • ADDED: Foreign API to reuse the internal lock-free hash table implementation.
  • DOC: Removed obsolete section on Boehm-GC support.

[Jun 16 2020]

  • FIXED: Make module enumeration safe for temporary modules. This affects notably current_predicate/1 in SWISH. current_predicate/1 using an unbound module now skips enumeration of temporary modules.

[Jun 15 2020]

  • FIXED: Possible race condition when two threads try to compile the same file.
  • FIXED: Possible inconsistent source file reference count.

[Jun 14 2020]

  • CLEANUP: No longer create a source file object for a derived source. This doesn't seem to be used anywhere and the new garbage collecting approach for source files would reclaim the file immediately anyway.
  • FIXED: Make source file admin use reference counts and delete no longer needed source file admin entries. Discarding them is needed by Pengines. The hard-coded discard from '$destroy_module'/1 could cause a use-after-free issue in SWISH when using :- include(file).. The patch is rather involved. Probably there are easier ways to fix this particular issue. Usage based reclaim of source files is a step towards garbage collecting code in general though.
  • CLEANUP: Property balance '$start_consult'/2 and '$end_consult'/1.

[Jun 12 2020]

  • ADDED: message_queue_property/2: property waiting(-Count) to find the number of threads waiting for this queue.
  • ENHANCED: thread_send_message/2: reduce time the queue mutex is held.
  • FIXED: thread_get_message/1,2 could not wakeup after a message arrived.
  • DEBUG: Improved debug channel MSG_QUEUE, notably avoid printing to the possibly redirected current output using pl_writeln().

[Jun 11 2020]

  • FIXED: destroying affected tables should first collect the network. Edward Schwartz
  • DOC: Format CMAKE.md * Justify paragraphs

[Jun 10 2020]

  • DOC: Fix typos in CMAKE.md
  • DOC: Fix typos in manual
  • ADDED: wildcard_match/3. Required because wildcard_match/2 no longer listens to case sensitivity of the file system. Suggested by Keri Harris.
  • FIXED: Missing error case for a non-terminated [.. set. Included more test cases.
  • FIXED: wildcard_match/2: peek after string on unmatched "{"
  • FIXED: wildcard_match/2 and expand_file_name/2 used to print a warning and throw a domain_error on an illegal pattern. It now throws a syntax_error exception.
  • TEST: Added files test dir, now containing test_glob.pl
  • FIXED: Memory leak in text canonicalization
  • FIXED: expand_file_name/2 and wildcard_match/2 - Avoid a possible crash using Unicode patterns. Found by Keri harris. - Fully support Unicode in patterns and file names. - Remove the length limit for compiled patterns (used to be 1024 chars).
  • MODIFIED: wildcard_match/2 used to be case insensitive if file names are case insensitive. Now wildcard_match/2 is always case insensitive.

[Jun 8 2020]

  • DOC: Remove duplicate license information * Move the new license down to replace the old one
  • ADDED: Monotonic tabling
  • FIXED: get_returns_for_call/2: module qualification
  • FIXED: Possible use-after-free

[Jun 6 2020]

[Jun 5 2020]

  • BUILD: When building the MacOS bundle, tell CMake not to look into the Macport bin, lib and include. We want to use our own dependencies that are compiled for MacOS 10.12 and later rather than the Macport ones that are for the current OS and for others we want the MacOS native libraries to reduce our footprint.
  • FIXED: keep pending choicepoint frames visible to the stack shifter

[Jun 4 2020]

  • FIXED: prolog_frame_attribute/3 getting local variables for a frame after backtracking to the next clause could unify with a non-initialized var.

[Jun 3 2020]

  • DEBUG: Wrong CHK_SECURE assertion.
  • FIXED: Added missing release_def() for computation of the size property of predicates. May prevent clause garbage collection.

[Jun 2 2020]

  • MODIFIED: prolog_listen/3: when listening on a dynamic predicate, assert the new clause before calling the event hook.
  • FIXED: Changed unviewable background color for DCG right hand context

[Jun 1 2020]

  • DOC: Removed unix/1 docs from main manual as this is merely a partial Quintus emulation.
  • DOC: char_type/2: updated general description.

[May 28 2020]

  • DOC: Use consistent command line option names
  • DOC: Fix typos in manual

[May 31 2020]

Package bench

[Jun 12 2021]

  • FIXED: Avoid error when using without threads

[Jun 6 2021]

  • ADDED: Provide CSV output using swipl run.pl --csv

[Mar 28 2021]

  • ADDED: PGO training data for determinism declarations.

Package archive

[Sep 2 2021]

  • PORT: Allow overruling libarchive dependencies.

[Sep 1 2021]

  • PORT: Support libarchive versions without raw or mtree formats.

Package chr

[Aug 24 2021]

  • FIXED: Make chr work in temporary modules (Pengines, SWISH)

Package clib

[Sep 2 2021]

  • ADDED: uuid/2 emulation to allow for format(integer).

[Aug 6 2021]

  • ADDED: uuid_property/2 to get the version and (for 1 and 2) time stamp of the UUID.
  • ENHANCED: Always install library(uuid), providing (currently) a random UUID in case the OSSP-UUID dependency was not available for building SWI-Prolog.

[Jun 14 2021]

  • BUILD: Drop building and including libfary(time) in the single threaded version.

[Jun 2 2021]

  • PORT: uuid handling on CentOS 7
  • PORT:Deal with CentOS7 broken uuid-config

[May 2 2021]

  • ENHANCED: process_create/3: better error message if executable could not be found.

Package clpqr

[Jun 28 2021]

Package http

[Sep 21 2021]

  • MODIFIED: Issue#148: Do not redirect from /path to /path/Var

[Sep 7 2021]

  • FIXED: Issue#147: JSON parser to reject illegal numbers.

[Jun 14 2021]

  • PORT: Start splitting parts that need threads and those that do not.

[Apr 26 2021]

  • DOC: Small touches & updates

[Apr 18 2021]

  • ADDED: Support dynamic management of gzipped files.

[Feb 7 2021]

[Jan 26 2021]

  • ADDED: `gone 410` to list of status replies

[Dec 27 2020]

  • ADDED: Define http_open/map_method/2 as multifile so we can support non-RFC HTTP methods.

[Dec 2 2020]

  • COMPAT: Parse cookie values more flexible. Keri Harris.

[Nov 13 2020]

[Oct 21 2020]

  • CLEANUP: Simplify redis based session handling using improved redis library.

[Oct 16 2020]

  • MODIFIED: New Redis plugin for HTTP sessions now uses by default the key swipl:http:session

[Oct 13 2020]

ADDED:library(http_unix_daemon):broadcast
http(pre_server_start(Port)) and http(post_server_start(Port)) around starting the individual servers.

[Oct 6 2020]

[Sep 27 2020]

Package jpl

[Jun 14 2021]

  • TEST: Fix tests for bounded integers.

Package ltx2htm

[May 5 2021]

  • FIXED: Handling of empty cells to emit a <td></td>

Package nlp

[Apr 28 2021]

  • ADDED: isub/4 mode isub(+Text1, +Text2, -Simularity, +Options) by @swi.

[Apr 21 2021]

  • ADDED: isub_short/4 by @swi. Provided isub/4 simularity matching to also deal with short strings.

Package odbc

[Jun 14 2021]

Package pengines

[May 25 2021]

  • ADDED: tab/1 to Pengine I/O emulation, emitting &nbsp

[May 5 2021]

Package pldoc

[Jun 17 2021]

  • ADDED: Include documented public/1 predicates in the default page.

Package plunit

[Jul 23 2021]

  • DOC: Replace LaTeX docs for show_coverage/1,2 with the PlDoc generated docs.

[Jul 22 2021]

  • FIXED: Coverage annotation with long file paths. @peter.ludemann.

[Jul 13 2021]

  • ADDED: show_coverage/2: Produce annotated files with coverage information. This information now also shows the number of entries and exits/failures.

[Feb 25 2021]

  • ENHANCED: Abstract put_char(user_error, '.'), etc. to use print_message/2 so we can change and suppress these messages.
  • ADDED: plunit(summary(Dict)) silent message to easily get a summary report.

Package protobufs

[Sep 3 2021]

  • TEST: Disable tests that require unbounded integers when GMP is not included.

[Jul 21 2021]

  • ENHANCED: support for protobuf map<...>

[Jul 20 2021]

  • DOCUMENTATION: oneof, map
  • ENHANCED: handle "oneof" fields

[Jul 17 2021]

  • ENHANCED: meta-data loading (generated by protoc --swipl_out=...)

[Jul 14 2021]

  • FIXED: protoc plugin when .proto file has no package name (possibly a bug in protoc)

[Jul 13 2021]

  • ENHANCED: handle default values when parsing a wire stream.

[Jul 9 2021]

  • TESTING: added many unit tests
  • ADDED: protobuf_serialize_to_codes/3 fixed: uint64_codes et al handling of signed/unsigned improved: error handling for uint64_codes et al renamed integer_zigzag to int64_zigzag, int32_codes => uint32_codes, etc. moved some code into protobufs.c (uint64_int32, etc.) simplified code by using freeze/2 and when/2 instead of nonvar/1

[Jun 15 2021]

[Jun 14 2021]

  • ENHANCED: handle "group" add protobuf/unittest golden
  • BUILD: Run developer and "demo" tests as part of cmake/ctest build Use installed protoc Refactor Makefiles
  • TEST: Added unittest*.proto and "golden" tests, edge case tests

[Jun 13 2021]

  • ADDED: Plugin for protoc (protoc-gen-swipl) Copy logic from descriptor_proto_expand.pl to protoc-gen-swipl
  • FIXED: Some edge cases of negative or very large numbers Added round-trip tests Work-around issue #5 Added utf8 encoding directives Replace UTF8 strings by unicode codes, in case tests run in ASCII locale

[Jun 10 2021]

  • ENHANCED: Added repeated_embedded, unsigned32, unsigned64

[Jun 2 2021]

  • PORT: Avoid UTF-8 in comment to allow building using non-UTF-8 locales.

[May 11 2021]

  • ENHANCED: handle repeated [packed=true]

[Jun 2 2021]

  • PORT: Avoid UTF-8 in comment to allow building using non-UTF-8 locales.

[May 7 2021]

  • ADDED: support for "packed"

[May 6 2021]

  • FIXED: UTF-8 processing for string(Tag,...) ADDED: signed64(Tag,...) for .proto types int32,int64

[Apr 17 2021]

[Apr 15 2021]

Package semweb

[Jun 8 2021]

  • FIXED: Wrong argument type for PL_*_external() The SWI-Prolog.h external record functions use `char *` for the type of the external record data, but rdf_db is storing it and passing it as a record_t. Which went unnoticed when record_t was just a typedef for `void *`, but now causes (non-fatal) warnings during compilation, with the new opaque-struct-typed API header.

Package sgml

[May 8 2021]

  • TEST: Silence expected error messages.

[Jan 5 2021]

  • COMPAT: xpath/3: allow specifying attribute values in selectors as strings.

Package ssl

[Sep 16 2021]

  • PORT: Issue#160: OpenSSL 3.0. Drops option padding(sslv23) from rsa_(private/public)_(en/de)crypt/4.

[Jun 14 2021]

  • PORT: Single threaded build.

Package xpce

[Sep 8 2021]

  • ADDED: PceEmacs server: control whether we kill the editor after the command completes. Made available in in the edit script as edit --no-wait file:line.

[Aug 31 2021]

  • FIXED: gtrap/1 is not a meta-predicate.

[Aug 11 2021]

[Jul 12 2021]

  • FIXED: Allow autoloading library(pce_dispatch).

[Jun 14 2021]

  • FIXED: Make PceEmacs Prolog mode work if rational number support is not enabled.

[Jun 12 2021]

  • FIXED: Dependencies when using with single threaded version.

[Mar 25 2021]

  • FIXED: PceEmacs: Make ^C^E (export) work for => rules.
  • FIXED: Possible autoload hook in source navigator. Rick Workman.

[Mar 4 2021]

[Feb 16 2021]

  • PORT: Make compile using MinGW 10. Avoids multiple definitions of global data symbols XPCE_display, etc.

[Jan 29 2021]

  • FIXED: Issue#757: Gui tracer fails if variable clustering is disabled and variables are bound to another variable. Jindrich Kolman.