All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Grool is donated to hyperjump.tech with new name
grule-rule-engine
- GRL Lexer, Parser using ANTLR
- Rule Builder
- Knowledge Base container
- Reflection Tooling to work with fact objects
- DataContext to store facts
- Cycle counter to ensure rule voting are not looped infinitely
- Grule Rule Engine
- Basic Built-In Functions
- RuleEngine are working on facts that based on pointer so it can modify facts struct instances. Thus adding variable into DataContext will be checked to ensure
ptr
to astruct
. - Added
Retract
function so rule can temporary retract a rule from knowledge base so it will not get voted any more in the next cycle. - Method invocation and tracer bug
- Reflectools are now able to detect the object under reflection for its
value
vsptr to struct
- Function invocation now check if the argument is an Interface, it should accept any type of argument type values.
- Added Pub-Sub mechanism for rule execution events.
- Better GRL load and compilation
- Better GRL error handling when compiling GRL
- Initial RETE algorithm were added into Grule with only optimization in the ExpressionAtom level.
- Naming and Versioning of knowledge base
- Newly revamped ANTLR4 Grammar for Grule, syntax and structure not changed but parsing get more efficient.
- Support for modulus % operator
- Support for bitwise OR and AND operator
- Operator precedence support
- RETE optimization to ensure reset of ExpressionAtom only happen if a known variable were changed
- Resource bundling, to load multiple GRL files by file path pattern
- Load GRL resources from GIT
- Resource bundling, to load multiple GRL files from GIT by the file path patteern
- EventBus implementation for Grule's internal event messaging now replaces the previous simple subscriber approach.
- Added documentation regarding this EventBus implementation
- Variadic function calling
- Support for
escape
character in string literal RuleBuilder
is now to build rules in GRLs intoKnowledgeLibrary
- Now you should obtain a
KnowledgeBase
instance fromKnowledgeLibrary
. This enable concurrency model in Grule. Seeexamples/Concurrency_test.go
to know how it works.
- Support to build rule from JSON.
- Engine support for
context.Context
usingExecuteWithContext
function.
- Enhancing in variable traversal, from previously using string tracing to struct-field lookup in reflect.Value
- Support for Array/Slice and Map handling.
- Support for Function chaining.
- Support for Constant functions.
- Grule engine optimization for selecting from conflict set. Instead of sorting salience in descending, simply look for the biggest value.
- Grule Event Bus is removed from Grule as it seems too complicated and no one use them. They just expect grule to just works.