Skip to content

Commit d1924b7

Browse files
author
Foster Guo
committed
chore: bump version to 0.15.4
1 parent 3daf9fb commit d1924b7

8 files changed

Lines changed: 47 additions & 7 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,46 @@
11
# Changelog
22

33

4+
## 0.15.4 - 2026-04-15
5+
6+
### Performance
7+
8+
- **Core**: Custom DFA `next_state` walk via `Automaton` API, replacing materialized-match iteration. Enables fused prefilter-aware dispatch: Teddy active → materialize + `try_find_overlapping`; no prefilter → stream via `next_state` loop.
9+
- **Core**: Replace NEON scratch-buffer scan with bitmask extraction for SIMD delete filtering.
10+
- **Core**: Switch engine selection from byte-ratio heuristic to character density (`bytecount::num_chars / len`), improving CJK dispatch accuracy.
11+
12+
### Added
13+
14+
- **Core**: `BytewiseDFAEngine` — extracted DFA engine encapsulating `dfa::DFA`, `dfa_to_value`, and `has_prefilter` flag with 4-way fused-path dispatch.
15+
- **Core**: Parallel batch API (`batch_is_match`, `batch_process`, `batch_find_match`) via rayon work-stealing. Behind `rayon` feature flag.
16+
- **Core**: Profiling boundaries (`#[profiling::function]`) on key DFA and matcher functions.
17+
- **Tooling**: Benchmarking orchestration (`scripts/run_benchmarks.py`) and interactive Plotly visualization (`scripts/bench_viz.py`).
18+
- **Tooling**: Profiling workflow via macOS Instruments (`just profile record/analyze`).
19+
20+
### Fixed
21+
22+
- **Core**: Delete dual-scan correctness — propagate mask bit to root when Delete is a direct child, ensuring patterns with deletable characters are scanned against both original and transformed text.
23+
- **Core**: Merge colliding `ProcessType` buckets before `parse_rules` to prevent pattern index conflicts.
24+
25+
### Changed
26+
27+
- **Core**: Replace `#[inline(always)]` with `#[inline]` across codebase, letting LLVM decide inlining under full LTO.
28+
- **Core**: Streamline automata compilation by removing unnecessary closures.
29+
- **Core**: Simplify Delete dual-scan by reusing `apply()` result instead of redundant transform.
30+
- **Core**: Extract seek helper and encapsulate dual-scan check in scan module.
31+
- **Core**: Replace inline `super::` paths with top-level imports for readability.
32+
- **Core**: Introduce `MatcherError` enum for structured construction failure reporting.
33+
- **Config**: Clean up configuration files, remove unnecessary flags, consolidate environment variables.
34+
35+
### Dependencies
36+
37+
- Update `bitflags`, `daachorse`, `rayon`.
38+
39+
### Documentation
40+
41+
- Comprehensive call-graph documentation for public API and internal logic.
42+
- Update CLAUDE.md for `BytewiseDFAEngine` and prefilter-aware dispatch.
43+
444
## 0.15.3 - 2026-04-12
545

646
### Changed

‎Cargo.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ readme = "README.md"
1313
keywords = ["text", "string", "search", "pattern", "multi"]
1414
license = "Apache-2.0 OR MIT"
1515
repository = "https://github.com/Lips7/Matcher"
16-
version = "0.15.3"
16+
version = "0.15.4"
1717

1818
[profile.dev]
1919
split-debuginfo = "unpacked"

‎matcher_c/Cargo.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@ name = "matcher_c"
1717
crate-type = ["cdylib", "rlib"]
1818

1919
[dependencies]
20-
matcher_rs = { path = "../matcher_rs", version = "0.15.3", features = ["serde", "rayon"] }
20+
matcher_rs = { path = "../matcher_rs", version = "0.15.4", features = ["serde", "rayon"] }
2121
sonic-rs = "0.5.8"

‎matcher_java/Cargo.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ crate-type = ["cdylib"]
1616
path = "src/main/rust/lib.rs"
1717

1818
[dependencies]
19-
matcher_rs = { path = "../matcher_rs", version = "0.15.3", features = ["serde", "rayon"] }
19+
matcher_rs = { path = "../matcher_rs", version = "0.15.4", features = ["serde", "rayon"] }
2020
jni = "0.22.4"
2121
sonic-rs = "0.5.8"

‎matcher_java/README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ cp target/release/libmatcher_java.dylib matcher_java/src/main/resources/ # .so
3535
```xml
3636
<groupId>com.matcher_java</groupId>
3737
<artifactId>matcher_java</artifactId>
38-
<version>0.15.3</version>
38+
<version>0.15.4</version>
3939
```
4040

4141
## Usage

‎matcher_java/pom.xml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.matcher_java</groupId>
88
<artifactId>matcher_java</artifactId>
9-
<version>0.15.3</version>
9+
<version>0.15.4</version>
1010

1111
<name>matcher_java</name>
1212
<url>https://github.com/Lips7/Matcher</url>

‎matcher_py/Cargo.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ name = "matcher_py"
1818
crate-type = ["cdylib"]
1919

2020
[dependencies]
21-
matcher_rs = { path = "../matcher_rs", version = "0.15.3", features = ["serde", "rayon"] }
21+
matcher_rs = { path = "../matcher_rs", version = "0.15.4", features = ["serde", "rayon"] }
2222
pyo3 = { version = "0.28.3", features = ["extension-module"] }
2323
sonic-rs = "0.5.8"
2424

‎matcher_py/pyproject.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[project]
22
name = "matcher_py"
33
description = "A high-performance matcher designed to solve LOGICAL and TEXT VARIATIONS problems in word matching, implemented in Rust."
4-
version = "0.15.3"
4+
version = "0.15.4"
55
readme = "README.md"
66
requires-python = ">=3.8"
77
authors = [{ name = 'Foster Guo', email = "f975793771@gmail.com" }]

0 commit comments

Comments
 (0)