Dear SWI-Prolog user,
This release had a longer delay than what you are used to. It also
brings a lot more. In addition, it is a pre-release of SWI-Prolog
9.2.0 (stable), to be expected end of next week.
Highlights:
-
Janus, the Python interface is now considered stable. Final
synchronization with XSB has taken place. We are in the
process of writing up the PIP (Prolog Improvement Proposal)
that documents the common part of the interface. -
The coverage analysis tool has been moved from the
plunit
pack to the main library. In addition, it can now create
coverage reports of multi-threaded programs and it can
combine reports of multiple Prolog invocations. -
The pack management system has been almost completely rewritten.
The pack format has not changed. A brief summary of the changes:- Plan the installation of multiple packages, selecting a compatible
combination. - Plan the installation, including dependencies before installing
anything, first asking consent from the user. On accept, the
packs are downloaded and the build process is established. - Deal with versions of dependencies as well as the Prolog version
and Prolog features that may be required for the pack to function - Easily support installing packs specifically for a project in
addition to user and system-wide packs. - More informative listing of packs, including listing only
outdated packs. - More work on the app
pack
. - Combine and extend all pack related documentation into a single
chapter of the manual. - Much better support for CMake base packs. The
environ
pack
has been updated tocmake
, usingctest
for testing.
- Plan the installation of multiple packages, selecting a compatible
-
Several minor bug fixes and additions.
Enjoy — Jan
SWI-Prolog Changelog since version 9.1.21
-
MODIDIED: library(prolog_pack) This is an extensive rewrite of the
package infra structure. The pack format has not changed. -
ADDED: swipl pack list:
--installed
option. -
ENHANCED: Hide library(apply) from debugger.
-
ADDED: git_tags/2.
-
ADDED: git_branches/2: option remote(true).
-
ENHANCED: logic behind git_default_branch/2
-
ADDED: git_process_output/3: option status(-Status)
-
ADDED: Prolog flag
rationals
to claim rational number support. -
ADDED: cov_property/1 Allows querying coverage collection system
properties (currently only whether coverage data collection is active). -
FIXED: #1222 answer subsumption pruning of answers may crash.
-
ADDED: library(prolog_coverage). This used to be available as
library(test_cover) from theplunit
package. -
ADDED: ‘$cov_add’/3 to allow loading coverage data from a file.
-
CLEANUP: Removed predicate indicator from ‘$cov_data’/3 call_site/3
term. Was not used and wrong anyway as it was not module qualified. -
ADDED: git_current_branch/2. git_default_branch/2 was actually
implementing getting the current branch. This commit renames
git_default_branch/2 to git_current_branch/2, making it fail
if there is no current branch (detached HEAD). It adds a
new git_default_branch/2 that returns the branch related to
refs/origin/HEAD
. -
FIXED: git_branches/2 to omit the reported detached head.
-
MODIFIED: Moved pack_attach/2 from the library to the core.
This predicate is not about installing. This patch also deletes
'$pack_attach'/1
and'$pack_attach'/2
. -
ADDED: library(git): is_git_hash/1.
-
FIXED: #1220 create_prolog_flag/3 using
type(term), keep(true)
If the initial type is not a term, the type must be set toterm
and the value must be converted. -
ADDED: pack_install_local/3 This predicate adds one or more packs to
the local project directory. Work in progress. -
ADDED: Prolog environment variable
SWIPL_PACK_PATH
This defines
the Prolog search path for packs at startup. -
ADDED: Prolog flag
path_sep
. Provides access to OS path separator
(:
or;
for Windows). -
ADDED: replace(+Bool) option to attach_packs/2. Allows attach_packs/2
to clear the default package list. -
FIXED: Make sure saving the environment always succeeds
-
ADDED: Allow installing git packs from a URL whose base name does
not match the pack name -
ENHANCED: Improve listing of packs
-
ADDED: pack_list/2 List packs with options.
-
ENHANCED: library(prolog_versions). Extended and improved
require_prolog_version/2. Added require_version/3 and cmp_versions/3.
Added to library documentation. -
DOC: Succeed if there is no profiling support in this version.
-
FIXED: Keep track of base and size of the C-stack This information
was stored in the thread-info structure. However, if an engine
is detached and later attached in a new OS thread this information
is wrong. We now cache it in the info structure, but we store it in
a pthread key.This notably fixes thread interaction for JPL.
-
ENHANCED: always save
buildenv.sh
on pack build directory. -
ADDED:
swipl_add_test()
to home/cmake/swipl.cmake -
ADDED: Set
${swipl_module_dir}
in home/cmake/swipl.cmake -
FIXED: CMake error in home/cmake/swipl.cmake.
-
DOC: #1217 Improve documentation for selecting Python version.
-
BUILD: Disable Janus when using
-DSTATIC_EXTENSIONS=ON
-
FIXED: Avoid PL_thread_attach_engine()/PL_thread_destroy_engine()
destroying the thread. If this pair is called on a thread that already
exists, it should not destroy the engine. This notably causes Janus
to crash when running on a background thread. Reported by Fabrizio
Riguzzi. -
FIXED: Use snapshot/1 when computing exports This is used to update the
autoload library as well as several other IDE related tasks. For this
we read and expand the file until we find the first non-directive.
This may however leave traces in dynamic predicates. Using snapshot/1
avoids that.It is a partial work around. There could be other side-effects.
Should
probably be considered experimental. -
FIXED: Declare more system dynamic predicates as not being subject
to transactions. This fixes several issues when (auto)loading sources
files inside snapshots (snapshot/1) or discarded transactions. -
FIXED: #1213 transactions interfering with
wrap_predicate/4
. More
generally, transactions and snapshots should not affect some system
maintained dynamic predicates. The wrapper used bywrap_predicate/4
is one example. This also affects dynamic predicates involved in
loading sources. This patch disconnects whether predicates are
subject to transactions from whether they are dynamic.For now, the ability to separate the two properties is reserved to the
system. -
FIXED: Consistency of
LD
andCC
variables for building packages. -
BUILD: Use static libraries to silence Windows Defender It appears
that executables cannot be copied when Windows Defender is active. -
BUILD: Use CMake recommended CMAKE_C_BYTE_ORDER when available
-
ENHANCED: Allow for some rounding and jitter when deciding INDEX.pl
is out-of-date. -
TEST: Make test_installation/0 run package tests concurrently.
-
CLEANUP: document many of the maintenance scripts and remove some
outdated ones. -
FIXED: require_prolog_version/2: silent failure of git version parsing
Git version parsing fails if we are at a release. -
ENHANCED: Declare wrap_predicate/4 body argument as meta-argument.
-
ENHANCED: library(prolog_colour) support for Prolog flags.
-
ADDED: library(prolog_colour): colorized known but unset flags.
-
ADDED: library(prolog_colour): support arithmetic function
roundtoward/2. Second argument is not a function but a rounding
mode identifier. -
ADDED: arithmetic_function/1 to allow import/export If the
implementation of a function is exported, it may be imported into
another module and used. This patch also updates the documentation. -
FIXED: pretty_print/2 to deal with bobs around an operator.
-
DOC: PL_new_term_refs() takes
size_t
since recently. -
FIXED: Fixup script for MacOS bundle was not executed. Seems a change
in recent CMake that requires the script to start with#!
.
Package bdb
- DOC: Build documentation
Package clib
-
ADDED: process_which/2 to find executable.
-
FIXED: directory_file_path/3: typo in raised exception.
Package cpp
- DOC: Improve blob sample code
Package plunit
-
MODIFIED: removed library(test_cover). This library is moved to the
core as library(prolog_coverage) because it has no dependencies on
the unit testing and serves more purposes. -
ADDED: library(test_cover): allow to save and restore coverage data.
This patch is a major improvement to the coverage analysis tool.
It modifies the API, although the old show_coverage/2 is still working
as it used to.It improves the report and, most importantly, allows for combining
coverage data from multiple Prolog invocations. -
ADDED: cov_save_data/1.
-
FIXED: #23 allow set_tests_options([run(make(all))]).
-
DOC: Improved documentation for show_coverage/1,2
Package swipy
-
MODIFIED: Drop
Module
argument for py_dot/[4,5] (now py_dot/[3,4])
Was ignored anyway. XSB dropped this argument as well. -
MODIFIED: Get the default arguments from py_initialize/3 from the
flagpy_argv
Just passing non-Prolog argv may be illegal to Python,
crashing it during initialization. -
COMPAT: Renamed py_object_type/2 to py_type/2 As agreed by the PIP
meeting dd 2024-01-10. -
FIXED: Make Janus work with single threaded Prolog.
-
ADDED: Reflection predicates This commet adds py_module_exists/1,
py_hasattr/2, py_object_type/2 and py_isinstance/2.It renames py_obj_dir/2 and py_obj_dict/2 to py_object_dir/2 and
py_object_dict/2. Old names are kept as deprecated.This is the result of the Dec 20 PIP meeting in Janus. The names
nor implementation details are set in stone yet. -
FIXED: Unify Python dict as Prolog dict It appears that the size
reported by PyDict_Size() is not always the same as the number of
iterations from PyDict_Next().
Package xpce
- CLEANUP: Removed unused code.