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 $