Ann: SWI-Prolog 9.1.1

Dear SWI-Prolog user,

SWI-Prolog 9.1.1 is ready for download. This version is identical to
9.0.2 and only provided such that trackers of the development version
do not fall behind the stable version.

Enjoy — Jan

SWI-Prolog Changelog since version 9.1.0

[Dec 6 2022]

  • PORT: Build MacOS bundle using LibBF based big integers. Somehow the
    build for the universal binaries covering a large series of MacOS
    versions (since 10.14) breaks after uograde to MacOS Ventura when
    linking against libGMP. The results are random segfaults, bus errors
    and memory corruption.

[Dec 5 2022]

  • FIXED: Possibly crash in breakpoint callback after GC/shift.

  • TEST: Make thread signal test behave better under high loads.

[Dec 4 2022]

  • PORT: Make C backtraces work on ARM systems that use libunwind or
    glibc backtrace().

  • FIXED: Error handling if prolog_frame_attribute/3 using parent_frame
    runs out of stack. Careful review of this function after reported
    crash on 32 bit arm. Might be due to a stack shift in this code,
    but I doubt it and cannot reproduce the issue. Surely the current
    code is safer.

  • DOC: Document prolog_frame_attribute/2 with parent_frame(-Next)

  • TEST: test may result in another error on 32-bit platforms.

[Dec 2 2022]

  • ADDED: library(streams). Intended for various tricks in capturing
    and redirecting streams. Currently only provides with_output_to/3
    that extends with_output_to/2 to allow capturing user_output and
    user_error.

[Dec 1 2022]

  • FIXED: WASM shell: failure after clearing output.

[Nov 30 2022]

  • FIXED: breakpoint removal when retracting a clause.

  • PORT: Provide MSVC alternatives for MinGW runtime support.

  • DEBUG: Dump Prolog stack on assertion error.

  • PORT: Drop old MSVC #ifdef code in favour of <inttypes.h>
    on all platforms.

[Nov 29 2022]

  • PORT: Strict C11 support for VM instruction argument declaration.

  • PORT: Avoid GCC empty struct and named variadic arguments for cpp
    to make pl-wam.c compile under strict C11 standard. This does not
    solve full portability. pl-codetable.c suffers from related problems.

  • PORT: Fixed compilation for Windows after providing the libswipl
    patches

[Nov 28 2022]

  • FIXED: Race condition between destroying indexes of thread-local
    predicates on thread exit and the clause garbage collector.

  • FIXED: Race condition for creating a functor. We must add the
    functor to the global functor array before we can declare it valid.

  • FIXED: thread_wait/2: race condition in updating threads waiting for
    a module.

  • FIXED: clause/2: possible error handling H_LIST_FF if there is a GC
    between handling the head and tail.

[Nov 27 2022]

  • BUILD: Simplify configuration detection in the build environment by
    exploiting the libswipl flag if it is read-only (and thus reliable).

[Nov 26 2022]

  • ADDED: swipl --dump-runtime-variables to provide the name of the
    shared object in PLLIBSWIPL.

  • ENHANCED: Set the Prolog flag libswipl based on dladdr() when
    possible.

[Nov 25 2022]

  • PORT: The C11 standard does not allow for empty structs.

[Nov 24 2022]

  • SNAP: CMAKE_INSTALL_LIBDIR seems undefined inside snapcraft, causing
    the build to fail.

  • SNAP: Latest snapcraft sets LD_LIBRARY_PATH to provide access to the
    “parts”. We should not consider this a broken environment.

Package cpp

[Dec 6 2022]

  • FIXED: PlQuery() should resolve the predicate in the target module
    if one is provided as well as set the context. This bug breaks
    completion in swipl-win.

[Dec 5 2022]

  • TEST: Avoid encoding issues when running the tests.

[Dec 4 2022]

  • TEST: Fixed PL_scan_options() test for 32-bit platforms.

  • TEST: Avoid test_common.pl. Although avoiding duplication is good,
    it is not a good idea that when build with -DINSTALL_TESTS, this file
    ends up in the public library.

[Dec 3 2022]

  • DOC: Fixed LaTeX errors and duplicate labels.

[Dec 2 2022]

  • DOC: Add “philosophy” section on classes Remove some obsolete sections
    Some cleanup of markup

  • ADDED: PlPredicate, PlModule classes, support Pltermv(0) Also removed
    some unused parameter defaults and clean up initialization checks.

[Nov 29 2022]

  • DOC: fix description of how exceptions work

[Nov 26 2022]

  • TEST: Disabled invalid tests on Windows.

[Nov 24 2022]

  • DOC: more details about exception handling

Package plunit

[Dec 2 2022]

  • MODIFIED: extend message term plunit(end(Unit)) to plunit(end(Unit,
    Summary)) where summary provides the status and time spend on the unit.

Package ssl

[Nov 29 2022]

  • FIXED: crypto_password_hash/2,3 assumed byte encoding for
    base64_encoded/3 while the default changed to UTF-8. Added test.

Package sweep

[Dec 3 2022]

  • ADDED: ability to pass command line args directly to swipl
    • sweeprolog.el (sweeprolog-handle-command-line-args): new
      function, sets up command line argument handling using…
      (sweeprolog-command-line-function): new function.

[Dec 2 2022]

  • ADDED: minor mode for moving to the next hole with TAB * sweeprolog.el
    (sweeprolog-forward-hole-on-tab-mode): new minor mode, binding
    TAB to… (sweeprolog-indent-or-forward-hole): new command. *
    README.org (“Filling Holes”): rephrase and mention new minor mode.

  • ENHANCED: indentation after infix operators * sweeprolog.el
    (sweeprolog-indent-line-after-infix): adhere to last line indentation
    even if non-standard, handle DCG RHS contexts and SSU guards. *
    sweeprolog-tests.el: add more tests for indentation.

[Nov 27 2022]

  • ENHANCED: use argument names for holes in predicate
    completion * sweep.pl (predicate_argument_names/2):
    new predicate. (sweep_format_predicate/2): use it, and
    revise into… (sweep_format_predicate/4): new predicate.
    (sweep_predicate_completion_candidates): use it.

[Nov 26 2022]

  • ADDED: make flymake optionally complain about implicit autoloads *
    sweeprolog.el (sweeprolog-note-implicit-autoloads): new user-option.
    (sweeprolog-analyze-fragment-flymake): use it. * README.org (“Managing
    Dependencies”): mention it.

  • ADDED: new command for updating use_module/autoload directives

    • sweep.pl (sweep_file_path_in_library/2): new predicate.
      (sweep_color_normalized/3): normalize autoload source paths. *
      sweeprolog.el (sweeprolog-analyze-buffer-with): new helper function.
      (sweeprolog-update-dependencies): new command.

Package xpce

[Nov 30 2022]

  • PORT: Make the xpce source compile clean using GCC -pedantic flag.
    Note that an important part of the problems is that XPCE threads data
    and function pointers the same. This used to work with a cast to
    void*. This is not allowed in C11. It is allowed to cast both
    pointers and functions to intptr_t, so with a little detour we
    get where we need to be. Time will tell whether we will see systems
    where this conversion is not allowed.