Release Notes
Version 3.3 (Pignoletto)
Version 3.3 is a major rewriting of
XSB that includes several new packages and significantly improves
XSB's functionality and stability. Some of the improvements for
Version 3.3 are as follows.
The CURL Package
The curl package is an evolving interface to
the libcurl library. libcurl supports numerous protocols, including
FTP, HTTP, SCP, and many others; it also supports SSL certificates,
HTTP POST, HTTP PUT, FTP uploading, proxies, cookies, user+password
authentication (Basic, Digest, NTLM, Negotiate, Kerberos4), file
transfer resume, http proxy tunneling etc. The CURL package is also
now an underpinning for XSB's xpath and sgml packages.
The PITA Package
Probabilistic Inference with Tabling and
Answer subsumption (PITA) is a package for uncertain reasoning. In
particular, it allows various forms of Probabilistic Logic Programming
and Possibilistic Logic Programming. It accepts the language of Logic
Programs with Annotated Disjunctions (LPADs) and CP-logic programs,
along with Prism-style programs. PITA computes the probability of
queries by tranforming the input program into a normal logic program
and then calling a modified version of the query on the transformed
programs.
Answer Subsumption
Predicates can now be declared to be tabled with answer subsumption
using arbitrary partial orders or lattices. In addition to improving
the interface to answer subsumption the underlying implementation is
now far faster than in previous versions.
The RDF Package
RDF is a W3C standard for representing
meta-data about documents on the Web as well as exchanging frame-based
data (e.g. ontologies). RDF has a formal data model defined in terms
of triples. In addition, a graph model is defined for visualization
and an XML serialization for exchange. The XSB PDF package is an
adaptation from SWI Prolog.
Tabling and System Enhancements
- New
declarations: table preds as properties
and dynamic preds as properties.
Since XSB allows a variety of tabling functionalities, new
declarations have been added to allow users to specify properties more
succinctly for tabled and dynamic predicates. Tabling properties can
now be dynamically changed in certain cases (i.e., from call variance
to call subsumption and from non-incrmental to incremental).
- The XSB compiler can now support multiple external preprocessors,
and so can more easily support language extensions that are translated
into Prolog.
- Incremental tabling is extended so that tables can be updated
based on changes to trie-interned facts
- abolish_table_call/[1,2] is now implemented for
predicates that use call subsumption.
- A depth check for tabled subgoals, settable by a flag, can help
catch programs for which XSB's tabling may not terminate.
Other Libraries
- The Perl-Compatable Regular Expressions Library (PCRE) This
package employs the PCRE library to enable XSB perform pattern
matching and string substitution based on Perl regular expressions.
- The proc_files library allows XSB to load, store,
and manipulate files in delimiter-separated formats (e.g. csv
files).
- The xref library can be used to build a database of
predicate definitions and usages among various files in a directory.
Compatability Improvements
Various changes improve XSB's compatability with other Prologs
- Support for the Prolog Commons Initiative. Conditional
compilation is now supported, as is predicate renaming throught
the import as construct.
- Support for the ISO Core and Core Revision Standards. The
ISO include/1 predicate is now supported, forall/2
now implemented, ground/1 is now standard (and faster), new
arithmetic functions have also been implemented,
and meta_predicate/2 is now supported.
- Other compatability measures. XSB-specific flags are now
available as Prolog flags, and new non-ISO flags have been added that
are common to other Prologs. statistics/2 has been
implemented for various tags, and findall/4 is now
implemented and standard. The functionality
of predicate_property/2 has been expanded to include the
module of a predicate, along with various tabling properties.
Stability Improvements
Numerous bug fixes and enhancements
improve the robustness of XSB. Areas of concentration include: call
subsumption, attributed variables (tabled and non-tabled),
multi-threading (including support for XSB packages under
multi-threading), complex reasoning with tabled negation, incremental
tabling, the mysql interface, and backtrackable updates.
In addition, various efficiency improvements have been made that
affect arithmetic expressions, all solutions meta predicates, interned
tries, and querying XSB as an embedded program.
Version 3.2 (Kopi Lewak)
Version 3.2 is a major rewriting of XSB that includes new
functionalities and significantly improves XSB's stability and speed.
Some of the improvements for Version 3.2 are as follows.
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, and handlers are available whether XSB is called
from the command-line or embedded on a process.
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 in its handling of arithmetic expressions and exception
handling for various ISO predicates; in addition sub_atom/5 and
char_code/2 are now implemented, as are evaluable functions **/2
and sign/1.
-
Core Revision ISO predicates call_cleanup/2,
call/[2-10], evaluable functions '><'/2 and arithmetic constants
pi/0 and e/o are now implemented. The built-in predicate
predicate_property/2 now supports the property "built_in". In
addition, user_error, user_warning, and user_message stream
aliases have been added.
-
Draft ISO Multi-Threading Standard Aliases for ISO-style
mutexes are now better supported, and thread_create/2 allows
specification of an on_exit handler.
Improved compatibility with other Prologs and installation
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.
module/1 is now synonymous with export/1 and use_module/2 is now
synonymous with import/2. 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.
In addition, XSB is now easier to install as a package on Mac OS
X.
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).
Boxed floats on 64 bit port give floating point computation that
is fully IEEE compatible. read_canonical/[1,2], and
fmt_write/[1,2] now work for 64 bits. max_integer and
min_integer are now correct in 64-bit evaluation.
Improvements in 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. Code is also more robust in
(pathological) cases of cascading usurpations.
In addition to public message queues, private message queues and
signal queues are now supported. All queues in the MT engine are
now more stable. thread_sleep/1 is now cancelable i.e. sleeping
threads may be cancelled. 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.
Interned Tries
XSB allows efficient interning of terms within trie data
structures. A new API for interned tries is now available that
supports both thread-private and thread-shared tries, and allows
for different levels of (safe) memory management when terms are
deleted from tries.
XASP package
The Smodels engine is now distributed with XSB making XASP
installation easier. XASP is now more stable on cygwin and some
elements of XASP are thread safe.
dbdrivers package
The dbdrivers package now supports embedded mysql, so that XSB
can be configured to directly call mysql without requiring a
separate mysql driver. Memory leaks also fixed for dbdrivers
package.
Profiling
XSB's profiling now has primitive functionality for determining
what modes (and how many times) a call is being made.
random.P
Generation of weibull, exponential, and normal distributions is
now supported.
Memory management
string garbage collection Heuristics changed to avoid
unnecessary calls
table garbage collection has more thorough reclamation of
abolished table space. In addition, table garbage collection now
checks delay lists so that garbage collection within
non-stratified queries is safer.
Garbage collection of retracted dynamic clauses works better and
faster, and heap garbage collection is more stable.
Version 3.1 (Incognito)
Version 3.1 is a major rewriting of XSB to new functionalities and
improve XSB's stability, particularly for the multi-threaded engine
Major Improvements
-
64-bit compilation Both the single-threaded and multi-threaded
engines of XSB have been thoroughly tested on 64-bit Linux. All XSB
functionality and packages now work when XSB is compiled on such
platforms using either 64-bit or 32-bit compilation.
- Incremental tabling Incremental tabling has been added
for programs that use tabling with call-variance on program
fragments that do not require tabled negation. If a table depends
on dynamic code (perhaps indirectly) asserts or retracts to the code
will propagate incremental changes to the various depending tables.
Thus the tables are updated automatically and incrementally with
respect to changes in fluents, rather than having to be explicitly
recomputed.
- Multi-threading improvements The multi-threaded engine
is faster and far more robust than in previous versions. Libraries
have been expanded for the multi-threaded engine as well.
- A single query can now safely intermix private and shared
tables, even if can depend on each other in the same SCC or depend
through conditional answers in the well-founded semantics.
- Heap garbage collection now can occur for any thread independently
of any other thread.
- Improvements have been made for thread, mutex, and message queue
management, usually based on ISO working document ISO/IEC DTR
13211{5:2007} with which XSB is now mainly in compliance:
- Private and shared unification-based message queues are now
supported, user-level mutex are now supported, as are
thread, mutex, and queue aliases.
- Thread creation allows a number of parameters to be passed
in via an option list, or alternately taken from settable
defaults. In addition, thread cancellation now cancels
threads when they are waiting for messages or are blocked on
I/O.
- Specific to XSB, examples have been added so that XSB can used as
a multi-threaded server with socket-based communication. The
regexp, wildmatch, and libwww libraries have been ported to the
multi-threaded engine.
- Improved C-calling XSB interface
- XSB now behaves better when embedded in a C process. When XSB
encounters an error, it uses a mechanism to pass the error
back to C. Errors that cause XSB to exit when called as a
stand-alone server have the type "unrecoverable error".
- Query caching has been added to the C/XSB interface to make
repeated queries to XSB more efficient.
- The C-calling XSB interface has also been updated for the
multi-threaded engine so that a given XSB thread can be safely
queried by multiple C (or Java) threads, a facility that works
for the varstring, fixed string, and register interfaces.
Within a multi-threaded system XSB threads can maintain the
state of queries if desired so that they function analogously
to cursors in a database.
- Improved memory management for tables
- When a given tabled subgoal (predicate) T1 is abolished, any
tabled subgoal (predicate) T2 that depends conditionally on
T1 will also be abolished by default (this behavior can be
altered by a flag, or by using an option list).
- All space for conditional answer information is now reclaimed
when space for a tabled predicate or subgoal is reclaimed
after an abolish or simplification operation. In addition,
all information for private tables, including conditional
table information is thread-private, and is reclaimed upon a
thread's exit.
- Added structure manager for private hash tables in tries. In
addition, each shared structure manager now has its own mutex
in the multi-threaded engine. These changes should improve
scalability of tables in the shared engine.
- Detailed statistical information is not available on all
table structures, including those for conditional answers.
In the multi-threaded engine, this information is available
for both shared tables and tables private to the calling
thread.
- Two new predicates are added for table management in the
multi-threaded engine: abolish_all_shared_tables/0 and
abolish_all_private_tables/0.
- Improvements to dynamic clause garbage collection
- Dynamic clause garbage collection for private dynamic
predicates now uses private structure managers to improve
concurrency for retracting private clauses.
- Dynamic clause garbage collection has been tuned to be more
efficient for routines that call retract(all) repeatedly.
- Improved ISO compatibility for numerous cases of error handling. With
relatively minor exceptions, XSB now generally throws ISO-compliant
errors for ISO predicates.
- Improvements in Interned Tries Library XSB provides interned tries
as an extremely efficient way of adding and deleting terms to a global
store (private to each thread):
- The API for interned tries was redesigned to make it simpler to
use, and in some cases more efficient. Error checking has been
added to make the library more robust.
- To check whether a trie may be backtracked over before deleting a
trie, or expanding its hash table.
- New syntax for tables allows concise declarations of various attribute
combinations, including whether the predicate is to use call
subsumption or call variance, is dynamic or static, is private or
shared, and is incremental.
Other Improvements
- XSB's compiler now make XSB's compilation much faster for files
with large predicates, as well as when compiling strings. In
addition, generated code now has fewer instructions in some cases.
- XSB's canonical term reader significantly improves the time to
dynamically load a canonical file.
- Register allocation works better when asserting large clauses.
- Allocation of memory for sorting routines -- this improves times
and concurrency of programs that use sorting heavily, such as
set-based analysis.
- Added a constraint library allowing variable ordering, when/2, and
unifiable/2.
- Added exp/2 as an evaluable function.
- Basic term coloring and other syntactic features are supported for
the editor BBEdit.
Bug fixes
- Heap overflows when copying large terms out of a table are now
uniformly caught, as well as pdl stack overflows when copying large
terms into or out of a table.
- Heap overflows during compilation of large clauses are now
uniformly caught.
- Cases are now handled properly where a mixture of table
abolish predicates are called on similar tabled predicates and
subgoals that are not ready to be reclaimed. Similarly, repeated
abolishes and re-generation of tables in computation states where
their space cannot be reclaimed is now handled properly.
- Garbage collecting dynamic clauses on predicates with multiple or
combined indices is now handled properly
- The number of string interns used on reads and other
actions has been reduced, a change useful for thread scalability.
- Problems with error handling stemming from reloading the
system file standard.P are now avoided.
- Buffer overflows in file_read_line_list/[1,2] are now avoided
under all conditions
- Errors in loading large compiled Flora files are now avoided.
- Problems with handling streams in the format library are now
fixed.
- Performing simplification of shared tables in the
multi-threaded engine is now mutexed properly.
- FreeBSD is now recognized in higher-level XSB calling C interface
- Calls to the atom-table garbage collector are now avoided when
more than one thread is active.
- Bugs in performing heap garbage collecting under certain
conditions when constraint interrupts have been scheduled but not
executed have now been fixed.
- Numerous small memory problems have been fixed in the various
engines as exposed by Valgrind. These fixes particularly improve
the stability of applications that may use conditional answers,
such as Flora.
- Fixed debugger to work properly with CHR programs.
- Fixed bug in handling lists in unify_with_occurs_check/2.
Version 3.0 (Sagres)
General
Version 3.0 is a major rewriting of the XSB engine to support
multi-threading and to include many new and improved features.
Major New Functionality
- The XSB engine has been entirely rewritten to allow a user to
create and run multiple XSB threads within a single process on both
Unix and Windows. Thread manipulation is based on the semantics of
Posix threads, and includes major Posix-style operations such as
detaching, joining, and canceling threads. The engine has been
designed to allow hundreds of threads to execute concurrently,
including asserting and retracting dynamic code, creating and
abolishing tables, and performing I/O. To support this, dynamic
predicates and tables are considered to be thread-private by
default, but may also be declared to be shared among threads when
appropriate.
- Improved garbage collection routines have been written to
reclaim space for dynamic clauses, SLG tables, and Prolog atoms.
Garbage collection for thread-private dynamic clauses and tables,
can occur concurrently in multiple threads.
- XSB now supports 32-bit integer and 64-bit float computation by
default.
- A new package, CHRd has been added. CHRd is an alternative
implementation of Constraint Handling Rules, which uses a
distributed storage of constraints and a set-based operational
semantics. The distributed storage of constraints can lead to
efficiencies when tabling predicates within a CHR framework.
Other Functionality
- A number of changes have been made to make XSB more compatible
with the ISO standard for Prolog. Changes have been made to XSB's
scanning of atoms and numbers, exception handling, and to handling
of undefined predicates. In addition, Version 3.0 includes the new
ISO
predicates unify_with_occurs_check/2, atom_length/2
and initialization/1 .
- The compiler now generates more efficient code for
deterministic tests within conditionals.
- Several changes have been made to support (non ISO)
compatibility with other Prologs.
- XSB's compiler and consult mechanism now recognizes files
with a .pl extension as well as a .P extension.
- Clauses for dynamic predicates can now be included in
statically compiled files.
- min/1 and max/1 are now included as arithmetic
functions.
- The following predicates provide new functionality beyond that
discussed.
- term_to_atom/3 allows an atom to be created from a term
using the write options familiar from write_term/3.
- statistics provides a much more detailed
account of how program memory is used.
- New predicates, abolish_module_tables/1,
abolish_private_tables/0,
and abolish_shared_tables/0 allow greater flexibility
for invalidating tables for sets of predicates.
Version 2.7.1 (Kinryo)
Version 2.7.1 is a minor release whose main changes are to support the
tagging required by newer versions of Linux, as well as to support
foreign language calls and packages on the Apple Macintosh. Other bug
fixes and functionality improvements have also been made.
- A new tagging scheme has been created to handle tagging on newer
versions of Linux. The choice of tagging is made automatically by
XSB's configuration mechanism.
- The XSB/C foreign language interface is now supported under
Macintosh OS X. In addition, fixes have been made to perlmatch
regmatch, and wildmatch to support these packages on OS X. These
patches were submitted by Barry Evans.
- ODBC Package: Added odbc_sql_cnt/4 predicate to be used to call
an Update, insert, or delete SQL statement. It returns the
number of affected rows in the fourth parameter of the call. Also
added support for use of iodbc (www.iodbc.org) driver manager.
- Fixed bug in setof in handling variables in template and
patterns. The fix was submitted by Bart Demoen and Kostis
Sagonas.
- .cpp files can now be compiled, loaded and called from XSB.
- Changed write_canonical to write more complete floating point numbers.
- New packages sgml and xpath have been added. The sgml package can parse
XML, HTML, and even SGML; it is adapted from SWI Prolog.
The xpath package supports XPath queries to XML documents.
Version 2.7 (Kinryo)
General
Version 2.7 has many fixes to bugs and improvements to packages and
libraries.
Major New Functionality
- The Constraint Handling Rules package includes both a
CHR runtime system and a compiler to convert CHR files to
Prolog files. This packages allow CHR to be used with tabling, and
includes several sample CHR solvers that have been ported to XSB.
-
ISO-style streams are now supported by all XSB file I/O.
Streams can be used to access strings and pipes as well as files,
and the distinction between I/O streams and I/O ports has been
removed. New I/O and other predicates to support ISO functionality
have also been added.
-
The dbdrivers package provides functionality to manage multiple
drivers and databases from XSB, and currently supports ODBC
and mysql drivers.
-
XSB now has the capability to determine the proportion of
time spent in each predicate and module via the XSB Profiling
library.
-
XSB now prints out the forward and backward execution stacks
upon unhandled errors, allowing for better debugging. This facility
is on by default, but can be turned off using an XSB flag.
-
A new faculty xsb_lint has been created to
help determine which predicates must be exported and imported into
files upon modularization. Through the statements
document_export/1 and document_import/1, Version 2.7 also
supports "pseudo-modules". Such files act as are regular files in
terms of execution, but their declarations are used by
xsb_lint, xsbdoc and the compiler's use inference pass.
Other Functionality
-
Functionality for use inference, a part of XSB's compiler has
been expanded. Use inference now checks standard meta-predicates
(e.g. findall, assert) for usage.
-
The predicate parsort/4 has been added to provide
efficient and flexible sorting. It can sort different argument
positions of predicates lexicographically, in either ascending or
descending order, and either eliminate duplicates or not.
-
A new built-in set_file_write_depth/1 controls the depth of
terms printed by standard I/O built-ins.
-
Improvements have been made to the compiler for efficiency,
and several bug fixes have been made to compiling and parsing. In
addition, singleton_warnings_off a new compiler option
suppresses singleton warnings by the compiler, and so is useful for
code generation.
-
Improvements have been made to the ODBC interface, to allow
multiple ODBC connections, to allow querying of information about
the ODBC connection itself, and to allow data to be retrieved as
character lists rather than as atoms.
-
XSB disassembler output is now readable by Prolog.
-
Predicates defined within a module, but not exported can be
called from outside that module using the call Module:Call.
The predicate @=/2 has been added that succeeds if two terms
are identical variables, or if the main functor symbols of two terms
to be compared are identical, and fails otherwise.
-
Improvements have been made to memory management, to better
integrate heap garbage collection and heap stack expansion.
Selected Bug Fixes
-
Java 1.4.2 introduced some incompatibilities in memory
management which broke InterProlog. This has been fixed in this
version. In addition, parameters may now be passed when invoking
XSB from Java.
-
The GPP pre-processor has been updated. Most notably among the
new functionalities is that #include can, now, take a macro as an
argument.
-
XSB's stack reallocation is now aware of attributed variables
and interrupt handlers.
-
An inconsistency in the handling of declarations has been
fixed. The inconsistency involved different handling of predicate
names declared as P/A and P(_,_,_,...).
-
message/2 has been fixed to properly deal with a list as
its 1st argument.
-
A long-standing register allocation bug in the compiler is now
fixed.
-
Optimizations and bug fixes have been made to the XASP Smodels
interface.
-
Various error fixes and improvements made to xsbdoc.
Backward Incompatibility
-
The implementation and interface of attributed variables has
been changed to fix several inconsistencies and to allow attributes in
different modules. These changes were necessary for the CHR
implementation and made the CLP(R) implementation unavailable. CLP(R)
style handling is available through CHR solvers included in the CHR
package.
-
The Oracle interface is no longer supported. Its functionality
can be obtained through either XSB's ODBC interface or through the
new dbdrivers package.
Version 2.6 (Duff)
General
Version 2.6 contains a number of changes, including new packages and
libraries for generation of manuals from code documentation and for
answer set programming. Version 2.6 also allows a user-modifiable
extension for byte-code files, whose default .xwam extension replaces
the previous .O extension. Existing features Version 2.6 have been
improved in various ways, from better exception handling, to a more
robust Windows implementation, to numerous bug-fixes.
News
-
The Chat engine has been removed. An optimized version of the
SLG-WAM is now the single engine supported in XSB. The garbage
collectors have been ported to this engine.
-
Various aspects of XSB have been rewritten to support an
ISO-compatible error handling mechanism in which exceptional
conditions can be caught and handled by user programs.
-
Fixed-depth indexing has been added for dynamic predicates.
Using fixed-depth indexing a term in a given arguments may be indexed
on the first five non-variable symbols. Multiple-argument and
alternative indices also work with fixed-depth indexing just as they
do with outer functor indexing.
-
Full-word integers are now supported in XSB via an implementation
of boxed integers.
-
Date and time routines have been added as standard
predicates.
Packages and Libraries
-
A new package, xsbdoc, has been added. xsbdoc supports a
"literate programming" style, in which code-level comments can be used
to generate manuals. It is based in part on Ciao system's lpdoc.
-
The XASP package provides an efficient interface to SModels from
XSB. It is a significant rewrite of the previous SModels interface.
-
An ODBC interface to MySQL is now supported under Linux. In
addition, Prolog terms can now be written to and read from database
strings.
- A new library, stdscan.P is provided containing a configurable
scanner for text parsing.
-
Updates to the major packages, including Flora-2 and XMC.
Platform stabilization
-
Stability of XSB on Windows has been improved in many ways,
both when XSB is compiled with Cygwin/GCC, and when compiled by
native windows compilers. These changes include a better
configuration mechanism for Windows, a robust XSB-calling-C
interface, and better support for gpp preprocessing of Prolog files.
In addition, many standard and library predicates have been
stabilized for Windows, including cputime/1, directory query
routines, path and file handling, the format.P library, and others.
-
The build process has been fixed for 64-bit MIPS machine. XSB
should be easily portable to most 64-bit machines.
Bugfixes
-
Several bugfixes have been made for the CLP(R) package, including
expansion of math functions to include min/1, max/1, and pow/2.
-
Hashing function have been changed to provide better indexing of
longish strings.
-
Various bugs in pathname handling were fixed, and differences in
pathname handling between Unix and Windows were minimized.
-
Bugs closed since last release (see Bugs
for more information): #585031, #569972, #723875, #535270, #683785,
#666940, #637782, #635399, #524348, #626921, #449237, #706145,
#641852, #638830, #642024, #535257, #529566, #475363, #589668,
#531264
Backward Incompatibility
-
The object files now have the .xwam extension instead of the .O
extension.
-
The xsb_undefined_predicate_hook has been
deprecated. Instead, XSB now throws the exception of the form
error(undefined_predicate(Name,Arity,ModName),ErrorMessage)
when an undefined predicate is called. This exception can be caught
and appropriate action can be taken.
Version 2.5 (Okocim)
General
This is mostly a transitional release, where the major changes are the
move to use the SLG-WAM engine as default, and the introduction of
garbage collection support for this engine. Also, several important
memory management related bugs have been fixed, increasing the
system's stability considerably.
Important Note
This is the last release to support the Chat engine.
News
-
SLG-WAM stack management has been made the default rather than Chat.
Chat is still available through a configuration option.
- A new heap garbage collector, called indirect has
been made the default garbage collector for SLG-WAM. In addition,
the Chat sliding and copying garbage collectors now also work on the
SLG-WAM configuration.
- New builtins round/2, ceil/2 and floor/2 for dealing with
floating point numbers added.
Bugfixes
-
Several memory management related bugs fixed.
-
Minor bug in Prolog debugger fixed.
-
Fixed problem with NULL values and ODBC.
Backward Incompatibility
FLORA News
Flora-2 is still a late alpha release, but there have been
considerable improvements in stability and speed.
This release fixes many bugs, eliminates some restrictions, and adds
new features.
-
The most important new feature is the ability to check for undefined
predicates and methods in debug mode (see the manual regarding
checking undefinedness checks). This feature simplifies debugging
considerably.
-
Flora compiler now checks if a tabled predicate depends on an update
operation and issues appropriate warnings. Such dependency is
considered to be a likely program bug.
-
Numbered anonymous oids added (e.g., _#123). They behave like
regular anonymous oids (_#) in the sense that they are substituted
by a new oid. However, numbered oids can be referenced within the
same clause (e.g., _#12[self->_#12]).
-
Optimized compilation of path expressions and nested terms.
Version 2.4 (Bavaria)
General
News
-
XSB now permits user programs to register hooks to be called when an
undefined predicate is encountered. This and other (previously
undocumented) hooks are described in the chapter titled Hooks
in Manual Part 1.
- The XMC Model Checking
System is now included as a package in XSB.
-
Local scheduling has been made the default scheduler.
- Uniform interface to various file operations (chdir, isdir,
readable, etc.) through the predicate path_sysop/2 and
path_sysop/3 (in module file_io). See Manual, Part 2
(Script Utilities).
-
New string matching function, string_match/4, which extends
str_sub/3 (string_match/4 doesn't do pattern
matching - use the regmatch package for that). See Manual,
Part 2, (String Manipulation).
Bugfixes
-
Fixed subsumption bug prompted by certain uses of functors and
lists. The bug appeared as an inability to unify a (falsely
identified) answer with an answer template.
Backward Incompatibility
-
The meaning of argument 3 in predicate str_sub/3 has changed. It
still represents the position of the substring match. However,
offsets now start from 0, like other string functions, instead of 1.
-
A number of new predicates have been added as a step towards ISO
compatibility.
FLORA News
This release of XSB contains an alpha release of a completely
redesigned and re-implemented FLORA system (now called FLORA-2). Here
is an incomplete list of the main new features of the system:
-
Integrates F-logic, HiLog, and Transaction Logic into one coherent
language
-
Provides a new, flexible module system
-
Better equality maintenance and support for inheritance
-
Support for preprocessing
-
Many more enhancements
We recommend that Flora users should start using Flora-2, as the previous
version of Flora is no longer maintained and will eventually be deprecated.
Version 2.3 (Zombie)
General
A great number of bugs fixed, new features, performance improvements.
News
-
Subsumption: In addition to variant-based tabling, XSB now
provides tabling based on subsumption of calls. In such a
"subsumption-based" tabled evaluation, answers from a more general
subgoal are used to satisfy a subsumed (more specific) subgoal,
thereby permitting greater reuse of computed results. The tabling
strategy may be chosen on a per predicate basis. Subsumption-based
tabling typically yields better performance in both time and space.
However, subsumptive tabling is better suited to more declarative
programs, as it may fail to give proper results in the presence of
certain Prolog constructs such as var/1. This implementation of
subsumption-based tabling correctly evaluates normal logic programs
which do not require subgoal delays.
-
Jumptable Emulator: The system is now able to take advantage
of special gcc features to implement a jumptable-based emulator,
which speeds up XSB considerably.
-
Sockets: XSB now supports the socket select call and
timeouts.
-
RDF parser: The XSB libwww package that first appeared in XSB
2.2 now has new interface to the RDF parser provided by e libwww
package from W3C. It requires that the libwww library from W3C is
installed.
-
An ISO-compatable throw/catch mechanism: It was already
present in version 2.2, but now it is also documented.
-
Foreign C interface now works on SGI's IRIX.
-
Backtrackable assert and retract, plus Perl-style associative
arrays. (Read about them in the section on modifying the database in
Manual 1.)
-
Oracle Interface: The Oracle interface has been brought
up-to-date with newer versions of Oracle.
- ODBC Interface: The ODBC interface has been some major
cleanups, and several bugs have been fixed; it also now works with
SQL Server as well as Access. Support for multiple simultaneous
connections has been introduced.
Backward Incompatibility
-
The type bool used by the external C interface has
been renamed to xsbBool, because of clashes with various include
files that exist on some platforms. Likewise, the macros for dealing
with the variable string type used by C programs that call XSB as a
library have been renamed. For instance, vstrDEFINE is now
XSB_StrDefine. See Vol. 2 of the manual for the new names.
-
The predicates file_read_line,
file_read_line_atom, file_read_line_list have lost
the last argument (the indicator of whether the read has read the
entire line). This argument is no longer necessary, since buffers
expand automatically to accommodate any size input.
Version 2.2 (Tsingtao)
General
News
-
Support of Attributed Variables: Attributed variables are now
supported in XSB (partially compatible with SICStus 3.8). See XSB Manual, Volume 2, Attributed
Variables.
-
Random Number Generator: A builtin random number generator is
implemented, and a set of predicates, which are compatible with
SICStus 3.8, are provided.
New Packages
-
libwww - a powerful Web access package. See XSB Manual, Volume 2, The Libwww
Package. This package has been tested only on Solaris 2.6 and
Linux 2.2. It definitely needs configuration work in order to run
under Windows.
This XSB package relies on the W3C's libwww library and requires it to
be installed. The entire package is implemented in C and is much faster
than other related Internet access packages for Prolog, e.g., PiLLOW). The
package provides the following functionality:
-
HTML parser.
-
(Non-validating) XML parser (including handling of external
entities).
-
The ability to simultaneously dispatch several HTTP requests and
parse the responses as they arrive; no waiting until the entire
document is received.
-
Fetching web pages and filling out forms.
-
Header information.
-
Timeouts.
-
Basic and digest authentication. SSL to follow.
-
Redirection.
-
Error handling.
Backward Incompatibility
-
The C calls xsb_query_string_string and
xsb_next_string that interface C programs to XSB now use
the new VarString data type instead of char*. It
is no longer necessary to pass the size of the buffer to these
functions. See XSB Manual, Volume 2, to learn more about the
variable-length string data type.
Bug Fixes
-
Crashing of XSB-ODBC interface under Windows;
-
Memory violations of some internal operations on delay lists.
Version 2.1 (Skol)
General
News
Process management API: XSB can now spawn subprocesses and
capture their standard I/O into XSB streams. This allows XSB to
communicate with other processes. See XSB
Manual, Volume 2, Communication with Subprocesses.
XSB preprocessor: There is now a compiler option, xpp_on,
which tells the XSB compiler to put the source through a
preprocessor. The default is gpp,
a powerful preprocessor that understands both C and Prolog syntax.
High-level C interface: XSB can now automatically generate
wrappers for the most common C functions. Such functions can now be
simply declared using compiler directives and then be called from XSB.
Enhancements to the sockets interface: New calls such as
socket_set_option, socket_select,, etc. Certain socket calls
and file I/O calls can be timed-out.
I/O enhancements: There are several additions to the low-level
I/O library, such as file_clone, file_reopen,
pipe_open. Certain socket calls and file I/O calls can be
timed-out.
New section on string manipulation in manual part 2: Some of
the predicates described there are old (but weren't documented) and
some are new.
Call changes: New calls: number_digits/2, number_codes/2,
atom_codes/2 replace atom_chars/2 and number_chars/2.
Atom length: Atom length in compiled code is no longer limited
to 255. The 255 limit on the size of ldoptions directive in the
Foreign C interface has been removed as well.
Debugger enhancements: Many additional options: profiling,
verbose skip, extensive trace control facility.
New Packages
sModels: Implements stable model semantics.
Backward Incompatibility
-
Binary incompatibility!!! The format of the XSB .O files has
been changed. Make sure you recompile all your programs! (The
binaries that come with the XSB distribution have the new format.)
-
unix/1 is now called shell/1. It exists in module
shell, and is imported from there automatically.
-
The standard predicates atom_chars/2 and number_codes/2 now behave
as in the Prolog standard (return lists of atoms rather than ASCII
codes). The old behavior is provided by the standard predicates
atom_codes/2 and number_codes/2.
-
A number of backward-incompatible changes in socket calls. First,
the predicates socket_send_eof/1 and socket_send_asci/2 have been
removed. This functionality is available through other calls.
Second, all socket predicates now have an extra argument, the error
code. The old-style predicates have been preserved, but their
behavior isn't guaranteed to be 100% the same. The fileptr argument
in socket_connect call has been deleted. The fileptr argument in
socket_accept no longer denotes an XSB I/O port. Instead, it denoted
a socket descriptor. It can be converted to an I/O port using the
new builtin fd2ioport.
socket_send/3 no longer appends the message delimited (the
backquote). Programs that rely on this feature will not work any
longer. Instead of this old hack, socket_send now prepends a 4-byte
header that specifies the length of the message body. The primitive
socket_recv/3 uses it to determine the length of the message it
received.
Version 2.0 (Gouden Carolus)
General
XSB Version 2.0 offers a more flexible handling of dynamic code. XSB
now also includes a number of preprocessors that allow it to
efficiently evaluate powerful formalisms such as F-logic, Annotated
logic, and the well-founded semantics with explicit negation.
Finally, XSB 2.0 provides various packages for regular expression and
wildcard matching.
Large parts of XSB have been rewritten for this release, especially
memory management, and representation of tabled clauses. The result is
a more robust system with improved functionality that is more suitable
for use in commercial and large-scale research development.
Added support for InterProlog, a Java
front-end enhancement for Prolog
Packages
Version 2.0 of XSB includes the following packages:
-
FLORA: A full-fledged F-logic to XSB compiler and shell.
-
GAP: support for annotated logic programming.
-
SLX: allows XSB to evaluate extended logic programs according
to the well-founded semantics with explicit negation.
-
PERLMATCH: an interface to Perl pattern matching and string
substitution capabilities.
-
REGMATCH: provides similar functionality, but relies on a
POSIX-compliant C library instead of Perl.
-
WILDMATCH: allows matching wildcards and globbing of
directories. Relies on a POSIX 2 compliant C library.
Backward Incompatibility
The following incompatible changes have been made in XSB Version 2.0:
-
The file .xsbrc in the home directory is no longer used. Instead, XSB
now uses the directory .xsb/ and the startup file is .xsb/xsbrc
It is now possible to have pretty much any Prolog code in that file.
-
There is a change in how the library_directory predicate is used.
The user must now assert directories into this predicate.
There is no need to export this predicate (this predicate is now
global).
-
XSB is no longer supported on MS DOS.
-
In order to be consistent with the ISO Prolog standard, XSB no
longer supports mixing compiled and dynamic code for the same
predicate.
-
The predicate is_string/1, which used to check if its argument is a list of
characters, is now replaced by the builtin is_charlist/1. There is now also
is_charlist/2 (see the manual).
Email: xsb-users@lists.sourceforge.net
Last modified: $Id: rel_notes.html,v 1.15 2011/04/12 20:47:29 tswift Exp $