Ann: SWI-Prolog 8.3.6

Dear SWI-Prolog user,

I have uploaded SWI-Prolog 8.3.6. This version brings important fixes,
extensive internal rewrites and some performance improvement. See below
for details.

Note that the internal rewrites may have caused regression. Please

Enjoy --- Jan

SWI-Prolog Changelog since version 8.3.5

  • FIXED: Possibly crash in wrap_predicate/4. With help from Peter

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

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

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

  • ADDED: library(sandbox): support load_files/2 with safe options.

  • FIXED: SICStus emulation: avoid mapping use_module/1,2 unconditionally.

  • FIXED: is/2 using optimised arithmetic with a float value while the
    left side is instantiated to a float can exit Prolog (unintended

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

  • FIXED: supporting wide file names in qlf files

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

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

  • PORT: Support Unicode wmain() for Windows. This adds PL_winitialise().

  • FIXED: copy_stream_data/2: ensure exceptions are passed.

  • DOC: consistency of docs for forall/2 and concurrent_forall/2.

Package bench

  • LEGAL: Clarified legal status of benchmarks contributed by David H
    Warren with permission from the author.

  • PORT: Allow running the benchmark using YAP again.

  • LEGAL: Re-licensed chat80-derived benchmark after re-licencing
    of CHAT-80. See, commit

Package cpp

  • PORT: Avoid including malloc.h for FreeBSD. Didier31 through

  • FIXED: PlTerm::PlTerm(double val): deal with failing PL_new_term_ref()

Package jpl

  • FIXED: put_term() to handle error cases

Package odbc

  • FIXED: Error propagation from SQL_SUCCESS_WITH_INFO and PL_put_term().

Package semweb

  • DOC: fixed rdf_has second argument mode to match wrapped

Package ssl


Great, I get a 10%-20% improvement (PGO compiled) for some simple DCG code I have.


1 Like