Dear SWI-Prolog user,
SWI-Prolog 8.5.3 is ready for download. Highlights:
-
dif/2 suffered from various problems leading to incorrect
results in the case of unifications that bind multiple
constrained variables at the same time as well as in the
case of subterm sharing on the input terms. With help
from several people including Ulrich Neumerkel and Tom
Schrijvers. -
Fixed some regression and some polishing for pack_install/1.
-
Possible crash in saved state handling for dicts that have
anonymous (_) variables as values and an anonymous variable
as tag. -
Fixed possible performance issues with large strings as
reported by Rick Workman. -
Renamed PL_version() into PL_version_info() to resolve a
name conflict in the Yaswi Perl interface. Source code
remains compatible as PL_version() is available as macro. -
Updates to the benchmark suite, notably to use it with only
those programs that have license declaration (some have no
explicit statement about the rights). This allows using the
PGO build in Linux distributions. -
Several MQI updates by Eric Zinda.
Enjoy — Jan
SWI-Prolog Changelog since version 8.5.2
-
PORT: First attempt to support MacOs M1 with brew deps in /opt/homebrew
-
ENHANCED: library(assoc): partial rewrite to use SSU (=>/2) to generate
errors when called with invalid input. -
ENHANCED: Base clause indexing hash for indirect types (strings,
bigints and rationals on the start, end and length if the size exceeds
4 machine words. Without, the time to compute the hash easily becomes
dominant. Found by Rick Workman. -
REFACTOR: Get all index key computation in one place.
-
ADDED: pack_install/1 and friends: provide an environment variable
PREFIX for installing global objects. -
BUILD: Provide more control over the PGO build.
-
ADDED: argv_options/3 to process type
number
-
FIXED: profile/1 involving code executed in a temporary module.
-
MODIFIED: This patch modifies
PL_prof_type_t
, the interface to
extend the SWI-Prolog profiler. Foreign code using this may need to
be updated. Most likely only used by xpce. -
MODIFIED: Issue#900: Renamed PL_version() to PL_version_info().
Provides a macro for backward (source) compatibility. -
FIXED: Issue#105: dif/2 wrong result. This patch is a major rewrite
for dif/2. Where the previous version contained or nodes that were
considered satisfied based on a count, the new version verifies the
individual unifications of the unifier produced by unifiable/3.
The count fails, both too low and too high, as a result of multiple
unifications in a single unification as well as subterm sharing in
the input terms. -
TEST: More dif/2 tests.
-
FIXED: dif/2: we should ignore unrelated attributes.
-
FIXED: Issue#907: failure to fully reclaim clause indexes under
some loads. -
CMAKE: Support older CMake versions.
-
FIXED: Saved state handling of a dict whose first key value (in the
internal order) and tag are both avoid variables. This patch is less
invasive than 4de9114a76cd44659591296627e999cf1072d744. -
FIXED: Saved state handling of a dict whose first key value (in
the internal order) and tag are both avoid variables. Reported by
Matt Lilley. -
TEST: Migrate dif/2 tests to plunit.
-
FIXED: dif/2: pending constraints on sharing inside the terms.
-
FIXED: pack_install/1: if no foreign steps are required, skip them.
-
FIXED: pack_install/1: message indicating foreign install step.
Package bench
- ENHANCED: Allow deleting the files for certain benchmarks and
automatically skip these.
Package clib
- SANDBOX: Declare part of the SHA predicates sandbox safe.
Package http
- FIXED: javascript quasi quotation for regex objects holding
backslashes.
Package mqi
-
TEST: Do not run tests if we do not have Python3.
-
ADDED: Created Python swiplserver 1.0.1 on pypi.org
(swiplserver · PyPI) to include fixed file
handle leak -
UPDATE: Missing file from last commit
-
FIXED: File Handle Leak reported by
@andrzej-at-mazurkiewicz-org Original bug report is:
OSError: [Errno 24] Too many open files after 508 iterations of with PrologMQI() as mqi: with mqi.create_thread() as pth: · Issue #13 · SWI-Prolog/packages-mqi · GitHubNeed to call:
self._process.exit(None, None, None)instead of:
result = self._process.wait()
as it will close the stderr/out handles too. Otherwise they will leak
since they are used and thus opened (but not closed) by the Popen object.
Package pengines
- ADDED: handle full_stop(Bool) and nl(Bool) in translating Prolog
terms to HTML.
Package readline
- PORT: allow readline to be installed in /opt/homebrew/
- PORT: (MacOS M1 with homebrew) allow readline to be installed in
/opt/homebrew/
Package sgml
- ENHANCED: xsdp_subtype_of/2 to be fully logical. Wouter Beek.