Skip to content

Latest commit

 

History

History
525 lines (416 loc) · 46.8 KB

File metadata and controls

525 lines (416 loc) · 46.8 KB

0.13.0 - 2026-08-13

Breaking Changes

  • switch default to CaseMatching::Smart (e5f0ee2)

Features

  • add WASM SIMD128 backends (8d11966)
  • add no_std support (efeab87)
  • drop dead scalar path in wasm (a9be0d1)
  • add download.sh script for bench data (145deff)
  • auto-detect parallelism when threads == 0 (17ee653)
  • saturate score instead of panicking (93785c2)
  • reduce wasm binary size (6deefc0)
  • c and c++ bindings (2bd75b9)
  • python bindings (b30b6e2)
  • wasm bindings (869c771)
  • add justfile (35bf373)
  • add changelog update to justfile (19c6783)

Bug Fixes

  • max_needle_len returning incorrect value (90aa3fc)

Documentation

  • update lib.rs "used by" section (1ac6e62)
  • clarify unicode limitations (e63827b)
  • tidy config doc comments (c418120)
  • rework safety section (9592c36)
  • add bindings to readme (450523f)
  • rewrite binding comments/readmes (277c030)
  • misc links (daaae5b)
  • add CHANGELOG via git-cliff (507409b)
  • cleanup wasm binding docs (0826872)
  • lib-rs and expand bindings docs (03ae7fe)
  • add LICENSE to wasm/py bindings (d395c2b)

0.12.0 - 2026-07-30

Breaking Changes

  • per-pattern config (PatternConfig) (6d2f478)

Features

  • add scoring.max_needle_len() (8f14c04)

Bug Fixes

  • ensure delimiter bonus applied on first char (da1adf3)
  • remaining arithmetic panics (3476999)
  • ignored unicode matching indices (074252f)
  • pattern space double escape (940bcb9)
  • unicode match end col (b33d28c)
  • mixed multi-byte unicode failing prefilter (b16ad8c)
  • check all instruction sets in sse smith waterman (dd38a4b)
  • greedy gap penalty overflow and end col truncation (4900c18)
  • unsound u8 backend selection and overflow guard bounds (927efbe)
  • case flipped unicode match hidden by decoy last byte in prefilter (bf4a247)
  • match_list_indices dropping score 0 haystacks (e4fd349)
  • guard against gap penalty overflowing u16/u8 (250ed36)
  • switch from castsi -> zextsi (8da6dc9)
  • unicode-aware char count for scoring guard (48f683e)
  • pattern escape parsing (95efcf6)

Refactor

  • consolidate include_exact logic (9b48b09)

Documentation

  • add television and atuin to readme! (3fb4793)
  • fix prefilter haystack mask examples (2402db5)

Performance

  • single gather vec for multi-pattern matching (02faa31)

New Contributors ❤︎

  • @ryanmab made their first contribution in #88

0.11.0 - 2026-07-13

Breaking Changes

  • switch to u32 indices (2532849)
  • Pattern and multi-pattern matching (bbcfd0e)
  • drop top level match_* functions (28688b5)
  • rework SortStrategy with reversed variants (6831669)

Features

  • prefix, suffix, substring, exact matching (#86) (b55fad6)
  • SortStrategy enum, fix parallel ordering (a7d456e)
  • limit threads based on haystack count (af0634a)

Bug Fixes

  • arm64 load_partial on len 8 (022a5ae)
  • prefix bonus applied due to prefilter substr (3b9ba7b)
  • ensure parallel matcher sorts by index (41fc7d5)
  • remaining uses of top level match_* (96ea2fa)
  • match_greedy prefix bonus (da380f5)
  • escaped ! on query pattern (d4eced5)

Documentation

0.10.0 - 2026-07-03

Breaking Changes

  • simplify matcher dispatch, drop some APIs (364fc0e)
  • drop some APIs, add miri + proptests (fc16a54)
  • *_matches on radix_sort/k_merge (1e4267b)
  • many rare panics and typos (9c3b8dd)
  • rename UnicodeMatching::Respect to Always (9024633)

Features

  • u8 smith waterman scoring (2e5a912)
  • avx512 smith waterman (eaff2fe)
  • avx512 u16 smith waterman (ec2a8f6)
  • switch prefilter skipped_chunks to skipped_chars (0b18811)
  • avx512 prefilter (651b4e1)
  • rewrite prefilter with generic backend (457c0ce)
  • smart and case sensitive matching (32c5ff3)
  • custom k-way merge, drop itertools (e8237bb)
  • add back set_* matcher APIs (0540458)
  • replace raw_cpuid with is_x86_feature_detected (edcddf6)
  • add fzf bench via std::thread::sleep (9004beb)
  • unicode prefilter, drop fuzzing (36befb8)
  • add unicode arabic/korean benches (4961de0)
  • rework unicode approach (3eb7cbf)
  • avoid updating matcher if nothing changed (e4fc06c)
  • unicode prefilter typos (0123732)
  • support unicode CaseMatching::Smart (06c9494)
  • case insensitive unicode matching (88459c2)
  • unicode smith waterman (0bf1fa8)
  • UnicodeMatching enum to control unicode behavior (ca2f547)
  • swap out bolero for proptest (5544781)
  • match_iter API, fuzzy_match iter ext (af7cebf)
  • add match_list_parallel to Matcher, restructure (4fd9590)
  • Matcher::match_one and extensive docs (c778119)
  • simplify nix flake (e4f9dba)

Bug Fixes

  • match_end_col sort tests (ae9d0b6)
  • gate prefilter overread behind safe_read (#80) (7892da7)
  • prefilter typo chunk boundaries (9312dce)
  • match_end_col sort bench (599c950)
  • keep match_list and match_list_indices filtering in sync (34c8bac)
  • assert nucleo returns no intermediate snapshots (98139d9)
  • multi-byte unicode char incorrect indices (c853a1b)
  • incorrect score_fits_in_u8 calculation (59a17d8)
  • match_one not inlined (bd87378)
  • arm neon movemask (35208a8)
  • unicode incorrect indices (c9ee4b3)
  • many typos, miri bug, naming, docs (14d2f19)
  • match delimiters between greedy and sw (9cb9979)
  • incorrect alignment indices on unicode (e5c7bc5)

Refactor

  • move sw backends under sw::simd::backend (441b78c)
  • move prefilter backends under prefilter::backend (523d9eb)
  • move prefilter algorithm into algo (121851f)
  • specialize matcher by backend (e582817)
  • simplify prefilter wrappers (9ce2b5e)
  • simplify smith waterman wrappers (8d10c81)
  • move smith_waterman::simd to smith_waterman (393aed0)
  • create Matcher once in benchmarks (9af3b6c)
  • drop prefilter Backend::broadcast (3c386b2)
  • unicode matching helper, backwards scan (2ed88a4)
  • split up prefilter/algo file (eb60749)
  • move gap impls to smith_waterman::algo (6297c90)
  • fix missing self.needs_unicode case (c03999a)

Documentation

  • misc rewriting and cleanup (119b78c)
  • update benches and prefilter docs (dd7bbf6)
  • update benchmarks (c56dac9)
  • unicode (5ee37ee)
  • mark unicode gap docs as text (3aeb1dc)
  • update benchmarks (50c718f)
  • add note about NEON prefilter performance (7f8defb)
  • match lib.rs docs to README (7c8d7e0)
  • misc typos and renames (6edeb89)
  • update benchmarks (899c473)
  • add keywords/categories (e87e0bd)
  • proper casing for nucleo/fzf (d5f9282)
  • drop number for fuzzy_match slowdown (c56f614)

Performance

  • avx512 shift right lanes (0287fd5)
  • trim prefilter match windows (b1cbddf)
  • specialize avx2 prefilter no typo (6923519)
  • specialize avx512 prefilter typos (d5b4c57)
  • add avx512 prefilter masked loads (4f2d57a)
  • move target features to matcher dispatch (5c9145b)
  • increase parallel chunk size (88f52fb)
  • avoid sorting on empty needle (114d188)
  • per-specialization hot loops (82bae12)

Testing

  • add prefilter backend parity cases (32436c5)
  • swap proptest for bolero, integration tests, expand suite (d2941c3)
  • fuzzing (55ea87c)
  • extra unicode cases (75ccfe1)
  • share generator, simplify sw backend tests (c248438)

New Contributors ❤︎

  • @leonardcser made their first contribution in #80

0.9.0 - 2026-04-04

Features

  • add scalar implementation fallback (#76) (3aff5b5)
  • track match end column position via match_end_col feature (#75) (53be326)

Documentation

  • update fzf comparison on docs.rs (8b59da3)

Performance

  • use radix sort for sorting Matches (#74) (8b4d19c)

New Contributors ❤︎

  • @Xeonacid made their first contribution in #76

0.8.3 - 2026-03-10

Features

  • Optimize latest rewrite (#72) (cd448bd)

Bug Fixes

  • zero out missing null matrix rows (a672ae8)
  • dont skip prefilter for max typos >= 3 in sse (f2ab3fb)
  • 256-bit SSE smax_u16 combining 8 bit lanes (b64cdd2)

Documentation

  • drop fzf comparison (4862d4a)
  • fix fzf bench, thanks @junegunn (edf7a58)
  • fix fzf bench spacing and formatting (efc3f88)
  • fix readme example (6c69acd)
  • update fzf benchmarks (97ac04d)

Performance

  • drop a few instructions for gap extension (5bec7b1)

0.8.2 - 2026-02-20

Bug Fixes

  • guard against overflow on score_haystack (b972e79)
  • dont skip chunks when typos are allowed (aaaa652)
  • zero out null matrix rows (7162754)

Documentation

0.8.1 - 2026-02-19

Refactor

  • drop reference implementation (7a4b861)

Documentation

0.8.0 - 2026-02-19

Features

  • intra sequence smith waterman (bbcf283)
  • matcher, many bonuses, prefilter perf (cfca682)
  • drop v1 and nightly, adopt v2 (ae0fcdd)
  • move matchers into structs, add parallel matching (eb0aa7f)
  • runtime feature detection for prefilter, reorganize matcher (4c9ac62)
  • flatten score matrix, wip incremental matcher (bf4ccae)
  • generic SIMD vectors (dc9cb6d)
  • a very slow incremental matcher (6c20e92)
  • double pumped SSE256, runtime feature detection, drop aligned (f99eb90)
  • vector tests, drop par sort, assert needle len (9d34e4b)
  • aarch64 support, matrix fixes, prefilter runtime feature detection (6877319)
  • test idx_u16 implementation (777ed94)
  • guard against typos leading to all matches (f1d6171)
  • drop nightly toolchain!! (86c54f0)
  • indices and alignment api (#61) (8a8a5be)
  • add match_iter and match_iter_indices to Matcher (96581ca)
  • add 2 typo and 3 typo benchmarks (5432842)
  • skip prefiltering for typos >= 3 (5e996de)

Bug Fixes

  • attempt to subtract with overflow (#55) (4abc19d)
  • prefix score bonus (22403bf)
  • gaps not propagating past 16 bytes (b4ffb66)
  • dont sort parallel when sort is false (563e8ee)
  • store and use adjacent match mask, minor gap perf (114218d)
  • max typos off by one (85e6bba)
  • drop guard against typos leading to all matches (4a6eb14)
  • matrix struct, use match masks in alignment (2bf5878)

Refactor

Documentation

  • update prefilter safety (7385671)
  • update readme and benchmarks (0e3033e)
  • fix skim link (04256c0)
  • match_iter example (da481cb)
  • minor edits to smith waterman section (59e3e6e)
  • clarify overlapping load (b08f281)

Performance

New Contributors ❤︎

  • @raui100 made their first contribution in #55

0.7.0 - 2026-02-03

Bug Fixes

  • build on latest nightly (#54) (45dd259)

[0.6.0] - 2025-11-14

Breaking Changes

  • drop min_score option (8d7c445)
  • Options -> Config, Scoring options, index_in_haystack -> index (539cbef)
  • remove unused modules from api, docs (e5ad501)
  • use ref borrowing for config (#47) (b7f2b5f)

Features

  • initial (2adc343)
  • cleanup and rename (8bc2eee)
  • add index_in_haystack to match (50a22da)
  • reduce prefix bonus (2cc6511)
  • adjust scoring to encourage delimited/capitalized matches (d4c715d)
  • temporarily disable capitalization bonus (3e7d321)
  • exact match bonus (1773ea4)
  • matching case bonus, delimiter fixes (a5089ca)
  • tests (c25a00a)
  • drop useless simd_max(zero) (8c3037f)
  • drop useless select and simplify code (#3) (f053b13)
  • enforce 128 bit SIMD, avoid 256 bit (0d42d37)
  • matched character indices (d632d11)
  • add delimiter bonus on colon (78aa772)
  • add debug, clone, copy to options (7c2aa46)
  • implement smith_waterman using a generic function (#6) (8f174de)
  • wip score matrix (df9107e)
  • non-simd reference implementation (a960f12)
  • add iai benchmark (0ea8d8f)
  • alignment for typo count (4016d65)
  • add debug trait to SimdNum (5ecc9ba)
  • prefilter with typo proof of concept (65ce6aa)
  • rework benchmarks (e798541)
  • update reference implementation (0e1d186)
  • rework iai benchmark (0abc726)
  • replace prefilter with max typos option (da006cc)
  • filter by max typos, minor perf improvements (fa3bd32)
  • bitmask prefilter (6d08a89)
  • indicate exact matches (#14) (75c9dc5)
  • drop memchr dependency (bf27dba)
  • update rand/rand_distr (283e4c4)
  • increase score bonus for matching case (6415483)
  • increase max length to 1024 (1a2a201)
  • reintroduce prefiltering when haystack is too long (1c86f18)
  • prepare to move smith_waterman inner loop into its own function, and for the incremental matching API (be141ae)
  • enable capitalization bonus (5ba2cbc)
  • incremental matching api (2e1c635)
  • compute all_time_max_score after score_matrix (8e694d6)
  • add benchmark (af6623c)
  • avoid sorting for incremental matcher (63711eb)
  • restructure codebase (4cc3699)
  • use case matching ignore for nucleo benchmark (14718d6)
  • lazy and stack allocated bucket initialization (8c7686d)
  • drop lazy bucket initialization (1b5ea29)
  • increase benchmark sample count from 1000 to 10000 (86b515e)
  • expose IncrementalMatcher and match_list (6329b44)
  • add serde Serialize and Deserialize derives (a472695)
  • support any string type (9007ef1)
  • no delimiter bonus for delimiter chars (d96d203)
  • split up simd code, add matched indices support (2c96213)
  • runtime instruction detection (44482c3)
  • decrease gap penalties (4a1d113)
  • probably broken skim benchmark (d981215)
  • ignore haystacks shorter than needle - max typos (bd9be77)
  • avoid processing unreachable matrix elements (#29) (c23d1ab)
  • stop calculating typos after reaching max typos (#30) (0742f8c)
  • add greedy fallback matcher (a308373)
  • multithreading (#32) (6fd0960)
  • flake dev shell with aarch64 and x86_64 targets (b982c62)
  • fallback to greedy matching on >512, rather than >1024 (004cb63)
  • increase gap penalty, reduce delimiter/capitalization bonus (7a8cd28)
  • offset prefix bonus (2701d9f)
  • drop SimdNum in favor of fixed u16 score (a51b58e)
  • SIMD string interleave (fd31411)
  • use x86-64-v3 for benchmarking (2744cfb)
  • use multiversion, generic interleave (1246f97)
  • multiversion bitmask, misc tuning (50d1815)
  • prefilter multiversion and cleanup (06914dd)
  • SIMD intrinsics interleave (92f67d8)
  • reference implementation offset prefix bonus (afe55ea)
  • modularize and update benchmarks (0e52f55)
  • upgrade to rust 2024 (1c003ed)
  • simd and intrinsics prefilter (#43) (8637faf)

Bug Fixes

  • (bench) return results from routine (#13) (0bbeb41)
  • dont give capitalization bonus on first character (284aa89)
  • add missing buckets (3a8f894)
  • add more smith_waterman_macro bucket (#1) (d910bec)
  • prefilter (1f7d3f9)
  • prefilter not ignoring case (5e6e4c6)
  • bench crate name (f2ae831)
  • capitals on needle never matching (36e564b)
  • add missing bitand to macro (bba669b)
  • get current column scores as mutable ref (570d68d)
  • remove unnecesary conversion to u16 (77f0ba5)
  • properly ignore capitalization on prefix (81be460)
  • matched indices with typos (a9d07fe)
  • ensure minimum length of 1 for generate_haystack (4107c75)
  • ignore exact match test for incremental matcher for now (330243e)
  • support different string types per arg (74ff035)
  • add dot delimiter to reference implementation (31f9ae0)
  • avoid capitalization bonus on capital after lower (a84ebfe)
  • out of bounds and div by zero panics (57bb136)
  • conditional compile avx2 and avx512 paths (6d0fa67)
  • overflow on long needles with small haystack (8de16e4)
  • prevent thread count go to 0 (#41) (cbf566d)
  • ensure score matrix dimensions >=1x1 (8c1153a)

Refactor

  • (bucket) make generic on SimdNum (a301a74)
  • (smith_waterman) traits instead of bounds (b198250)
  • (smith_waterman) always return u16 slice (1408b37)
  • remove dead procedural macro code (48f6c59)
  • remove unused first char multiplier (7e6e120)
  • rename curr_col_score_simds to curr_col_scores (16be4d0)
  • make smith_waterman generic on number of simd lanes (c2fbb36)
  • impl simd traits with a macro (2dfb23a)
  • make constants u16 again (#12) (096163b)
  • clean up needle_len (c23db08)
  • minor cleanups / clippy (2d33e60)
  • move smith waterman inner loop into its own function (59e6754)
  • simplify prepare_haystack (5709568)
  • prefilter method selection (6faf2f5)
  • rename expandable vec to threaded vec (d6d3e0b)

Documentation

  • add note for downloading benchmark data (aca1794)
  • add basic algorithm description (e3325e9)
  • add note about typo resistance (005e443)
  • add benchmarks (edc713a)
  • benchmarks formatting (6fc46e9)
  • update benchmarks (6ce6b70)
  • clarify how 2+ typos works (90a276c)
  • cleanup readme (48d2f36)
  • fix typo (a535bd7)
  • add description and license to Cargo.toml (6421984)
  • add ideas section (5bf7e6f)
  • clarify algorithm (d490de7)
  • update benchmarks, elaborate on implementation (f232a0c)
  • fix indentation in implementation section (1448e19)
  • benchmarks grammar (bd63226)
  • add repository to Cargo.toml (021d2eb)
  • clarify long list tip (6b65d87)
  • update benchmarks (~1.25x speed-up) (3150714)
  • fix out of date match_* docs (ca69df5)
  • drop emojis from benchmarks (a026b01)

Performance

  • (typos) compute max score and position idx using simd (#11) (f2d0797)
  • make EXACT_MATCH_BONUS a u16 (5c7ef42)
  • remove unneeded arrays (825467f)
  • simplify haystack -> simd (116d061)
  • move constants to SimdNum trait (ff9e75b)
  • prefix_mask doesn't need to be simd (610f490)
  • map needle slice directly, convert to N type in loop (917f1da)
  • left_gap_penalty_masks doesn't need to be an array (00be248)

New Contributors ❤︎

  • @saghen made their first contribution
  • @dmtrKovalenko made their first contribution in #47
  • @stefanboca made their first contribution
  • @ruslanSorokin made their first contribution in #14
  • @Danielkonge made their first contribution in #3
  • @0xJWLabs made their first contribution in #1