Ann: SWI-Prolog 8.3.16

Dear SWI-Prolog user,

I’m happy to announce SWI-Prolog 8.3.16, the X-mas edition :slight_smile: It has
been a weird year for practically all of us. There has been a lot of
pressure on many of us. Luckily, programming is among the least affected

During 2020 SWI-Prolog got a lot more tabling support. We started to
explore the novel monotonic tabling technique. Announced already at
the CICLOPS 2012, SWI-Prolog finally got a transactional database. The
year 2020 is the year in which SWI-Prolog Solutions b.v. was born.
SWI-Prolog Solutions b.v. must mature in 2021. How is still mostly an
open question. This move did open contacts with people and companies
that are or are looking into deploying Prolog for new challenging
projects. I have good hope some of this will materialize and make
resources available that help solving pressing problems such as
training, good tutorial documentation, commercial support, better tool
support, performance improvements, etc. Anyone willing to cooperate
on this, either by helping to provide some of this or by making it commercially
feasible to get some of this realized, please contact me by private message
through the forum or mail. I love to have telcos with users that have ideas
about these matters.

Highlights for the X-mas release: some serious bugs fixed, improvements
to “Prolog dialect” emulation, and ongoing work on tabling. More in

  • Possible crash in the debugger (trapped by SWISH)

  • Fixed expand_file_name/2 for Windows on files holding Unicode

  • Fixed crash in answer subsumptive (moded) tabling.

  • Start supporting answer subsumptive tabling with incremental
    and monotonic tabling. Works for simple cases. Many possible
    scenarios are still untested.

  • @dgelessus started SICStus 4 emulation

    Enjoy — Jan

SWI-Prolog Changelog since version 8.3.15

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

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

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

  • FIXED: Make current_table/2 work for answer subsumption.

  • FIXED: Issue#747: Windows: expand_file_name/2 Unicode issues.

  • ADDED: Pass additional tabling options for answer subsumption.

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

    SICStus 3 and 4 are incompatible enough in some aspects that they
    be emulated properly as a single dialect. See this discussion:
    Expects_dialect(sicstus): how to handle SICStus 3 vs. 4 API conflicts

    The SICStus 4 emulation currently supports all of library(system) and
    library(timeout), parts of library(lists) and library(terms), and a few
    builtins. library(sockets) is not emulated yet, because its API has
    changed completely between SICStus 3 and 4. library(arrays) has been
    removed entirely in SICStus 4, so it is not emulated by the sicstus4

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

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

  • DOC: document use of call/N explicitly

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

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

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

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

Package ssl

  • TEST: Issue#159: OpenSSL 1.1.1i changed sequence for unknown_issuer
    certificate reporting. Patch by Kurt Roeckx.

You mean that the fact base is now transactional, with commit, rollback and all …

Or, perhaps even (XSB like) transaction logic – with backtracking as well.

thank you,


Yes, See transaction/1 and friends as well as quite a long discussion here some time ago.

1 Like