Skip to content

v2.2.0

Choose a tag to compare

@swernerx swernerx released this 15 Oct 19:37
Immutable release. Only release title and notes can be modified.

2.2.0 (2026-10-15)

Features

  • api: build a DFA alongside a single regex with RegexBuilder::dfa (#367) (3a463c7)
  • bench: add source-backed regex comparison corpus (8351c44)
  • bench: compare regexr and source-backed tokenizer workloads (508a30a)
  • bench: publish verified Blacksmith regex results (28e54a0)

Bug Fixes

  • bench: distinguish standard and error-aware Ferroni APIs (3f6ce91)
  • ci: reuse registered Blacksmith workflow for comparison (e27adf6)
  • deps: update actions/download-artifact action to v8 (#376) (4340b2b)
  • deps: update dependency jdx/mise to v2026.10.10 (#374) (2a692ca)
  • deps: update dependency lucide-react to v1.55.0 (94f7fb9)
  • deps: update docs site (#375) (bd30ea6)
  • deps: update github actions (88b27c1)
  • regcomp: compile possessive one-character repeats as C's PUSH/POP loop (4304395)
  • regexec: return the longest match only for a compiled FIND_LONGEST (18dbc76)
  • regexec: step the character map search over malformed UTF-8 as C does (a84b15e)
  • scanner: key the pre-filter's last recorded state by cache clear (#365) (f2dee22)

Performance Improvements

  • api: answer "match" from an exact seek without a retry bound (#378) (7794755)
  • api: answer is_match from an under-approximating accept seek (#387) (80ff3b4)
  • api: reject capture searches with the seek and attempt only the anchored start (#379) (e77e68f)
  • api: track captures in the first attempt and skip repeated searches after empty matches (#381) (01230d3)
  • compile: cut the cost of Regex::new passes (#363) (78fd11c)
  • dfa: keep seeks exact across compiler-made possessive groups (#383) (fbba07c)
  • regcomp: possessify greedy repeats across optional groups, alternations and end anchors (#385) (da2642f)
  • regcomp: run \X as one instruction and narrow multibyte lead bytes after look-behinds (#384) (f1fdcdc)
  • regcomp: run bounded single-class repeats as counted loops (#386) (f8f0611)
  • regex: batch failed forward guards in the interpreter (#362) (42bb9c9)
  • regex: batch short ASCII look-behinds in CSS scanning (#357) (d791bf1)
  • regex: cut fixed per-search costs and decide long guard chains with skip gates (#366) (3b38e91)
  • regexec: fuse word look-behinds and honor the stack limit in fused paths (#368) (3ec52ea)
  • regexec: skip lazy-loop positions to the required literal and inline one-byte look-behinds (#380) (dfaef12)
  • scanner: cheaper DFA pre-filter scans and builds, plus a cold replay lane (#364) (5e93328)
  • seek captured lazy dot loops (bfe4ccb)
  • unicode: decide grapheme breaks with a property table and an ASCII fast path (#377) (b6e4b12)