Ann: SWI-Prolog 8.1.29

Dear SWI-Prolog user,

I’m happy to announce SWI-Prolog 8.1.29. This is approaching code freeze
for 8.2.0, but we are not quit there. A good number of steps have been
taken though:

  • A number of fixes and enhancements to tabling: a possible crash related
    to tracing tabled code (not recommended), possible missing answers under
    subsumptive tabling, pretend shared tabled to be gone after abolish dispite
    the actual trie is not reclaimed, first implementation of radial restraints,
    providing partial answers by limiting the size of answers.

  • Keri Harris fixed a bug that could cause a thread to go stealth and
    (thus) be missed by atom/clause garbage collection.

  • Sebastian Sardina did a lot of work on JPL: modernise test framework
    to JUnit4 and support SWI-Prolog rational numbers. Note: packagers
    must add junit4 as and hamcrest as new build dependencies.

  • Carlo Capelli fixed 8-bit and true colour handling in the Qt console.

  • Galileo Sartor completed the snap specification, providing up-to-date
    binaries for any (amd64) Linux system.

  • Thanks to some persistency of Rick Workman I had to confirm that
    Apple’s Xcode 11 makes performance drop by almost 50%. Switched
    to gcc-9 for the MacOS bundle, providing over 10% better performance
    than the older Xcode.

  • MODIFIED: the default C type for exchanging arities is now size_t.
    Foreign extensions are strongly adviced to use this convention. You
    still can get the old behaviour using these declarations:

    #define PL_ARITY_AS_SIZE 0
    #include <SWI-Prolog.h>

  • Quite a few portability and build issues have been fixed.

  • Fixed a possible crash on pcre regular expressions allocating the
    output vector too short.

  • Various documentation fixes and enhancements.

Still new things on the agenda before 8.2 are below. The rest should
be bug fixing only.

  • Call size restraint for tabling (completed restraint handling to
    the level provided by XSB).

  • X11 application icons to follow the Free Desktop conventions (icons
    are now empty on some Linux desktops).

    Enjoy — Jan

Special notes for MacOS users

Notably considerations for @pmoura for Macports as well as the Homebrew maintainer:

  • The download bundle is built with gcc-9 using PGO optimized compilation. It should
    be a little faster than 8.1.26 and much faster then 8.1.27/8.1.28 (on MacOS)
  • If you build using Macports you
    • must install hamcrest-core as a new dependency (else the prolog-in-java test fails)

    • may install gcc9 and build SWI-Prolog as below to make it about twice as fast as a build using the default Xcode 11

      CC=gcc-mp-9 cmake -G Ninja [option ...] ..
      ../scripts/pgo-compile.sh
      ninja
      ninja install
      

SWI-Prolog Changelog since version 8.1.28

  • ADDED: CHK_ATOM_GARBAGE_COLLECTED Prolog debug topic. The sanity-checks
    provided by this topic used to be provided by CHK_SECURE.

  • DOC: radial_restraint/0.

  • FIXED: radial_restraint/0.

  • FIXED: Tabling tripwire raising wrong exception.

  • ADDED: Handle :- table … as abstract_answer(N).

  • ADDED: $trie_insert_abstract/3. Intended to debug size abstraction.

  • MODIFIED: size_abstract_term/3 to implement what I think is the
    intended semantics of term size abstraction of XSB.

  • DOC: make sure archive package is built before prolog_pack
    documentation.

  • DOC: Wrong ssl dependency (gives Prolog error messages during build,
    otherwise harmless).

  • FIXED: GC may miss threads if thread_highest_id is decremented below
    a newly instantiated thread

  • MACOS: Added distribution build using gcc 9

  • PORT: Use CMake to find out whether the 64 bit file functions are
    supported for minizip.

  • ENHANCED: zipper_open_current/3: Use full buffering.

  • FIXED: current_table/2 to consider emptied shared tables as
    non-existent. Jacco van Ossenbruggen.

  • FIXED: Inconsistent index for call subsumption may cause answers to
    be lost.

  • MODIFIED: Change the default for exchanging arity from int to
    size_t. The use of int was deprecated for a long time. The old
    behaviour can be regained using #define PL_ARITY_AS_SIZE 0 before
    loading SWI-Prolog.h.

  • PORT: Deal with missing MAP_ANONYMOUS if MAP_ANON exists.

  • FIXED: Avoid code walker to walk over wrappers.

  • FIXED: trie_gen_compiled/2,3 to fail on clause/2,3 and retract/1,
    claiming to have no clauses. Fixes a crash when trying to index
    the clauses. These are two rather weird predicates …

Package http

  • ADDED: hub_member/2 to library(http/hub).

  • DOC: Wrong ssl dependency (gives Prolog error messages during build,
    otherwise harmless).

Package jpl

  • ENHANCED: Avoid dependency on clib package.

  • TEST: Migrate to JUnit 4 - addresses #40

Package odbc

  • DOC: odbc_close_statement/1 missing arity.

  • DOC: Predicate description outside LaTeX description disturbs the
    layout and documentation index generation for the ODBC package.

Package pcre

  • FIXED: Issue#571: pcre allocation of the output vector could be
    too short. David Sitsky.

Package pengines

  • FIXED: library(pengines_io): We cannot autoload
    library(http/html_write) due to use of :- html_meta/1

  • TEST: test_local.pl no longer exists.

Package plunit

  • FIXED: Missing import

Package swipl-win

  • FIX: add ESC sequence for 8 bit and true color

Package xpce

  • FIXED: Avoid infinite recursion if neither a specific font nor the
    default font exists.
2 Likes

Something went wrong and this is still the good old Xcode 11 build. Next time :slight_smile: