Terrance Swift, CENTRIA, Universidade Nova de Lisboa, Portugal
Version 3.2 (Kopi Lewak) is a major rewriting of XSB that includes new functionalities and significantly improves XSB’s stability and speed. Some major improvements for Version 3.2 are:
Constraint libraries
While XSB has long supported attributed variables and constraint handling rules, it has been missing constraint libraries for the past few versions. Version 3.2 includes both CLP(R) and a simple finite domain range solver. Constraint evaluation is private to each thread.
Improved tabling with call subsumption
Call subsumption now supports evaluation over the full well-founded semantics as well as supporting attributed variables in answers. In a multi-threaded environment call subsumption is fully supported for private tables, and is more scalable than in version 3.1.
Compatibility with ISO Standards
Core ISO Standard: XSB is now in closer accord with the core ISO standard particularly in its handling of arithmetic expressions and exception handling for various ISO predicates.
Core Revision: ISO predicates call_cleanup/2, call/[2-10], evaluable functions >
Improved compatibility with other Prologs
XSB’s atom-based module system has different behavior than the predicate-based module system of most other Prologs, but in most cases XSB now supports the syntax common to most module systems. Explicit module calls using :/2 are supported in most places.
Limited support for statistics/2 is also now available. time/1 also added, for compatibility with SWI and YAP. Also, multifile now fully supports dynamic and static predicates.
Speed Improvements
XSB’s arithmetic is now much faster as well as throwing errors that are more ISO-compatible. Compiler changes were made to exploit determinism in conditional tests. In addition, speed improvements were also made to assert/1, trie_assert/1, retract/1, retractall/1, and call/1.
Improvements to 64-bit evaluation
64-bit XSB now runs properly on Macs (in addition to Linux).
Improvements in the multi-threading
The MT engine has been made more stable and efficient overall, for both non-tabled and tabled code.
For private tables Version 3.2 provides greatly improved scalability. For shared tables under local evaluation (shared completed tables), more concurrency is now possible and fewer thread wake-ups now occur.
In addition to public message queues, private message queues and signal queues are now supported. In addition, predicates thread_property/2, threads/0 and thread_peek_message/1 are now supported.
Foreign-Language Interface
Changes now allow XSB and C to call each other recursively, both in the single-threaded and the multi-threaded engines.