perf: UseMultilineReverseSuffix uses DFA instead of PikeVM (#99) #100
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Replace O(n*m) PikeVM verification with O(n) DFA verification for multiline suffix patterns.
Issue: #99 (Rust regex 84x faster on
(?m)^/.*\.php)Root Cause (from research)
The 84x performance gap was NOT due to missing DFA state acceleration. Research revealed:
dfa/lazy/MultilineReverseSuffixSearcherused PikeVM (O(n*m)) instead of DFA (O(n))Changes
MultilineReverseSuffixSearcher.forwardDFAreplacespikevmfieldlazy.DFA.SearchAtAnchored()for linear-time anchored matchinglazy.CompileWithConfig()creates forward DFA with proper configPerformance
Testing
Technical Details
Research document:
docs/dev/research/DFA_STATE_ACCELERATION_RESEARCH.mdKey insight from Rust code (
hybrid/search.rs):Fixes #99 (Phase 1)