Ann: SWI-Prolog 9.2.8 (stable)

Dear SWI-Prolog user,

SWI-Prolog 9.2.8 (stable) is ready for download. It provides a
large number of backports from the development series, dealing
with portability, stability and license issues. It also provides
some isolated new features to simplify “forward compatibility”.

Enjoy --- Jan

SWI-Prolog Changelog since version 9.2.7

  • BUILD: Make sure to clear DISPLAY when running xpce steps While
    the build works without a DISPLAY variable, an invalid variable causes
    the build to fail.

  • TEST: Disable collation_key/2 test for MacOS Macos Sequoia (15)
    wcsxfrm() returns garbage.

  • FIXED: Avoid corruption in setjmp()/longjmp() Clang demands using
    a volatile variable for protecting the throw environment’s parent.
    This is probably correct, although it seems weird to place this
    variable in a register.

  • ENHANCED: Add Prolog navigator to theme/dark.pl

  • FIXED: expand_term/2 to succeed twice when expanding a toplevel
    list. Results in duplicate clauses when compiling [f(1), f(2)]..
    Reported by Uwe Neumerkel.

  • FIXED: pack management: find available versions from wildcard URL.
    Patch by Nicos Angelopoulos

  • PORT: Added FreeBSD signal names to the name/number map. Contributed
    by Dewayne Geraghty

  • ENHANCED: file_autoload_directives/3: deal with library(main) hooks.

  • ADDED: PL_print_message() for calling print_message/2 from C

  • FIXED: print_term/2: indentation of right argument of infix term.

  • FIXED: Allow breakpoints in arg(C,T,F) I.e., arg/3 calls with a known
    argument and the 3th index being a first var. These map to the
    B_ARG_CF VM instruction.

  • DOC: Added documentation for PL_for_dict()

  • FIXED: Windows format_time/3 implementation for time stamps > 32 bits.
    While the Windows time_t is 64 bits, it doesn’t seem to localtime()
    seems broken handling large time offsets.

  • ADDED: date_time_stamp/2: allow leaving components unbound from
    the right.

  • DOC: #1323 Wrong claim on default for prefer_rationals flag.

  • ADDED: is_message_queue/1 to test the existence of a message queue.

  • FIXED: pack_publish/2 reporting (claimed failure)

  • ADDED: swipl pack publish --server=URL ... Allows publishing at
    an alternative server.

  • FIXED: Package manager, swipl pack publish . Broken detection of
    git directory and failure do deal with

     requires(prolog:flag(_Value)).
    

    to test for existence of a Prolog flag.

  • FIXED: Possibly memory leak in LibBF arithmetic A thread race condition
    may lead to loosing cache values from get_trig(). Fixed using C11
    atomics.

  • FIXED: Use stack variable after return for LibBF bignums This leads
    to incorrect results and crashes when using really big bignums.
    The LibBF bignum implementation is by default used for the WASM
    version and the MacOS binaries.

  • ENHANCED: install_pack/1,2 to prefer https over http for downloading.
    Unless insecure(true) or swipl pack install -k <pack> is given,
    possible HTTP links are automatically rewritten to HTTPS.

  • ENHANCED: pack_install/1: warn if files are downloaded over HTTP

  • MODIFIED: argv_options/3: with type (bool|sometype) We now consider
    the option boolean unless written as --opt=value Before, the
    option was considered boolean if it was the last argument or the next
    argument started with a -.

  • FIXED: argv_options/3 handing of boolean|Type on last option

  • ENHANCED: Arithmetic performance. This patch reverts
    18d5d539af0807808ba6fee6ec66394aaec589f1 except for clang as it does
    cause a significant slowdown on some systems.

  • PORT: Call gettid via its glibc wrapper if possible

  • LEGAL: Resolved license issues for dialect/xsb/basics.pl Hi Jan,
    As the coder of a number of (but by no means all) the predicates
    in XSB’s basics.P, I’m perfectly fine with you releasing under the
    BSD-2 license. Regarding the issues with XSB’s licenses, we’ll have
    to consider it and come to some decision. Best, -David

  • DOC: Updated limits section

  • DOC: Update 32/64 bit notes

  • FIXED: #1317 thread_exit/1 can crash after changes to thread_signal/2.

  • FIX: include stdbool

Package cpp

  • TEST: Fixed file tests for Windows where Prolog and OS paths differ,

  • FIX: add missing PlStringBuffers in calls to PL_chars(), PL_nchars(),
    PL_wchars()

  • DOC: adding warning to PlTermv

  • DOC: Added C++ version of foreign.doc’s calc.c example

  • MODIFIED: Return type wrappers changed to bool, matching SWI-Prolog.h
    This matches the changes in SWI-Prolog.h with commit a1e914f

  • DOC: added blob example (wrapped pointer)

  • ENHANCED: PlTerm::get_file_name() returns std::string

Package http

  • COMPAT: Support both old and new abort exception

  • FIXED: http_reply_file/3: be more tolerant about if-modified-since
    Recent systems provided file times in sub-second, while HTTP typically
    looses this.

  • FIXED: Steadfastness of http_timestamp/2

  • ADDED: http_parse_header_value/3: support expires For compatibility,
    this is not converted by default.

  • ADDED: http_timestamp/2: support mode (-,+), i.e., parsing

  • ADDED: Allow for throw(http_reply(hangup)) to simply hangup the line.
    This is not a valid reply, but can be used to quickly terminate
    connections as well as for testing error scenarios.

Package semweb

  • FIXED: Make RDF GC thread stop gracefully.

  • COMPAT: Support both old and new abort exception

Package sgml

  • DOC: xsd_time_string/3 XSD strings in table were wrong.

Package swipy

  • DOC: Python signal handling

  • ADDED: janus.heartbeat() to make Python process interrupts while
    Prolog runs.

  • ADDED: propagate keybaord interrupt.

  • ENHANCED: Cooperate with Python sys:exit() Calls from Prolog to
    Python, where Python raises a SystemExit() exception are mapped to
    Prolog unwind(halt(Status)) exceptions or, for older versions into
    abort/0, recording the exit status requested. Consisently, when
    control comes back from Prolog to Python, the unwind(halt(Status))
    raises SystemExit(Status) or, abort with recorded exit status raises
    this Python exception.

  • PORT: Avoid compiler warnings on 32 bit platforms

Package xpce

  • ENHANCED: #38 Support themes in navigator.

  • FIXED: #38 Avoid loading the GUI tracer when trace/util.pl is loaded.
    The navigator loads this, but should not load the GUI debugger itself.

  • FIXED: Class tabbed_window: avoid sending ->resize_window when freed.

  • COMPAT: PceEmacs: implemented C-x 5 2 and M-,

  • FIXED: Pass on unwind() exceptions from e.g. timer events calling
    Prolog.

  • ADDED: GUI tracer term viewer: allow pinning.

  • ADDED: PceEmacs Prolog mode: auto-fill the mode line properly.

  • COMPAT: Support both old and new abort exception

  • ADDED: Configure how the GUI tracer behaves if another threads hits it.
    The default now is to block such threads. Alternatively it may be
    set to nodebug, meaning the thread continues in nodebug mode or
    trace, meaning it opens a secondary trace window. The latter is
    how it used to work.

  • FIXED: Argument indentation on next line

  • ADDED: PceEmacs: Indent dict values relative to the key when on
    next line

  • FIXED: PceEmacs language_mode<-argument_indent Should fail if there
    is no argument.

  • ADDED: Allow disabling the message capturing popup for the session.

  • SCALE: Predicate browser of profile/1 GUI.

  • LEGAL: Resolved license issues wrt xdnd.[ch] by Paul Sheer (LGPL)
    This turns xpce on X11 effectively into LGPL. On Windows, this code
    is not used and thus BSD-2 is effective.

  • FIXED: Types for AllocColor

  • PORT: Changed XPM Windows emulation from K&R to ANSI C Modified using
    GitHub - license-fn/un-obsolize: Convert obsolete (K&R) C function declarations and definitions to ANSI equivalents.

  • FIX: conflicting declarations noticed only by clang (not gcc)

2 Likes

Updated on MSYS2, all tests pass.

:loud_sound: :loudspeaker: :mega: :postal_horn: :bell: :musical_score: :musical_note: :notes: :microphone: :headphones: :saxophone: :accordion: :guitar: :musical_keyboard: :trumpet: :violin: :banjo: :drum:

2 Likes