XSB Changelog

What's new in XSB 3.5.0

Jul 7, 2014
  • Enhancements:
  • XSB's character-level I/O has been significantly rewritten and expanded. It now supports as encodings UTF-8, CP-1252, and LATIN-1; with UTF-8 as the default encoding on UNIX-style systems, and CP-1252 as the default encoding on Windows sytems. Various ISO predicates regarding encodings are also supported such as character_set/1. Finally, other character-based I/O predicates such as get_XXX, peek_XXX, and put_XXX have been thoroughly rewritten and should be both ISO-compliant and more efficient.
  • XSB now has an alternative means of tabling ground structures called "hash-consing" or "interning". This feature can greatly improve performance when tabling is used for structural recursion.
  • XSB now cleanly compiles under the latest version of Mac OSX which uses LLVM's clang compiler.
  • XSB's incremental tabling now fully supports view consistency for tables that have been updated. Incremental tabling has also been extended to allow abstraction of dynamic predicates in the call graph. Finally, a number of bugs in incremental tabling have been fixed.
  • XSB's compiler has been extended so that XSB can be used as a preprocessor extending GPP
  • Various predicates have been added: a platform-independant built-in predicate epoch_seconds/1, and module_of_term/2. XSB's concat_atom/2, a generalization of the ISO atom_concat/2 now also can be used to split atoms.
  • A new library, prolog_db supports efficient meta-programming.
  • Radial restraint is now available when XSB is embedded into a process.
  • Bug fixes:
  • XSB now handles file paths that include spaces on Unix.
  • Various fixes have made answer subsumption more robust.
  • thread_sleep/1 now accepts seconds as per draft standardization proposal. The at_exit/1 thread handler has been changed so that its success, failure, or error doesn't affect the thread exit status. Finally, a bug in handling exceptions resulting from thread cancellation using a throw/1 signal has been fixed.
  • Made XSB's use of gpp safe for cyclic #include statements.
  • Various fixes for Prolog-based conditional compilation.
  • Better indexing when loading forest logs. A new option, partial logging is now also supported.
  • format/[2,3] changed to better handle escaped characters.

New in XSB 3.4 (Jul 5, 2013)

  • Enhancements:
  • A new approach to bounded rationality within tabling, termed radial restraint, can be used to ensure sound (with respect to the well-founded semantics) termination of programs even when they contain function symbols and have infinite models. Radial restraint works by abstracting answers that exceed a given depth and making the truth value for these answers undefined, and can be declared on a per-predicate basis.
  • A new builtin, u_not/1 assigns the truth-value undefined to non-ground negative subgoals, rather than throwing an exception. In various other cases, such as with arithmetic computation errors, a goal can optionally be set to undefined rather than throwing an exception.
  • New builtins support better inspection of the state of tables, even while these tables are being computed.
  • get_incr_sccs_with_deps/[2,3] produces a Prolog representation of the dependency graph of incrementally tabled subgoals, including strongly connected components information and dependencies among these components.
  • A similar predicate, get_residual_sccs/[3,5] provides an analogous view of atoms of the residual program whose truth value is undefined under the well-founded semantics. In addition, the predicate explain_u_val/2 can be used to explain why an atom is undefined: because of negative loops, radial restraint, or some other reason.
  • Subgoal abstraction is now supported on a per-predicate basis.
  • Added ISO predicate halt/1
  • XSB's ODBC interface now has a predicate to return all available drivers.
  • Bug fixes:
  • A bug was fixed that prevented XSB from properly initializing when configured with a long path name under Windows. XSB also requires less space to start up under Windows than it did previously.
  • Various fixes for bugs that occurred when copying into or out of a table either large answers, or answers with a large number of variables, or answers with large delay lists.
  • Various bugs involving attributed variables were fixed: when delaying the evaluation of tabled predicates via the when library, and in certain cases where attributed variables occurred in dynamic code. Finally, listing now prints out attributed variables correctlly.
  • Various bugs were fixed that occurred in error handling during heavily tabled computations, such as when thorwing an "maximum subgoal depth exceeded" exception on very large subgoals, or when throwing over incomplete incrementally tabled subgoals. Also error handling was improved when a term to be interned exceeds a maximal user-defined depth.
  • Various small bugs were fixed for forest logging. Forest logging now can print much larger terms than previously, and prints error terms more concisely.
  • Several small bugs were fixed for answer subsumption.
  • XSB's tracing now uses writeq/2 for easier copy and paste while tracing; also, a bug was . fixed when consult ([]/2) is called within XSB's tracing.
  • Bugs were fixed in abolish/1 in atom_chars/2, atom_codes/2 and in load_dyn/[1,2]

New in XSB 3.3.7 (Jul 5, 2013)

  • Enhancements:
  • The incremental tabling subsystem have been improved in various ways. The subsystem now fully supports handling of conditional answers (i.e., answers that are undefined in WFS). Updates of incremental tables can now be done lazily whenever a tabled subgoal is re-called: an explicit call to a table update routine is no longer necessary. In addition, the XSB API has been restructured to be more consistent, and several of the API routines have been moved into C.
  • XSB's profiler now supports detection of calls that do not properly use a predicate's indexing.
  • XSB's forest logging now profiles tabled negation, including delaying and simplification. In addition, several new routines have been implemented that provide in-depth analysis of the logs.
  • A new XSB flag allows information about incomplete tabled subgoals and their SCCs to be written to a file upon throwing an exception, which can aid in debugging.
  • Several new built-ins have been added.
  • ground_and_acyclic/1 is now available.
  • check_variant/1 can efficiently check whether the variant of a goal exists in trie-indexed dynamic predicates.
  • find_n/4 acts as findall/3 but returns only the first n solutions to a goal.
  • XSB's table_dump library now distinguishes between answers whose truth value is "true" and those whose truth value is "undefined".
  • Error handling routines have been improved, especially when printing out cyclic or large terms.
  • XSB's configuration now supports compilation with cilk.
  • Bug fixes:
  • On Windows, XSB is automatically configured so that Windows allocates a larger default call stack, removing a class of Windows-specific errors.
  • A number of bugs have been fixed that together make XSB more robust for very large and heavily tabled computations. Among these, XSB better manages when an exception is thrown over the point of creation of an incomplete table: previously this could cause a core dump under certain situations, while now all such situations are detected and handled properly.
  • XSB handles updates to an incemental table that has active choice points without core-dumping, as it sometimes did in previous versions.
  • call_cleanup/3 is now properly called when an exception is thrown over a goal to be cleaned up, or when early completing a tabled subgoal.
  • Bugs in cyclic term handling that were present on 32-bit Linux are now fixed.
  • Other bug fixes include the following. There were various fixes to small bugs in answer subsumption, particularly relating to compilation. A fix was made to tabled negation when all conditional answers to a goal have been removed by simplification. Handling of floats by number_codes/chars was improved. A bug in get_residual was fixed, which arose when displaying a conditional answer with a large number of variables in its delay list. Finally, a number of small bugs in handling large (boxed) integers have been fixed.

New in XSB 3.3.6 (Jul 5, 2013)

  • New features:
  • Call Abstraction is now fully implemented for fixed-order stratified programs. The use of call abstraction can ensure termination for all programs with finite models.
  • A new flag unify_with_occurs_check can be set so that XSB's core engine performs full unification for all resolution operations (including tabling).
  • A new predicate, timed_call/3, allows a goal to be executed and repeatedly interrupted every n milliseconds with a handler. During a long computation timed_call/3 can be used to repeatedly reporte on the system state, to dynamically alter heuristics, or to enforce resource limits (a more specialized predicate, bounded_call/[3,4] is also available.)
  • New predicates and evaluable functions have been added to support the draft ISO core revision including ^/2,div/2, xor/2, acyclic_term/1 and subsumes_term/2. (XSB already had most, but not all, of these predicates and functions under non-ISO names.)
  • Another new flag can be used to limit XSB's memory consumption to a preset amount. Using an internally set memory limit, rather than the system memory limit, can be important when XSB is used with Java through Interprolog or is embedded into a C or Java program.
  • Various other new predicates have been added to XSB. print_incomplete_tables/[0,1] can be used to aid debugging. term_size/2 and term_size_limit/2 efficiently determine the size of a term.. The various forms of the table_dump predicate now display the number of calls to a tabled subgoal along with SCC information for non-completed subgoals.
  • Important bug fixes and enhancements:
  • Fixed issue where XSB was not being configured correctly for Linux kernals 3.*
  • XSB now performs unification of cyclic terms. In addition, tnot/1, sk_not/1, abolish_table_call/1, atom_chars/2, and atom_codes/2 are now cycle safe. The predicate ground_or_cyclic/1 provides a cycle-safe groundness check.
  • Improvided compilation time for files with very large numbers of predicates. Improved performance times for tnot/1, is_cyclic/1, and subsumes_term/2.
  • Added optional depth check for interned tries. Improved robustness of exception handling for depth-checks in tables and tries and for memory-overflow exceptions. Made exception handling for several ISO predicates more consistent with ISO specifications.
  • Profiling is now enabled for 64-bit Windows.

New in XSB 3.3.5 (Jul 5, 2013)

  • The port of XSB to 64-bit Windows has been hardened so that XSB can call external C functions, and its configuration process has been improved.
  • The initial version of a new tracing facility for computations, called forest logging is now available for use.
  • A new predicate, called table_dump/[1,2,3] allows easy introspection of XSB's tables. In addition, new builtins is_cyclic/1 and term_depth/2 are now available.
  • Configuration of the latest version of XSB on the latest version of Cygwin is now working again.
  • Numerous bug fixes and specialized enhancements, the most widespread of which were: Improving the module inferencing used by XSB's compiler; improving XSB's exception handling when large computations use all available memory; improved messages for term depth exceptions; improved compilation times for files/modules with a large number of predicates.

New in XSB 3.3.4 (Jul 5, 2013)

  • XSB now includes a Java-based installer for Windows 32- and 64-bits, and for several varieties of Linux.
  • XSB now allows a compiler option indicating that the input file is canonical, which can improve the speed of compilation of files in canonical form by 10-20\%.
  • New flags allow users to automatically fail, warn, or throw an error whenever trying to add to a table an answer whose depth is above a given threshold. Separate flags are provided for lists and non-lists.
  • Garbage collection time for abolishing tables is now maintained for statistics.
  • load_dyn/[1,2] can now dynamically load a file into a module.
  • Several bug fixes, including the following. An obscure bug in handling unsafe variables. A bug that sometimes occurred when adding conditional answers with answers in the head but not in the delay lists. Arrays used in interning an answer or trie term with a very large number of variables, are now expanded when necessary.
  • Minor changes were made to make errors that have to do with tabling show the actual call that generated the error, rather than just the predicate.