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.
- Change the Grule ANTLR4 grammar for better structure, tested with ANTLR4 hierarchy and AST Tree.
- FunctionCall AST graph is now under ExpressionAtom instead of Variable
- Proper Integer and Float literals both support exponent format
- Integer literal support Octal and Hexadecimal, Float literal support Hexadecimal.
- Added more documentation about the new numbering literals and also re-arrange the menu in the documentation.
- Support negation.
- Fixed ANTLR4 grammar to enable function chaining in the THEN scope
- Fixed ANTLR4 grammar error that makes array/slice/map cannot be chained with function
- Built-in function
Changed
is renamed toForget
to clearly tell the engine to forget about variable values or function invocation to make sure the engine look again into the underlying data context on the next cycle.
- Fixes the cloning problem where Expression do not clone the negation attribute
- Added mutex for unique.NewID() to make sure that this function is thread/concurrent safe.
- Support for JSON as Fact
- Support native type variable to be added straight into
DataContext
not onlystruct