11. Change History

Version 6.1p8 (March 23rd, 2005):
Fixed undefrule leaving behind activations (thanks Neil Wyse). Fixed yet another deadlock (thanks Paul Kaib). Fixed a race condition in Agenda (thanks Chad Loder.)
Version 6.1p7 (May 7th, 2004):
Fixed deadlock problem (thanks Paul Kaib). Better performance with huge numbers of templates (thanks Travis Nelson.) Fix NPE when parsing empty (not) patterns. Fix PrettyPrinter bug with (not) and pattern bindings.
Version 6.1p6 (November 21st, 2003):
Fixed two incremental reset problems (thanks Kevin Kusy and Xiaocheng Luan.) str-cat was evaluating the first argument twice (thanks Neal Wyse.) Fixed bug using '|' constraint on unbound slots inside (logical) (thanks 'Ray'). readline now works better in immediate mode. Fixed query name resolution issue (thanks Felix Bachmann). "crlf" translates to 0x0D0A on Windows (thanks Morten Lind.)
Version 6.1p5 (September 4th, 2003):
Jess now works as a standard extension, including loading user classes (thanks Ted Neward). Fixed a potential stack overflow in FactList.processPendingFacts() (thanks Ray Mekert.) Error messages from jess.awt.Canvas.paint() are flushed (thanks Isilyn Cabarrubias).
Version 6.1p4 (July 8th, 2003):
Fix a problem with variable binding (thanks Kevin Kusy.)
Version 6.1p3 (June 26th, 2003):
Fix a problem with side-effects executing multiple times while resolving overloaded methods (thanks Chad Loder.) Fix an incremental reset bug (thanks Maxim Tretyak.) Binary version works with Java 1.2.2 and above.
Version 6.1p2 (May 21th, 2003):
Fix a problem with clearing defglobals (thanks Bob Orchard.) (reset) removes all top-level variables, even "fake defglobals." Some improved error reporting. Public Test1.getMultiSlotIndex() method.
Version 6.1p1 (May 6th, 2003):
Fix a problem with pretty-printing of defqueries. Fix a (not) CE bug (thanks Olga Medvedeva). Don't call run(0) from run-defquery (thanks Glenn Williams.)
Version 6.1 (April 9th, 2003):
No nontrivial changes.
Version 6.1RC1 (March 24th, 2003):
Fixed another leak and another deadlock in "logical" (thanks Glenn Williams.) Reflection machinery now tries more aggressively to convert between floats and RU.FLOATs, ints and RU.INTEGERs, etc, in both directions. assert-string just returns FALSE on duplicate fact (thanks Thomas Diesler.) Better system for renaming variables in nested NOTs. Fix a race condition in JessEventSupport (thanks Chad Loder.) Added listDefclasses, etc. Fixed "breadth" conflict resolution strategy.
Version 6.1b3 (February 28th, 2003):
Most of the Rete "listXXX" methods lock and copy to prevent ConcurrentModificationExceptions. Fix problem with triply nested (not) (thanks Alan Moore.) Fix a race condition with modify and run-until-halt (Mr. Moore, again.) "unique" CE is now a no-op. Deadlocks, memory leaks, and other issues with the "logical" CE repaired (many thanks to Travis Nelson and Glenn Williams.)
Version 6.1b2 (February 14th, 2003):
Proper handling for "OR" CE's deeply nested inside NOTs. Nested, negated "test" CEs now work properly. Add "getThisActivation" and "getThisRuleName" to Rete (thanks Richard Kasperowski.) Can test fact bindings against previously defined variables. Simple public ConditionalElement class. "exists" handled by parser.
Version 6.1b1 (January 28th, 2003):
Code cleanup: remove unused return value from callNodeLeft/Right, add Context argument to callNodeLeft/Right, and remove ThreadLocal Rete.s_engines and static Rete.getEngine() method. When any fact, shadow or not, is modified, either from Jess, from the Java API, or from a Bean event, a single FACT | MODIFIED event will be generated. Many of the built-in package classes are no longer public. Added Rete.updateObject and (update). Added Rete.modify(). Added Rete.watch(), unwatch(). (watch facts) reports modify again. max-background-rules declaration added to defquery. Javadoc coverage improved. Fixed ppdeftemplate handling of default-dynamic (thanks Ross Judson.)
Version 6.1a5 (January 15th, 2003):
Fixed a bug with direct matching of fact bindings (thanks Morten Vigel). Fixed a typo in Node1TNEV1 (Ralph Grove.) Added "synchronized" and "get-strategy" functions. Calling "set-strategy" now changes the default strategy for new modules. Fixed a deadlock in defquery (thanks Chad Loder.) Public interface "Test" renamed to "TestBase." Fixed bug in pretty-printing of deftemplates. Performance is back up to 6.0 equivalent.
Version 6.1a4 (August 30th, 2002):
Fixed a 6.1a3 bug where negated patterns could trigger backward chaining. "eval" and "build" can use variables from the calling context. Clarify and extend "app object" mechanism; Jess can be installed as a standard extension. Partially ameliorate performance regression from 6.1a3.
Version 6.1a3 (July 23rd, 2002):
Fixed a bug in save-facts (thanks Scott Trackman). Fixed deadlock problem in retract/undefinstance (thanks Blaine Bell.) Mihai Barbuceanu helped modernize the "bag" command. Various API enhancements. New Rete constructor with "app-object" argument. Massive refactoring of rule compiler to handle arbitrarily nested AND and NOT CEs in a new, simpler way; universal quantifiers are now handled correctly. Fixed a bug with the logical CE when adding new rules to a running system. Undefinstanced, nonserializable Beans now no longer prevent Rete serialization (thanks James Gallogly and Alan Moore.)
Version 6.1a2 (May 22st, 2002):
Fixed early return bug in try/catch/finally (thanks Chad Loder). (modify) now immediately modifies shadow fact for static definstances. A shadow fact can tell you the category of definstance it belongs to. New version of format function now has a %n conversion specifier, and also fixed an infinite loop when formatting floating-point zeroes. Refactoring in logical -- should not be user visible.
Version 6.1a1 (April 3rd, 2002):
Class import table now public. "view" cmmand improved, and bugs fixed. Activations now have individual salience values. Many methods in jess.Context now public. Rete.retract() now calls undefinstance() if needed. Rete.undefinstance() returns shadow fact. Matching against defglobal works (thanks Simon Hamilton.) (logical) bug fixed (thanks Blaine Bell.) Fixed a bug executing tests in Node2 (thanks Ed Katz.) Fixed a bug with inadvertent changes to current module (thanks John Callahan.) Fixed an (exists) bug and an '|'-constraint bug (thanks Jack Kerkhof).
Version 6.0 (December 7th, 2001):
defclass and definstance now accept defclass names qualified wih module names (thanks Juraj Frivolt.) ppdefrule and friends don't throw if the argument is bad (thanks Mikael Rundqvist.) Release notes and porting info added to docs. Other small patches.
Version 6.0b3 (November 2nd, 2001):
nth$ returns nil instead of throwing exceptions (thanks Seung Lee.) Deffunction has public API for fetching arguments and actions (thanks Scott Kaplan, Henrik Eriksson). If pattern-matches during (modify) throws an exception, the modified fact no longer disappears from the fact-list (thanks Mihai Barbuceanu.) If pattern-matches during addDefrule throw, rule is still added to rulebase (thanks Mikael Rundqvist). Fixed rounding bug in format function (thanks Mike Isenberg). Fixed issue with variable renaming when an 'and' CE was nested in a 'not' CE (thanks Drew Van Duren). Can omit the functor 'call' even if the Java object is the return value of a function call. retract, assert, and duplicate will once again accept an integer as their first argument -- the fact-id function is no longer necessary (although it can still be used.) You can put pattern bindings inside of grouping CEs. (undefinstance *) now works as advertised (thanks Jason Smith). Remove "modify-n" rewrite optimization, so pattern binding to (or) CEs works.
Version 6.0b2 (October 3rd, 2001):
Can redefine a defclass with identical definition (thanks Ian de Beer). Single-stepping rule execution was losing activations (thanks Simon Blackwell.) Fix a bug preventing FuzzyJess from working with non-Fuzzy multifields (thanks Bob Orchard.) explode$ can deal with embedded comments (thanks Simon Blackwell.) (logical) can handle nested (not) and (exists).
Version 6.0b1 (September 13th, 2001):
Fixed a bug in compiling rules with function calls inside of (not (and)) constructs (thanks Thomas Gentsch). Broadcast DEFINSTANCE and DEFCLASS events (ibid.) and RUN and HALT events. defmodules, focus stack, etc., implemented. (clear) doesn't delete Java Userfunctions (thanks Glenn Tarbox.) Rename SerializablePropertyDescriptor to SerializablePD so the class name isn't too long for the Mac filesystem (thanks Matt Bishop). (rules), (facts), others, now in Java, not scriptlib. Redefining a deftemplate throws an exception, unless the definitions are identical. Added "duplicate" function. sym-cat and str-cat call toString() on EXTERNAL_ADDRESS arguments (thanks Chad Loder.) Many other bug fixes and cleanups.
Version 6.0a8 (July 19th, 2001):
Docstrings for deftemplates properly parsed (thanks Simon Hamilton.) Several features broken in binary-only distribution (view, ppdefrule, etc) are now fixed. JessEvents of type USERFUNCTION_CALLED now include the Userfunction as the user object, not the FunctionHolder (thanks Chad Loder.)
Version 6.0a7 (June 1st, 2001):
New pretty-print architecture which shows how things are actually represented; based on new Visitor interface. ppdefX functions now return, rather than print, their results. show-jess-listeners works again. Simplify how negated patterns are parsed. JAR file not an executable JAR anymore. Fix Thread problem with runUntilHalt, deadlock in propertyChange (thanks Charles May.) deffunctions accepting only a wildcard can now be called with no arguments (thanks Thomas Gentsch.) No more erroneous undefined variable message (Gentsch.) The minus (-) function works if one or more arguments are atoms, just as the other binary math functions do (thanks Pau Ortega.) The first arg to (modify) can be a funcall. (return) from (try) or (catch) block no longer skips second and subsequent expressions in (finally) block (thanks Chad Loder.) Deadlock in one form of Java assert() (Loder.) (or), (and), and (not) CEs can be nested in structures of arbitrary complexity.
Version 6.0a6 (May 3rd, 2001):
There are no more "optional" functions. Fact.getTime() is public (thanks Alan Moore.) Lots of small improvements to manual. Fix a bug in pattern-matching fact-ids (thanks Matthew Johnson.) Slightly different rules for loading batch files from jars; now they must omit the package-dir name. The "logical" CE is supported.
Version 6.0a5 (March 12th, 2001):
Fixed a serious bug in "modify" (thanks Bob Orchard.) Some documentation cleanup. runQuery method returns Iterator.
Version 6.0a4 (March 8th, 2001):
"Watch" listeners were not being cleared. Use a priority queue for agenda -- modest performance improvement for most applications, big improvement for conflict-resolution-limited apps. Strategy interface vastly simplified, rewrote built-in strategies. FactList.ppFacts(), and hence (save-facts), rewritten to write directly to a Writer, greatly decreasing memory usage. Quit button removed from Console (thanks Andrew Marshall.) Calling a native function that returns a wrapper type (Integer, Float, etc) now gives an EXTERNAL_ADDRESS holding the wrapper object, instead of unwrapping the data. Incompatible changes to improve FuzzyJess performance and fix possible bug; a new version of FuzzyJess will be required to work with Jess 6.0a4. Fact-duplication concept eliminated -- fact duplication is never allowed. Fact list stored on a HashMap, not a Vector; Now finding is fast, enumerating is slow. For the time being, Jess 6.0XX now requires Java 2.
Version 6.0a3 (January 25th, 2001):
Bload and bsave now work much better, using real, complete serialization. Serializing/deserializing Rete saves and restores everything except the I/O router tables. Rete loads scriptlib itself, so you don't need to do it yourself anymore. Lots of refactoring -- Rete now exports more useful functions, but delegates their implementations; for example, there are public defclass(), definstance(), and undefinstance() methods. A small bug in Tokenizer fixed (thanks Norman Ghyra.) Methods added to support Thomas Barnekow's JessX Jess extensions.
Version 6.0a2 (July 20th, 2000):
Defqueries can now backwards-chain to get results. run-until-halt now clears halt flag first. finally in (try) (thanks Thomas Barnekow). Many typos in manual fixed (thanks Michael Futtersack.) (or) and (and) CEs, and general nesting of CEs now operational (thanks to Mariusz Nowostawski and Jack Kerkhof for test cases,) although code still needs refactoring and (and) and (or) won't work correctly inside of (not). waitForActivations() could block even if activations were available; now fixed (thanks Thomas Barnekow). Added some "LISP compatibility functions:" progn, apply. Fixed off-by-one error in line-numbers in error reports. Vastly improved efficiency of multifield matching (thanks to Sebastian Varges for noticing a problem with the old implementation.) Deactivate activations earlier in the rule-firing process, to remove a bit of redundant processing (thanks David Bruce.).
Version 6.0a1 (April 25th, 2000):
Fact-id's are now simply references to Fact objects. Use the supplied fact-id function to create a fact-id value from an integer. Many memory-usage reductions; no more extra Vectors in Rete network classes. Several code-shrinking refactorizations. Rete class no longer delivers events to listeners registered by a handler for the same event (thanks Alex Karasulu.) Fact-ids no longer change on modify. (batch) now works on a .clp files in a .jar file from an applet (thanks Javier Torres).
Version 5.2 (June 30th, 2000):
Bug fix release. waitForActivations() could block even if activations were available; now fixed (thanks Thomas Barnekow).
Version 5.1 (April 24th, 2000):
Bug fix release. Fixed two bugs in backwards chaining (thanks Ashraf Afifi.) Also, a regression repaired: pattern bindings couldn't be matched as they could in Jess 4, and now they can again.
Version 5.0 (January 28th, 2000):
Added new function cross-reference section to the manual (thanks to Roger Firestone for the idea.) parseDeftemplate now handles comments in child templates (thanks Richard Long.) TextAreaWriter (and hence Console and ConsoleApplet) prunes the oldest characters from its TextArea to prevent the Win32 freeze problem.
Version 5.0b4 (January 5th, 2000):
Fixed broken fact-slot-value function. Some support for new RU.LONG type. Added (run-until-halt), runUntilHalt(), activationSemaphore, etc. (unique) CE no longer prevents partial matches from being retracted, only from being propagated (thanks Vicken Kasparian.) Nested nots and (exists) CE added. Unmatched variables can appear in function calls within defqueries (thanks Michal Fadljevic). Bsave/bload now works with defclasses (thanks Russ Milliken.) ReflectFunctions cache result of BeanInfo.getPropertyDescriptors().
Version 5.0b3 (November 30th, 1999):
Support for reworked version of Bob Orchard's fuzzy logic extensions. When multiple activations of one rule were due to different multifield matches of the same set of facts, retracting one fact would cause only one activation to be removed. This is now fixed (thanks, Al Davis.) Share function-call-containing join nodes; thanks George Rudolph for the reminder. Fixed UnWatch class for buggy JDK 1.x compilers. Can match directly on defglobals now. ReflectFunctions cache result of Class.getMethods().
Version 5.0b2 (November 8th, 1999):
Several bugs in run-query and parseDefquery fixed (thanks Alex Karasulu). (watch) handlers flush stdout (thanks David Young.) Fix bare return-value constraints in multislots (thanks Dave Barnett.) Problem with returning parameters from deffunctions, and missing resolveValue calls in BagFunctions fixed (thanks Bruce Douglas.) assert() and retract() call processPendingFacts() directly (thanks Thomas Barnekow.) Multislot matching "optimization" fixed (thanks Robert Gaimari.) Deffacts allows global variables in fact slots (thanks Michael Coen.) Try harder to coerce all multifield entries to same type when converting to Java array (thanks Ralph Grove.) Fix a synchronization problem (thanks Javier Maria Torres Ramon.)
Version 5.0b1 (September 21st, 1999):
jess.Console works again (thanks Lakshmi Vempati). Compiles with buggy JDK 1.1.x compiler. bload/bsave preserves listeners (i.e., deffacts work). Did away with Successor class (simplified Rete network, reduced memory usage.) Fixed bug where redefined rules with shared nodes wouldn't reset. Specialized Value subclasses now explicitly override numericValue(). Yet another pesky "not" bug (thanks Vadim Zaliva.) All facts/definstances inherit, ultimately, from "__fact". In Rete network, callNodeRight() takes Fact, not token; right memories store Facts, too (fewer allocations, less memory!) Return-value constraint was erroneously requiring bound variable; thanks Dave Kirby. Miroslav Madecki reported a "ghost fact" bug; fixing it improved Jess's "manners" benchmark performace by another 25% (!) "system" returns a Process object (thanks Alan Moore). (open) uses a 10-character buffer - large file I/O speedup (thanks Norman Gyhra).
Version 5.0a6 (July 8th, 1999):
insert$, replace$ behave as documented w.r.t argument types (thanks Emmanuel Pierre). Typo: agenda wasn't being cleared on reset (thanks Bob Orchard.) Removed some redundant checks in network (more speedups!) Final multivar argument to deffunction now properly handles passed-in multifields; thanks Ning Zhong. Added "import". Fixed bug in using variable as salience value; thanks David Young. Bug in special code for calling public methods of package-private classes; thanks Cheruku Srini. Bug in member$ fixed (thanks David Young again.) Bug in retracting facts which are multifield pattern-matched on rule LHS fixed (thanks Yang Xiao). All classes serializable again (thanks Michael Friedrich). Several small optimizations related to fact-duplication (thanks Osvaldo Pinali Doederlein.) JessEvents working again, with event mask. Bitwise arithmetic functions added. Fixed some more multifield matching strangeness (thanks Benjamin Good). Added "|" (or) connective constraint.
Version 5.0a5 (May 20th, 1999):
Drastic changes to the way Funcalls are executed (much simplification and speedup!) Fixed "corrupted negcnt" when retracting definstance facts (thanks Abel Martinez.) Much improved agenda management, including time tags. Smart indexing based on tested values. New heuristics for eliminating redundant tests. (store foo nil) now removes value of foo (thanks Kathy Lee Simunich for the suggestion.) (system) command now pipes program output to console (thanks Fang Liu for idea). (undefinstance *) now removes all definstances (thanks Mike Lucero for idea). Multiple defglobal references on rule LHS no longer broken (thanks Jacek Gwizdka for report.) Many upgrades to JessException class (thanks Kenny Macleod). Some Value constructors no longer have the redundant second argument. get/set-fact-duplication (thanks to Osvaldo Pinali Doederlein for the idea.) Bob Orchard figured out how to get rid of the extra EOFs in jess.ConsolePanel. Console and ConsoleApplet can now read a file and continue, as they used to. Backwards chaining now more general; one goal can trigger multiple rules, both in parallel and in chains. ViewFunctions and ReflectFunctions moved into jess package, many more classes now package-private. jess.reflect package renamed jess.awt; TextReader, TextAreaWriter moved into it. "throw" command added (thanks Eric Eslinger).
Version 5.0a4 (March 18th, 1999):
Call removePropertyChangeListener on undefinstance (thanks to Dan Larner.) Added defadvice. Three buglets, thanks to Bob Orchard: defglobals can now refer to other Defglobals in their definitions; (bind) and (foreach) are now pickier about arguments; undefined variables now universally evaluate as 'nil'. Applet security problems fixed (thanks S.S. Ozsariyildiz). Problem with matching and otherwise dealing with zero-length multislots and array bean properties fixed; null array values are converted into zero-length arrays (thanks Miroslav Madecki.) (call) does much better error reporting. Passing Strings to functions accepting Objects now works (J. P. van Werkhoven.)
Version 5.0a3 (February 12th, 1999):
Token(Token) changes UPDATE to ADD. Hashcode used in TokenTree modifiable. (clear) now fully clears deffacts. Many general speedups. TokenTree hash factor can now be set globally and per-rule. Functional Accelerator class exists for math functions. (modify) funcalls print out correctly. get-var removed (no longer needed.) Nonsychronization error in jess.Retract.call() led to Corrupted Negcnt; fixed (reported by Dan Larner). Other corrupted negcnt error due to duplicated tokens fixed. definstances can be static or dynamic. jess.Pattern is public; several methods added or made public to support rule editors. Defrule.toString works for all cases. Console class now uses Main to do business. .jessrc file now named scriptlib.clp and found using Class.getResource(). (batch) can use getResource() to find scripts, so they can live in .jar files. Batch now an intrinsic. Rewrote some multifield functions to better handle EXTERNAL_ADDRESS objects; added hashCode() to jess.Value. (facts) and (rules) now in scriptlib, not Java. Much improved public interface for Deftemplate, Fact classes.
Version 5.0a2 (December 15th, 1998):
m_sortcode in Token no longer a blank final to work around JDK 1.1.6/7a javac bug. Makefile no longer mentions unbundled files. Backward chaining works again (was broken in 5.0a1)
Version 5.0a1 (December 9th, 1998):
All 16-bit (Reader/Writer) text I/O - some user code changes required. Serialization (crude version). Inheritance for deftemplates, defclasses. jess.Main reads $HOME/.jessrc at startup if it exists. No more ReteDisplay, Resetable, or Clearable interfaces: instead, use jess.JessListener and jess.JessEvent. (view) uses JessListener instead of Observer/Observable; rewritten to provide movable nodes, per-node debug code. jess.reflect.JessListener class renamed to jess.reflect.JessAWTListener. Bean-itized many function names (name() -> getName()), breaking lots of user code, I'm afraid. (run) returns number of rules fired. Ordered facts now stored as unordered with one multislot named __data. Backwards chaining added. Bload and Bsave added.
Version 4.5 (April 15th, 1999):
Fixed "corrupted negcnt" when retracting definstance facts (thanks Abel Martinez.)
Version 4.4 (March 18th, 1999):
Token(Token) changes UPDATE to ADD. (clear) not truly clearing deffacts (thanks to Rob Jefson). Passing Strings to Java methods expecting Object now works. Call removePropertyChangeListener in undefinstance.
Version 4.3 (December 1st, 1998):
Fixed redundant default-value processing, which was leading to odd problems with definstances with null slot values (thanks to S.S. Ozsariyildiz). Removed intern()s from Tokenizer (faster compilation). Fixed NIL/nil ambiguity in ReflectFunctions (thanks Andreas Rasmussen.)
Version 4.2 (November 12th, 1998):
Fixed 'Corrupted negcnt' bug (thanks to Todd Bowers). (if ... then) function now throws an exception if atom 'then' is missing. Version string in 4.1 final was inadvertently left at 4.1b6. Added section to README explaining rule LHS semantics a bit better. Rete.findFactByID() is now public. Fix for very tricky 'phantom fact' problem reported by Steve Bucuvalas. Java method calls on Jess Strings now work for all Strings, not just alphanumeric ones. "animals" example modified to work with transitional gensym implementation.
Version 4.1 (September 15th, 1998):
Some minor bug fixes; code to allow you to leave off the '$' on a multivar after its first use, as in CLIPS.
Version 4.1b6:
Allow named variables in (not) CEs as long as they're not used in subsequent CEs. Fix a bug that was causing (return) to not work if inside a (foreach) inside a deffunction. Recursive deffunctions now work again. Jess works around a bug in some versions of Java that was preventing the atom '-' from parsing. Rete.listDefglobals() no longer lists duplicates of redefined defglobals (Karl Mueller found this one.) ReteDisplay.fireRule() is now called as appropriate. Accessing pattern-binding variables on rule LHSs works again (Karl again.) (reset) wasn't clearing all activations (thanks Al Davis); fixed. Funcall.toString() puts parens around the ValueVector version.
Version 4.1b5:
Just remove some debug code and extra files inadvertently shipped with 4.1b4.
Version 4.1b4:
addUserfunction, addDeffunction, etc collapsed into one addUserfunction routine in Rete class; same with findUserfunction. RU.getAtom() and RU.putAtom are gone! Userfunction.name() now returns String. ControlStructure interface used to clean up handling of such things. ReteCompiler uses Hashtables of Bindings instead of int[][] for vartables. Added default-dynamic deftemplate slot qualifier. Added set-/get-reset-globals, and changed the default defglobal reset behaviour. Added dynamic rule salience. Removed arbitrary limit of 32 slots for ordered facts and 32 tests per slot for all facts. "unique" CE (15-30% speed increase for many problems!) Various documentation improvements (many thanks to Win Carus.) Better error reporting (addContext() call in JessException.) Malformed calls to 'eval' or 'build' or 'executeCommand' no longer go into an infinite loop on EOF. Added "store" and "fetch". Added "external-addressp". Rearranged Test1, Test2 classes into an inheritance hierarchy with a virtual doTest method, allowing for alternate implementations (undocumented java-test functionality included). Value class will do more type conversions automatically. Final multifield argument of a deffunction now acts as a wildcard, as in CLIPS (thanks David Young.)
Version 4.1b3
Problem with calling public methods of package-private classes from Jess fixed thanks to Lars Rasmusson's explanation. OutOfMemoryError while parsing file containing unbalanced open parens fixed. Line breaks in double-quoted strings no longer need to be (but can be) escaped. Two fixes thanks to Andreas Rasmusson: gensym* returns a symbol as documented, not a string; and a propertyChangeEvent for a bogus property no longer causes Jess to retract a definstance without updating it. Many of the synchronized methods in the Rete class no longer are synchronized; instead they use either synchronized blocks keyed to affected members or simply depend on the internal synchronization of Hashtables. read and readline explicitly act differently for console-like and file-like streams. ConsoleDisplay gets a Clear Window button.
Version 4.1b2
Bug in character-escape lexing fixed thanks to Josiah Poon. Parser-related bug in explode$ fixed thanks to Andrew X. Comas. eval, build, executeCommand() again properly return the result of last expression, not EOF. min, max take arbitrary # of arguments. implode$ now works; it apparently never really did. printout puts parens around multifields again. str-compare documentation corrected. undefinstance now removes the fact representing an object as well as deactivating matching. Wrote large regression test suite (not included in distribution). Bug in multiple simultaneous Rete.run() calls in separate threads fixed thanks to Andreas Rasmusson. Selectable conflict resolution strategies (only depth and breadth supported now) and user-definable strategies. The try command is added.
Version 4.1b1
Much better lexer (no more StreamTokenizer). Input buffering problems with JDK 1.1.2-1.1.4 fixed. Bug in (test) CE fixed. Can call run on rule RHS. Bug in incremental update fixed. Separate command-line, applet, and GUI console driver classes (Quiz* classes broken up, renamed to Console*). read and readline should work exactly as in CLIPS. Manual describes more about how to write Java main(). Bug in definstance that was preventing use of subclasses of a defclassed class is fixed.
Version 4.0
BeanInfo support. quiz.html embeds only one QuizDisplay applet. Pumps demo works again (sorry). Conflict resolution strategy now should be exactly the same as CLIPS's default.
Version 4.0b4
Extensive manual rewrite, adding lots of Java/Jess interoperation info. Allow standard CLIPS deffunction docstrings. Thanks to Jack Fitch, Dave Carlson and Alex Jacobson, property names for reflected Java Beans now use standard capitalization transform. Better error reporting, especially during parsing and from the command line. set and get renamed to set-member and get-member. set and get are now functions that read and write Bean properties. ppdefrule properly handles quoted strings in function calls. executeCommand and friends reuse a single parser. Thanks to Karl Mueller for Rete.retractString. Taught batch to read applet-based data files. eval now handles non-sexps. Better mechanism for synchronizing streams. QuizDisplay is an applet as well as an application. run accepts an argument, the maximum number of rules to fire. Fixed bug in modify when new slot value was a zero-length multifield. Fixed ReteCompiler bug where MTELN nodes were not consistently generated for zero-length multifield matches. Thanks to Sidney Bailin, fixed problem with accessing defglobals and variables bound to pattern indexes on rule LHSs. Added get-var function. Added undefinstance. modify and retract now handle definstance facts specially. Fixed some doPPPattern bugs (Dave Carlson again!).
Version 4.0b3
Added jess.reflect package containing new, call, set, and get. Added JessListener and its subclasses. added engine. Changed printing of external-addresses to include Java class name. Changed parser to accept variable names as Funcall heads (call is substitued, resulting in a runtime error if call is not installed). and and or functions now accept any values as arguments, not only funcalls. Added foreach control structure. Command prompt doesn't print NIL return values. Fixed another not bug (thanks to Sidney Bailin). Added matching of Java objects on rule LHSs: definstance, defclass. TokenTree now uses sortcode % 101 as hash key, not the sortcode itself. All global classes moved into jess package. Jess class renamed Main.
Version 4.0b2
Cleaned up router/parser interactions. Jess will now read only one construct on a line of input (just like CLIPS). All Jess output now goes through WSTDOUT router, not through ReteDisplay.stdout(). Fixed bug whereby second and later references to subfields of multifields on the LHS of a rule would resolve to the whole multifield. modify can now properly handle multislots. format handles trailing spaces. Finally, parsing of integers: 2 is an RU.INTEGER, while 2.0 is an RU.FLOAT. Added eval and list-function$.
Version 4.0b1
Code reformat. Major performance enhancements (Value and Funcall recycling; Fastfunction interface; Rete memories are now btrees; RU.CLEAR tokens). test CE. Return-value constraints. ppdefrule thanks to Rajaram Ganeshan. Blank variables in not CEs. system blocks by default. readline fixed. build supported. logic for predicate functions in Rete network now precisely the same as for CLIPS. QuizDisplay demo. while and if accept boolean variables. Implied returns from if and while functions. Added explode$. Added I/O routers: open, close. Added format. Added bag.
Version 3.2
system and integer Userfunction classes renamed (Win95 filename capitalization problem!). Broken delete$, insert$, replace$ fixed. view command added. Big if/then in Funcall class finally removed in favor of separate implementation classes for intrinsics, leading to a modest speed increase. Documentation vastly expanded! Added catch for ArrayOutOfBoundsException in command-line interface; no more crash on wrong number of arguments. Broken evenp, oddp fixed. str-cat, sym-cat made more general. Broken sub-string fixed. Big switch in Node1 class replaced by separate classes, leading to a very modest speed increase.
Version 3.1
Added the assert-string and batch commands. Two bug fixes in multislot code (thanks to Nancy Flaherty). Added undefrule and the ability to redefine rules. Added the system function, although it doesn't work very well under Java. Public function engine() in jess.Context class allows you to do fancier things in Userfunctions. Added the non-standard load-package and load-function functions. Many new contributed functions packaged with Jess for doing math, handling multifields, and other neat stuff thanks to Win Carus. Added time (1 second resolution).
Version 3.0
A few code changes to accomodate Microsoft's Java compiler; Jess now compiles unchanged with JVC thanks to Mike Finnegan. Added member$ multifield function. Added clear intrinsic thanks to Karl Mueller. Introduced a new way of handling not patterns which I think finally guarantees there are no more not-related bugs remaining! load-facts, which has been non-functional throughout the beta period, is working again. Documentation now explains unzipping and compiling a little better. Modified the way fact-id's are handled so that you can write (retract 3) to retract fact #3.
Version 3.0b2
Lots of bug reports and improvement suggestions from the field - thanks folks! All the reported bugs in the multifield implementation, and some residual odd behavior in the not CE, have been fixed. The exit command has been added. A command prompt has been added. The # character can now be used in symbols. The access levels on some methods in the Rete class have been opened up; Rete is no longer final. nth$ is now 1-based, as it is in CLIPS. The if and while constructs now fire on not FALSE instead of TRUE. The str-index function has been fixed and added. Probably a few more things I'm forgetting here. Thanks for the input. Particular thanks to Nancy Flaherty, Joszef Toth, Karl Mueller, Duane Steward, and Michelle Dunn for reporting bugs fixed in this version; sorry if I left anyone out.
Version 3.0b1
First public release of Jess 3.0.
Version 3.0a3
UserPackage interface. Lots of new example UserFunctions for multifields, string, and predicates.
Version 3.0a2
Multislots! Also important bug fix: under certain circumstances, the Rete network compilation could fail 1) if (not()) CEs occurred on the LHS of a rule, 2) new variables were introduced in that rule's patterns listed after the (not()) CEs, and 3) these latter variables were tested (i.e., in a predicate constraint) on the LHS of the rule.
Version 3.0a1
Incremental reset. Watch activations. gc() in LostDisplay, NullDisplay. Multifields! All the Rete engine classes are now in a package named jess. Many classes and methods that should not be manipulated by clients are now package-private.
Version 2.2.1
Ken Bertapelle found another bug, which has been squashed, in the pattern network.
Version 2.2
Jess 2.2 adds a few new function calls (load-facts, save-facts) and fixes a serious bug (thanks to Ken Bertapelle for pointing it out!) which caused Jess to crash when predicate constraints were used in a certain way. Another bug fix corrected the fact that retract only retracted the first of a list of facts. Jess used to give a truly inscrutable error message if a variable was first used in a not CE (a syntax error); the current error message is much easier to understand. I also clarified a few points in the documentation.
Version 2.1
Jess 2.1 is *much* faster than version 2.0. The Monkey example runs in about half the time as under Jess 2.0, and for some inputs, the speed has increased by an order of magnitude! This is probably the last big speed increase I'll get. For Java/Rete weenies, this speed increase came from banishing the use of java.lang.Vector in Tokens and in two-input node memories. Jess is now within a believable interpreted Java/C++ speed ratio range of about 30:1. Jess 2.1 now includes rule salience. It also implements a few additional intrinsic functions: gensym*, mod, readline. Jess 2.1 fixes a bug in the way predicate constraints were parsed under some conditions by Jess 2.0. The parser now reports line numbers when it encounters an error.
Version 2.0
Jess 2.0 is intrinsically about 30% faster than version 1.0. The internal data structures changed quite a bit. The Rete network now shares nodes in the Join network instead of just in the pattern network. The current data structures should allow for continued improvement.

Back to index