You are here

Road to 2.0

This website doesn't see nearly as much activity as the development of jACT-R itself. In the past two years there has been much work in decoupling of components, optimizations, new features, and bug fixes. Some of changes have been intended, but not implemented for backward compatibility. For the past 10 years, jACT-R has puttered along relying upon Java1.5. 1.8 finally introduces lambdas and much better concurrency constructs. It's time to make the change.

The next release of the core will be 2.0.0. The new major number signifies that API changes have occurred. For most folks, this won't make a difference. Developers, you will need to recompile with the new interfaces.

Here's a quick run-down of what to expect:


  • Speed & memory optimizations. In particular, the default declarative modules and local search system have all gotten significant overhauls. It is now possible to run tens of millions of chunks in local memory in realtime (<50ms retrievals) when giving the JVM 12G of heap.
  • Time. Even with double precision time, floating point precision can still bite you in the ass. Time now uses a fixed (but configurable) precision, currently 0.0001. To change this, use -Dcommonreality.temporalPrecisionDigits=5 as a VM argument.
  • Java 8: CompletableFuture and lamdas galore. All future operations use the CompletableFuture interface now, which permits asynchronous composition. Lambdas and functional interfaces are replacing many of the anonymous inner classes, plus make parameter handling much easier.


  • findExactMatch and findPartialMatch now take a comparator (for sorting) and a filter. This allows the invoker better control over the performance of the searches.
  • Search performance has been improved dramatically by reducing garbage generation and using Java1.8's better concurrent collections.
  • There is a new delegatable declarative module that allows you to wrap multiple DMs. This is particularly useful if you have a DM that consumes from read-only sources (i.e., Wikipedia)
  • The default declarative module (upon which v6 is built) has support for pluggable configuration classes. This includes factories for chunk/type wrapper creation, sub/symbolic creation, naming, and configuration. It is preferable to use these instead of implementing your own DM.
  • DM search can now execute in parallel (when enabled) across the slots of the request. This is really only necessary for very large DMs and will eventually be automatic.


  • Decoupled conflict assembly, production instantiation, and selection. Generally eliminates the need for custom procedural modules.
  • Parallel production instantiation in DefaultProceduralModule6. Set EnableParallelInstantiations=true to enable. Combined with the CachedProductionSystem, models with many productions can see significant improvements.
  • Introduction of event-based matching (in addition to the default state-based). This is still tentative, but opens the door toward productions that can do change detection easier.