Ann: SWI-Prolog 9.1.2

Dear SWI-Prolog user,

SWI-Prolog 9.1.2 is ready for download. It is pretty close to 9.0.3.
It got some patches to odbc and semweb for clean compilation on some
targets. plunit is diverging. Development on plunit aims at better
feedback and support for paralel testing. Current changes are mostly
code cleanup though.

 Enjoy --- Jan

SWI-Prolog Changelog since version 9.1.1

  • PORT: Fix crash in walking the Prolog stack for gcc 12 on arm
    32-bit. This is caused by padding added in struct queryFrame between
    saved_environment and top_frame

  • PORT: Fixed rationalize/1 and cmpFloatNumbers() to fail due to
    gcc optimization using internal wide float registers rather than
    comparing 64 bit doubles. Not entirely sure this is our mistake
    or within GCC’s claim to work with the extended float registers.
    Bottom line is that comparing a double (from memory, so 64 bits) to
    the result of a computation may return non-equal even if the extended
    float when forced to 64 bits is equal. This problem surfaced in i386
    using gcc 12.2.0.

  • FIXED: Issue#119: library(apply_macros) goal expansion for phrase/3
    using a partial terminal was too greedy. Uwe Neumerkel.

  • FIXED: Initialise Prolog flag encoding from locale name. Internal
    UTF-8 decoding is typically faster than the C library multibyte

  • FIXED: clause/2,3: possible GC crash when dealing with moved
    . We cannot have references to the local stack and thus
    we must allocate the support variable on the global stack.

  • ENHANCED: If one of the standard streams of a thread has been closed,
    rebind the stream to the original process streams. This can happen
    if, for example, we create a thread while output is redirected to
    some stream. If now this stream is closed the thread ends up with
    a closed standard stream.

Package http

  • TEST: Avoid using test condition bindings.

Package mqi

  • TEST: Avoid recorsive Python exception

Package odbc

  • PORT: More odbc type work around. As we do not use long [long] int
    sizes or availability, just leave them undefined and let unixODBC do
    its magic.

  • PORT: Include patch from Debian for some 32-bit systems. Some versions
    of sql.h depend on HAVE_LONG_LONG. Our code does not use any of
    the properties for long int.

Package plunit

  • ADDED: test_set_options/1: output(+Mode) to suppress output or emit
    it only after the test fails.

  • CLEANUP: Cleaner code for running tests and map to results. This is a
    squashed commit for a large set of improvements. Roughly, in tackles:

    • Cleaner wrapping code for running the tests, removing a lot of
      code duplications
    • Make test time available to a larger part of the code and use
      call_time/2 to get more extensive resource usage information than
      just time.
    • MODIFIED: Various message formats have changed. This may impact
      code that uses the message hooks to make the output satisfy some
      test driver. This is also the driving force: the end-goal of
      these changes is to provide a good concurrent test framework.
  • ADDED: current_test_unit/2 to enumerate the available unit tests.

Package redis

  • TEST: More relaxed timing to make test pass on heavily loaded machines.

Package semweb

  • PORT: Support full Unicode input for ntriples and trutle on
    Windows. Based on PR#108 by @mgondan.

Package sweep

  • ADDED: new command sweeprolog-infer-indent-style * sweeprolog.el
    (sweeprolog-infer-indent-style): new command. * sweeprolog-tests.el:
    test it. * (“Indentation”): mention it.

  • FIXED: stale predicate locations in loaded modified buffers *
    (sweep_predicate_location_/2,3): prefer xref over loaded predicate
    properties. * sweeprolog.el (sweeprolog-predicate-location): first
    analyze buffer if modified to update xref data.

Package xpce

  • FIXED: file<-time default was accidentally to access where it used
    to be modified.