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
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.
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
voidfunction 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
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.
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 https://github.com/JanWielemaker/chat80, commit
PORT: Avoid including
malloc.hfor FreeBSD. Didier31 through
FIXED: PlTerm::PlTerm(double val): deal with failing PL_new_term_ref()
- FIXED: put_term() to handle error cases
- FIXED: Error propagation from SQL_SUCCESS_WITH_INFO and PL_put_term().
- DOC: fixed rdf_has second argument mode to match wrapped
FIXED: Two more 365 timeouts on certificates. Lev Lamberov.
TEST: Increase both certificate expiry time and CRL
refresh time to 3 years so that tests will pass 3 years
after builds with no further actions required. See