Ann: SWI-Prolog 8.3.27

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 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

  • 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

  • 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

  • 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 for execute.
    Improves compatibility with SICStus.

  • FIXED: Prevent source analysis to loop on an unbound module export

  • 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

  • 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 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

  • 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).