Dear SWI-Prolog user,
SWI-Prolog 8.3.27 is ready for download. Quite a bit has happened. Highlights:
-
A lot of work by @peter.ludemann on the Google protobufs library. See
his announcement. -
A new package and library(stomp), providing an out of the box solution
to communicate with STOMP compatible message brokers such as RabbitMQ. -
Several fixes to monotonic and incremental tabling.
-
More SICStus 4 emulation by @dgelessus.
-
clpqr enhancements: ISO exceptions and simpler as well as faster
implementation of dump/3. -
Several enhancements to the development tools:
- Big speedup in the analysis done by make/0.
- Enhancements to explain/1.
- Command line debugger enhancements:
-
-Ng
, e.g.,-100g
show the top 100 frames of the stack rather
then showing the innermost frames. -
-Nr
, e.g.,100r
retries the parent frame at depth 100.
-
- show_coverage/2 can now create annotated files with counts for
calls/exit and failures per clause.
-
Some enhancements to memory allocation as discussed here.
Enjoy — Jan
SWI-Prolog Changelog since version 8.3.26
-
FIXED: If reevaluation changes conditions for a trie we must recompile
the trie. -
FIXED: tnot/1 table status evaluation during incremental re-evaluation.
-
ENHANCED: cli_enable_development_system/0: avoid loading xpce when
creating a state. -
FIXED: Failure in incremental tabling if a leaf predicate is both
tabled and dynamic. -
FIXED: Issue#861: blobs with PL_BLOB_NOCOPY|PL_BLOB_UNIQUE must only
compare the pointer. -
BUILD: Issue#860: PGO building did not work with make on MacOS.
-
ADDED: Initial partial library(clpfd) to SICStus 4 emulation.
-
BUILD: Issue#859: Building main.pl docs now depends on xpce.
-
PORT: Allocator detection.
-
ADDED: trim_heap/0 and a Prolog flag
malloc
to identify the malloc
implementation and provide additional features when detected. -
ADDED: Integrated stomp into the build process
-
ADDED: packages/stomp.
-
FIXED: lazy monotonic tabling requires a proper completion check. Such
a table is complete if the dependencies do not contain any invalid
incremental tables and all lazy queues are empty. Dependency
tracking must be recursive and has to deal with loops. This fix
avoids non-termination whil reevaluating lazy monotonic tables that
contain cycles. -
FIXED: While reevaluating a lazy monotonic node we should not consider
it invalid. -
FIXED: lazy monotonic update to set the current IDG node properly.
-
ENHANCED: explain/1 to support dicts, hide references from the
cross-referencer and show file and line numbers for references from
clauses. -
ADDED: Supply a depth with the tracer
r
command to retry
immediately on a parent goal. -
ADDED:
[level] S
trace command to save a goal to the recorded
database. -
ENHANCED: Command line debugger ‘h’ command
-
ADDED: Command line debugger ‘g’ command to accept a negative number
of frames as numeric parameter to print the outermost N frames rather
than the innermost. As a result, the ‘-’ command (no spy) must be
followed by the RETURN key. -
FIXED: Issue#853: prolog_walk_code/1 did not respect the module_class
option, scanning all modules. -
ENHANCED:
library(prolog_codewalk)
: avoid trying to find the file
-
. -
FIXED: Avoid permission error when using autoload/1 after autoload/2.
-
ADDED:
library(main)
: cli_parse_debug_options/2 and
cli_enable_development_system/0. -
ADDED: mapsubterms/3 to recursively substitute arguments in a sub term.
-
FIXED: on_signal/3 claims the signal is wrong on a type error on
the handler. -
FIXED: Avoid a race condition between thread_join/2 and thread_detach/1
and disallow multiple threads to join the same thread. Updated docs
for thread_join/2. -
ENHANCED: trace/1,2 to work better on imported predicates, applying
the wrapper directly to the implementation. -
ADDED: File access mode
search
as an alias forexecute
.
Improves compatibility with SICStus. -
FIXED: Prevent source analysis to loop on an unbound module export
list. -
ADDED: library(file_systems) to SICStus 4 emulation.
Package clpqr
-
ENHANCED: Use high level copy built-ins to realize dump/3 and
projecting_assert/1. Share code between these. -
MODIFIED: library(clpq) to throw ISO compliant exceptions
Package plunit
- ADDED: show_coverage/2: Produce annotated files with coverage
information. This information now also shows the number of entries
and exits/failures.
Package protobufs
-
TESTING: added many unit tests
-
ADDED: protobuf_serialize_to_codes/3 fixed: uint64_codes et al handling
of signed/unsigned improved: error handling for uint64_codes et al
renamed integer_zigzag to int64_zigzag, int32_codes => uint32_codes,
etc. moved some code into protobufs.c (uint64_int32, etc.) simplified
code by using freeze/2 and when/2 instead of nonvar/1 -
ADDED: protobuf_parse_from_codes/3 (using output of protoc-gen-swipl
plugin) -
ENHANCED: handle “group” add protobuf/unittest golden
-
BUILD: Run developer and “demo” tests as part of cmake/ctest build
Use installed protoc Refactor Makefiles -
TEST: Added unittest*.proto and “golden” tests, edge case tests
-
ADDED: Plugin for protoc (protoc-gen-swipl) Copy logic from
descriptor_proto_expand.pl to protoc-gen-swipl -
FIXED: Some edge cases of negative or very large numbers Added
round-trip tests Work-around issue #5 Added utf8 encoding directives
Replace UTF8 strings by unicode codes, in case tests run in ASCII
locale -
ENHANCED: Added repeated_embedded, unsigned32, unsigned64
-
PORT: Avoid UTF-8 in comment to allow building using non-UTF-8 locales.
-
ENHANCED: handle repeated [packed=true]
Package xpce
- FIXED: Allow autoloading library(pce_dispatch).