Hi,
I have uploaded SWI-Prolog 7.2.3. This version merges 7.3.6. This is
probably the last merge of 7.3.x into 7.2.x. If all goes according to
plan, 7.3.x will start adding significant new stuff in a month or so.
Highlights:
- fixed several possible crashes.
- clp(fd) and clp(b) enhancements.
- aggregate_all/3 constant space for sum(X), max(X) and min(X).
- sandbox additions
- several enhancements to Pengines.
- fixed possible deadlock in semweb (RDF) package.
Package maintainers are adviced to upgrade to this version.
Enjoy --- Jan
========================================
SWI-Prolog Changelog since version 7.2.2
========================================
* VERSION: Merged version 7.3.6
* FIXED: numbervars/3,4: crash when given a negative
start. New code implements this properly and raises a
representation_error(tagged_integer) if the generated integers are
out of range.
* CLEANUP: Types for numbervars
* DOC: CLP(FD): Introduce and use the term "core relation". Translation
of "Kernrelation" (German), used in Ulrich Neumerkel's excellent
GUPU system.
* DOC: Some PlDoc comments in library(quintus).
* FIXED: Flag stream in error state if an exception was raised while
operating on it.
* ENHANCED: CLP(FD): Fewer attributed variables in call_residue_vars/2.
Examples, previously:
* DOC: CLP(FD): New section about optimisation. Julio Di Egidio.
* ENHANCED: CLP(FD): Avoid residual variable for
all_different([]). Ulrich Neumerkel.
* FIXED: possible crash when accessing unallocated memory after
PL_canonicalise_text()
* ENHANCED: aggregate_all/3: implement min(X) and max(X) using constant
space.
* DOC: Clarified confusing \quote. Jochem Liem.
* DOC: Fixed mode of parse_url/2.
* ENHANCED: Rewriting sum(X) template to use nb_setarg/3 in constant
space.
* FIXED: clp(fd) goal expansion for explicitly qualified goals, as
in clpfd:in(A,B). Markus Triska and Ulrich Neumerkel.
* ADDED: library(sandbox): file name manipulation primitives.
* ADDED: library(sandbox): string_lower/2 and string_upper/2
* FIXED: CLP(FD): Apply goal expansion only if the CLP(FD) predicates
are visible in the load context. Jan Wielemaker.
* ADDED: Sandbox listing/1 if argument is not qualified.
* ADDED: --disable-mt configure option.
* DOC: Deal with \log{N}. Stephen Coda and Michael Hendricks.
* ENHANCED: library(www_browser) has been cleaned and updated.
* ENHANCED: debugger: while skipping, possibly created threads are
started in nodebug mode.
* FIXED: www_open_url/1 tried `firefox -remote openURL(...)`, which is
no longer supported.
* REMOVED: CLP(FD): Removed (undocumented) support for A/B. Please
use A//B.
* ENHANCED: CLP(FD): Recognize "Var in I" in disjunctions. Eyal Dechter.
* FIXED: running thread exit hooks without a foreign context.
* DOC: `dot_lists` rather than `dotlists`. Also fixed internal
identifier for consistency. Boris Vassilev.
* FIXED: pack_install/1: compute type (git/non-git) independently for
dependencies. Anne Ogborn and Wouter Beek.
* FIXED: clause index ->size represents the number of indexable
clauses. This was decremented when a non-indexable clause was retracted.
Thanks to Douglas Miles for help creating a reproducible case.
* ENHANCED: CLP(B): Improve trail stack usage.
* FIXED: ensure checkDefinition() is called with a lock on the predicate
definition as it iterates over the list of clause indexes
* FIXED: Make sure copy_term/2, friends and the recorded database add
created attributed variables to the attvar reference chain. If not,
call_residue_vars/2 is incomplete and GC crashes. Markus Triska.
* ENHANCED: CLP(B): More scalable taut/2 for large conjunctions.
Example: Schur's theorem (from Ramsey theory).
* FIXED: Unification between two CLP(B) variables in certain cases.
So far, the only way I have found to show the problem is to disable
domain and aliasing propagation, by letting satisfiable_bdd/1 consist
only of the single clause:
* ENHANCED: CLP(B): Faster domain and aliasing consistency. We now
determine all variables that are not skipped in any branch of the
BDD in essentially a single pass.
* ENHANCED: CLP(B): The solver is now aliasing-consistent (see commit).
By this, we mean that if taut(X=:=Y, 1) holds, then X = Y is posted.
* ENHANCED: CLP(B): More scalable propagation of domain consistency.
All candidate variables are now determined in a single pass of the BDD.
* FIXED: CLP(B): in internal consistency checks, take into account
that variables may be instantiated due to simultaneous
unifications
* ENHANCED: CLP(B): in residual goals, constrain remaining variables to
Boolean variables also when clpb_residuals is set to bdd.
* ENHANCED: CLP(B): stronger internal consistency checks, enabled by
setting clpb_validation to true.
* ADDED: CLP(B): ?- set_prolog_flag(clpb_residuals, bdd) to see the
BDD as a list of if-then-else nodes in residual goals.
* FIXED: CLP(B): Correctly handle duplicate variables in cardinality
constraint. Witness:
* ADDED: library(sandbox): ?=(A,B) is safe.
* FIXED: pack_install/1: non-determinsm when installing from a
directory. Nicos Angelopoulos.
* TEST: Turned GC issue reported and fixed by Keri into a test.
Only fires when compiled with -DO_DEBUG and -d chk_secure
are used.
* FIXED: reset PC when unwinding from an exception. This prevents the
vmi_state using a PC outside of the query frame's clause
* ADDED: library(prolog_breakpoints): set_breakpoint/5 to manage
breakpoints in included files.
* ADDED: Maintain included-file info for data included using the :-
include(stream(...)). syntax.
* FIXED: Dict keys could not be quoted (e.g., _{'file':"
x.pl"}).
* FIXED: Issue#19: wrong space requirement calculation for GC under
call_residue_vars/2 causes an assertion failure.
Ulrich Neumerkel.
* MODIFIED: set libswipl SONAME to major.minor instead of
major.minor.micro. This allows SWI-Prolog to be upgraded
in a major.minor series without having to relink external
binaries
* FIXED: Possible crash when using :- include() into a temporary module
because the notion of the file's current procedure is
not reset after loading a file.
* PORT: Test for mp_bitcnt_t and typedef to `unsigned long` if it is
not defined.
===========
Package chr
===========
* ENHANCED: chr sbag_member'/2: really kill choicepoint on last member:
Before:
* FIXED: CHR: debugger 'skip'. Patch by Alan Baljeu
============
Package clib
============
* FIXED: read_line_to_codes/2,3 and read_stream_to_codes/3: return with
failure when interrupted by an exception.
* ADDED: library(prolog_stream) implements a Prolog stream that performs
I/O with callbacks to Prolog.
============
Package http
============
* FIXED: http_server/2: correct start message when started as
`http_server(Closure, [port(Interface:Port])`.
* ADDED: html_head:mime_include//2 to allow handling extended HTML
head resources. After a patch by Wouter Beek.
* CLEANUP: http_read_json/2,3: detection of JSON content type now uses
http_parse_header_value/3.
* MODIFIED: http_read_data/3 using the option to(string) now actually
produces a string (used to return an atom).
===============
Package ltx2htm
===============
* ADDED: \log{N}
================
Package pengines
================
* ADDED: Rebind pengine thread normal I/O to pengine_input/2 and
pengine_output/1.
* ADDED: Pengine.stringify() for `null` and `undefined`
* FIXED: Pengine.stringify() did not handle booleans.
* FIXED: pengines.js: set the pengines id on `onoutput`, so we can
handle output (error messages) from the create.
* DOC: Fixed first Pengine example. Unavailable server and singleton
warnings may scare new users off.
* DOC: Corrected spelling mistake.
==============
Package semweb
==============
* FIXED: Possible deadlock while deleting literal values.
Broadcasting the died triple may cause a query, which in turn may
cause a scan_exit() which can delete literals. Broadcasting is now
done outside the locked area and destruction is delayed until the
broadcast completes.
* FIXED: Possible data corruption in RDF store while destroying literals.