Ann: SWI-Prolog 8.5.7

Dear SWI-Prolog user,

SWI-Prolog version 8.5.7 is ready for download. This version fixes
(again) several portability issues, fixes a couple of crashes, improved
compatibility and fixes several issues in swipl-win, both the Qt and
native Windows version. Highlights:

  • As followup to a crash reported by Paulo Moura in the Logtalk suite,
    a couple of incompatibilities were resolved. Notably for format/2.
    One is a MODIFIED: the goal for ~@ is now executed as \+ \+ Goal,
    i.e. variable bindings for the goal are lost.
  • The parser now parses +42 as +(42) instead as simply the number 42.
    This is required by the ISO standard. Somehow this was never spotted.
  • Crashes: two bugs in rational number handling,
    set_prolog_flags(threads, …). SSU issue with clause indexing.
  • Enhancements to print_term/2.
  • Some more input validation (option/2, http_server/2)
  • Encoding issues: MQI and MacOS
  • MacOS:, encoding, working directory is now $HOME
    and silenced message box on termination.
  • Windows: XPCE fixes to avoid message boxes to hide behind other
    windows and PceEmacs too open multiple windows for the same file
    if the current window is iconized.

Thanks for all feedback and patches!

Enjoy --- Jan

SWI-Prolog Changelog since version 8.5.6

  • MODIFIED: MacOS working directory and locale setup.

  • MODIFIED: MacOS swipl-win to start in ~/Documents.

  • MODIFIED: MacOS: set LC_CTYPE to UTF-8 if neither LANG nor LC_CTYPE is
    set. Also set the encoding flag to utf8 if LC_CTYPE is set to

  • PORT: Started Apple specific predicates. Adds

  • PORT: Fix compilation using clang in debug mode.

  • FIXED: make/0 to consider a file modified if some indirectly included
    file is modified. Used to only consider directly included files.

  • FIXED: Possible GC crash on a rational number appearing in a clause

  • FIXED: Indexing issue for assessing possible clauses indexes in SSU
    code. Can lead false “No matching clauses” errors.

  • DOC: read_string/3: clarify characters.

  • ENHANCED: option/2: verify the Options argument.

  • CHECK: Verify that the format/2,3 arguments are a list. Quintus
    allowed for not using a list when only a single argument was required.
    Paulo Moura.

  • MODIFIED: Read +digits as a term rather than a number. This changes
    also removes the space when writing e.g. +42. Reading +digits as
    a number predates the ISO standard and current practice. It was in
    SWI-Prolog since version 2.5 …

  • MODIFIED: format/1-3: enforce first argument to be text. Now raises
    an exception if the first argument is a number, etc.

  • MOFIFIED: format/2: ~@, running a goal now discards possible
    bindings created by the goal. Compatibility with SICStus.

  • COMPAT: format/2: a numeric argument to ~s, e.g., ~3s truncates
    the string to the given number of characters.

  • COMPAT: format/2: ~r uses default radix of 8, compatible with SICStus
    and GNU-Prolog (used to raise an exception). Paulo Moura.

  • FIXED: set_prolog_flag(threads, Val) deadlocked. Paulo Moura.

  • FIXED: big integers constants in arithmetic expressions under
    optimization could be compiled as A_MPQ (rational), resulting in
    a crash. Paulo Moura.

  • DOC: further enhancement to untable/1 docs.

  • DOC: document the role of untable/1.

  • ADDED: foldsubterms/5 and use this to bootstrap foldsubterms/4,
    mapsubterms/3 and mapsubterms_var/3.

  • ENHANCED: print_term/1,2: actually handle the left_margin option
    (fix) and make its default the current column.

  • FIXED: print_term/1,2: avoid dependency on library(backcomp).

Package http

  • ENHANCED: verify server address when starting an HTTP server and
    raise an error if this is invalid.

Package mqi

  • FIXED: Hang with multi-byte UTF8 characters reported by @Losbarthos
    Details in:

    The MQI implementation had a bug where sends to MQI expected the
    message header to provide a count of Unicode code points instead of
    what it should have been: UTF8 bytes. This has been corrected but is a
    breaking change, so:

  • ADDED: A simple protocol versioning interface to the MQI. There is
    now a mqi_version/2 predicate and the MQI returns Major and Minor version
    in its response to an initial connect message.

  • ADDED: The swiplserver Python library properly detects the original
    and fixed versions and works against both of them.

  • TEST: Added tests for multi-byte UTF8 characters

Package protobufs

  • BUILD: Silence message about enabling tests. We want the cmake run
    as quiet as possible.

Package semweb

  • FIXED: term_expansion/2 for rdf_meta/1 contained a !, preventing
    other rules to fire.

  • ADDED: rdf_meta/1: apply conversion in SSU heads.

  • FIXED: rdf_global_term/2: Allow for zero-arity compounds.

  • COMPAT: do not require white space after the subject and predicate
    of ntriple format.

Package ssl

  • PORT: error: ‘rsa’ undeclared for old OpenSSL and LibreSSL.

Package swipl-win

  • CLEANUP: Avoid messagebox when terminating.

Package xpce

  • FIXED: Issue#10 for swipl-win: display->confirm hides message
    box in the background.

  • FIXED: Issue#14 (swipl-win, should be xpce)
    emacs_frame->on_current_desktop failed if the frame is
    iconized. This keeps creating new frames rather than reusing them.

  • FIXED: frame->expose for Windows when xpce is running in the