Ann: SWI-Prolog 8.1.14

Dear SWI-Prolog user,

SWI-Prolog 8.1.14 is available for download. This version provides some
important bug fixes and more XSB compatibility. Highlights:

  • Ports: zip API for Endroid (by erlanger)
  • Unicode: fixed tmp_file_stream/3, surely for Unix and hopefully
    for Windows. May fix check_installation/0 for Windows users with
    non-ascii login name.
  • Tabling: fix in tries, mostly affecting answer subsumption, speedup
    incremental dependency graph maintenance when calling incremental
    dynamic predicates, XSB compatibility extensions and fixes.
  • Cleaning issues reported by Paulo Moura’s Logtalk linter.
  • Speedup \=/2 for simple cases.
  • Work on cleaning up the profiler API. Now provides all four ports,
    but the counts are sometimes incorrect. Only the call port count
    is fully reliable.
  • Allow thead_signal/2 to main when using the libedit commandline
    editor (default on Unix).

Notably the latter two are to support the develpment of a web dashboard
to monitor SWI-Prolog processes, currently mostly tabling. See

Enjoy --- Jan

P.s. MacOS binary will follow later today.

SWI-Prolog Changelog since version 8.1.13

  • FIXED: tmp_file_stream/3 for unicode temp directory. Surely fixed
    on non-Windows. I do not have the right setup to test on Windows.

  • PORT: Android minizip to use consistent file api

  • ENHANCED: profile_data/1: find predicates from the stored call graph
    rather than enumerating all known predicates. Provides a big speedup.

  • FIXED: profiler: avoid falsely reported self-recursion on auto-loaded
    predicates, as well as other double checks in this event.

  • FIXED: profiler: bump redo access on parents.

  • ADDED: Make number of passes through the exit port available from
    the profiler data

  • ADDED: profile_data/1 to library(statistics) and use dicts for dealing
    with the profile data structures.

  • XSB: Silently ignore debug_ctl/2 calls that are not supported. Added
    xsb(compat) debug/1 topic to report possible compatibility issues.

  • FIXED: clauses and codes statistics for compiled tables.

  • XSB: Added timed_call/2 emulation.

  • FIXED: single-threaded build. Abramo Bagnara.

  • STATS: removed trie statistics gen_exit_count and gen_fail_count.
    Added invalidated and reevaluated to track incremental tabling.

  • ENHANCED: Instead of using the wrap_predicate/4 interface to trap
    calls to dynamic incremental predicates use a dedicated supervisor
    instruction in the VM.

  • ENHANCED: Speedup \=/2 using a shortcut for the simple cases.

  • FIXED: trie_gen/2,3: deal with last-argument optimization. Reported by
    Hakan Kjellerstrand, also issue#490.

  • XSB: Support debug_ctl(hide, Preds)

  • ADDED: limit/2: allow for a limit infinite

  • XSB: Several enhancements to the emulation: Added (very partial)
    fmt_write/2,3, domain_error/4, print_backtrace/1, xsb_backtrace/1
    and fixed incr_asserta/1 and incr_assertz/1.

  • XSB: Started extended version of XSB’s library lists.

  • XSB: extended module machine with conset/2, conget/2 and parsort/4.

  • XSB: provide incr_asserta/1 and incr_assertz/1.

  • XSB: Started implementing debug_ctl/2.

  • CLEANUP: subsumes_chk/2 and subsumes/2 are provided by library(terms).

  • FIXED: ansi_format/3: handling of h(Name) for 8-bit color
    specification. Paulo Moura using Logtalk linter.

  • FIXED: library(prolog_colour): prolog_colourise_query/3.

  • ADDED: library(prolog_code), providing several commonly used predicates
    to reason about Prolog programs.

  • ENHANCED: error checking and reports from ‘$pi_head’/2, propagating
    into better messages from several built-in predicates.

  • FIXED: library(prolog_codewalk): limit initialization goals to
    target module.

Package clib

  • DOC: call_with_time_limit. Nicos Angelopoulos.

Package cql

  • CLEANUP: Logtalk linter warnings.

Package http

  • CLEANUP: Duplicate directive. Logtalk linter.

Package libedit

  • ENHANCED: Allow processing thread_signal/2 messages.

Package pengines

  • CLEANUP: Avoid duplicate declaration. Logtalk linter.

Package tipc

  • BUILD: Issue#506: TIPC does not depend on libedit.

Package xpce

  • CLEANUP: Make the profiler run on library(statistics) instead of
    replicating the code.

  • FIXED: profiler table header for clusters

  • ADDED: Graphical profiler: show exit and fail counts.

  • PORT: Use new ‘$prof_procedure_data’/10 (extra Exit arg)



As I see lots of Logtalk linter (Linter) in the notes, and this is one of rare times when I know the person behind the scenes, and I can’t give you a like (heart) with the post, adding this to also say thank you.

1 Like

I am interested to learn more about this. Can you provide a link to the file(s) that where changed with this at GitHub?

EDIT after Jan replied.

Didn’t know that the summary lines above were for the most part coming directly from the messages in the Git pull request.

In other words, to see the code specific to a line from the release notes

  1. Go to GitHub SWI-Prolog repository (link)
  2. Under Pinned repositories click on swipl-devel (link)
  3. Look for commits and click on it. It may not look like a link but it is. (link)


  1. Scan down until you see the title of the commit that matches the line for the release notes.


1 Like