Gabriele,

You have an interesting point, however I don't think it's appropriate
to hijack this proposal thread to discuss how to deal with
innovation/experimentations/new features.

Let's open a new Discussion thread, where I'd love to share some
thoughts and explore the challenges and options on how to deal with
such complicated topic.

On Fri, Dec 6, 2024 at 3:33 AM Gabriele Cardosi
<[email protected]> wrote:
>
> HI Mark,
> of course I can't have an opinion on such low-level details of the rule
> engine.
> But, in general terms, this proposal seems related to a topic we slightly
> touched in the past, i.e. if it would not be a good idea to create a sort
> of "experimental" "new feature" or whatever branch for such new things, to
> be used also for other new stuff.
> To better reinforce the concept, I strongly believe that we must keep
> creating new features and experimenting new approaches, but at the same
> time we have to balance the impact on the principal branch, that should be
> kept "stable".
> Reason for that is that currently there is a lot of "abandoned" code in our
> repositories, sort of POC or attempt that IINW no-one actually used and
> no-one actually maintains (except if some test gets broken for some
> unrelated modifications).
> Again, I can't tell how the code you are writing fits in the general
> picture, but since you opened a "PROPOSAL", it seems that it is not just a
> simple reorganization or clean-up.
> With that "new-feature" branch, curious or interested users could start
> actually testing such a new code and, later on, we could have a better
> opinion if the feature is mature enough (and used enough) to be merged (and
> maintained) in the main branch.
>
> I hope to have been clear.
>
> WDYT ?
>
>
>
> Il giorno mer 4 dic 2024 alle ore 14:51 Mark Proctor <[email protected]>
> ha scritto:
>
> > I have opened a ticket for the Sequential Logic work I'm doing.
> > https://github.com/apache/incubator-kie-drools/issues/6182
> >
> > I had a slight pause, but I have now resumed this work.
> >
> > The sequential engine is a dedicated subsystem that integrates with Rete's
> > alpha network but uses a state machine rather than Rete's beta network to
> > drive the sequence matching. The current temporal operators (before, after,
> > etc.) all require beta joins, which are not as efficient as a state machine
> > and are not as flexible for complex sequences with loops.
> >
> > When a sequence is matched, it enters the beta network for additional
> > relational joins or rule firing. Future versions will optimise the network
> > to avoid entering the beta network and fire immediately.
> >
> > Under the hood is a dedicated state machine that moves through states when
> > signals are received from the SignalProcessors; the state machine is
> > optimised for integrations for the sources it interacts with. Those signals
> > are provided by logic gates once they become satisfied. The logic gates
> > matched data received from the event stream, which itself is from the alpha
> > network. The "feel" of the system is similar to how regular expression
> > matching works.
> >
> > Because it only wants to attempt to match data for the current active
> > sequence or subsequence, it uses a flat list of current patterns to match
> > against. Bitmasks are used to get efficient routing from the input of data,
> > to the pattern matching to the appropriate logic gates and their parent
> > sequence.
> >
> > The branch can be found here:
> > https://github.com/mdproctor/drools/tree/sequentiallogic
> >
> > It's early days, however a lot of the unit tests are in place to show how
> > it works, but it's currently still very low level.  For those interested, a
> > lot of the unit tests can be found here:
> >
> > https://github.com/mdproctor/drools/tree/sequentiallogic/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/phreak/sequencing
> >
> >
> > A sequence has 1...n steps. Currently, it supports LogicCircuits, Actions,
> > Aggregators and Subsequences.
> >
> >
> > https://github.com/mdproctor/drools/tree/sequentiallogic/drools-base/src/main/java/org/drools/base/reteoo/sequencing/steps
> >
> >
> > This test shows how to construct the logic gates, which are used within a
> > LogicCircuit:
> >
> >
> > https://github.com/mdproctor/drools/blob/sequentiallogic/drools-base/src/main/java/org/drools/base/reteoo/sequencing/signalprocessors/Gates.java
> >
> >
> > https://github.com/mdproctor/drools/blob/sequentiallogic/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/phreak/sequencing/PhreakSequencerLogicGateTest.java
> >
> >
> > A LogicGate is a type of SignalProcessor:
> >
> >
> > https://github.com/mdproctor/drools/blob/sequentiallogic/drools-base/src/main/java/org/drools/base/reteoo/sequencing/signalprocessors/LogicGate.java
> >
> >
> > Loops can occur on individual SignalProcesses or on Subsequences. Where
> > it's on a LogicGate, it tests the number of times the individual LogicGate
> > is matched.
> >
> >
> > https://github.com/mdproctor/drools/blob/sequentiallogic/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/phreak/sequencing/PhreakSequencerSignalProcessorCounterTest.java
> >
> >
> > Here is the conditional loop for SubSequence:
> >
> >
> > https://github.com/mdproctor/drools/blob/sequentiallogic/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/phreak/sequencing/PhreakSequencerSequenceLoopTest.java
> >
> >
> > Timers are supported as well on signal processors and subsequences. The
> > timer can be used to add delays or do timeouts.
> >
> >
> > https://github.com/mdproctor/drools/blob/sequentiallogic/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/phreak/sequencing/PhreakSequencerSignalProcessorTimerTest.java
> >
> >
> > https://github.com/mdproctor/drools/blob/sequentiallogic/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/phreak/sequencing/PhreakSequencerSequenceTimerTest.java
> >
> >
> > Lastly, you can do aggregations over subsequences:
> >
> >
> > https://github.com/mdproctor/drools/blob/sequentiallogic/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/phreak/sequencing/PhreakSequencerAggregatorTest.java
> >
> >
> > The next steps are to improve the unit tests and start to try and expose
> > this in the DRL language itself so end users can start to use it.
> >
> >
> > Regards
> >
> >
> > Mark
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > Mark
> >

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to