# Ann: SWI-Prolog 8.1.10

**URL:** <https://swi-prolog.discourse.group/t/ann-swi-prolog-8-1-10/972>\
**Category:** Releases\
**Created:** [July 19, 2019, 1:41pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-8-1-10/972 "2019-07-19T13:41:08Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [July 19, 2019, 1:41pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-8-1-10/972/1 "2019-07-19T13:41:08Z")

</div>

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, found`C’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.
