Ann: SWI-Prolog 8.1.10

Dear SWI-Prolog user,

I have uploaded SWI-Prolog 8.1.10. Most of the work has gone into the
trie implementation used for tabling. There are some more noteworthy
changes:

  • As proposed here, command line arguments are now parsed more
    strictly and cause the system to print an error when incorrect.
    This might require you to upgrade scripts.
  • Several bugs in deep indexing have been fixed that could lead
    to crashes as well as clauses being incorrectly ignored.
  • Several fixes to the IDE tool, notably the tracer and navigator.
  • RDF: Allow loading multiple files into the same graph.
  • ODBC: Allow handling multiple result sets from a single
    query and deal with drivers replying with SQL_NO_DATA_FOUND
    on updating queries such as creating tables.
  • process_create/3: allow connecting process input and output
    to (Prolog) file streams.
  • Avoid C compiler warnings for gcc 9.1.

Tabling now uses compiled tries, notably speeding up generating many
answers from a table. Currently uses somewhat more memory, but future
versions will use less as we can discard the trie itself in many cases.
This also provides update view consistency for incremental tabling.

Do not expect all this to be rock solid. I do think it is sufficiently
stable for experimentation though.

Next cycle will look into some performance aspects of tabling, and
notably in sharing tables between threads.

Enjoy --- Jan

P.s. Mac binaries will be uploaded later. Ubuntu PPAs failed to build. As the server also did not produce a build log it is unclear what is wrong and whether this is a problem with the upload or the PPA build service itself.

SWI-Prolog Changelog since version 8.1.9

  • DOC: Introduction updates

  • DOC: Updated the abstract

  • MODIFIED: raise errors on undefined command line arguments. Also,
    the first non-option argument is considered a source file, regardless
    of the extension or content.

  • FIXED: Do not try to recompile out-of-date installed QLF files.

  • ADDED: shared table declarations

  • DOC: New trie primitives

  • ADDED: trie_gen_compiled/2, dealing with tries that only represent
    a set.

  • ENHANCED: compiled tries to speedup answer generation from tabling
    and provide logical update view semantics for incremental tabling.
    The current implementation is rather rough and will be refined in
    the near future to reduce memory usage and improve performance.

  • FIXED: avoid discontiguous warnings for tabling with answer
    subsumption.

  • FIXED: table/1: avoid discontiguous warnings. Edison Mera.

  • ADDED: tracing/2.

  • FIXED: Avoid deep indexes on arguments that have variables. Creating
    was already blocked in 21ea5db738debce45d7ff544f088b3cfe631a252, but
    adding new clauses could still lead to this situation. This change
    also deletes the argument old assessment together with the index,
    so we re-assess how to index an argument after adding a variable to
    a list or resizing outside the bounds. Finally, it fixes several
    issues in cleaning nested indexes.

  • FIXED: swipl-ld: possible buffer overrun. As this is just a helper
    program for building foreign extensions for Prolog this is not
    a serious security risk.

  • CLEANUP: silence gcc 9 (benign)

  • FIXED: do not include resources defined using resource/2 in runtime
    saved states

Package clib

  • PORT: process_create/3: Windows handling for stream(Stream) option

  • TEST: Make process stream test immune to white space output from
    wc. Also removes the shell as intermediate from this test.
    Joost Geurts.

  • ADDED: process_create/3: stream(+Stream) value for the inputs and
    outputs, adding ability to pass a handle to an open filed to a process.

Package ltx2htm

  • FIXED: clean names for sequences of special characters.

Package odbc

  • FIXED: Deal with empty result set.

  • TEST: Make test_odbc.pl work with the sqlite3 ODBC driver.

  • FIXED: Avoid failure on SQL_NO_DATA_FOUND replies for update queries.

  • ADDED: odbc_next_result_set/1 to ODBC to fetch data from subsequent
    result sets. MODIFIED: Statements prepared using odbc_prepare/5 with
    the option fetch(fetch) must now be explicitly closed or freed.

Package semweb

  • FIXED: RDF predicate cloud merging

  • ADDED: rdf_load/2: option multifile(+Boolean) to indicate that multiple
    sources may be loaded into the same graph.

Package xpce

  • MODIFIED: interaction with command line arguments to allow Prolog to
    raise errors on undefined command line arguments.

  • FIXED: graphical tracer binding window: avoid scrolling when selecting
    a binding in scrolled state.

  • FIXED: completion in class prolog_predicate_item (ERROR: Type error:
    atom' expected, foundC’dict’’ (a reserved_symbol_reference)

  • FIXED: Deal with new trace/1,2 implementation.

  • PORT: Avoid conflict between X11 String and XPCE’s String type.
    Used to have a hacky work-around, but that no longer stopped gcc 9
    from raising warnings. Now renamed to PceString.

  • FIXED: Prolog navigator: avoid ‘$qlf_info’/8 and use more robust
    ‘$qlf_sources’/2.

4 Likes