Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bindings for Rust #66

Closed
wants to merge 9 commits into from
Closed

Bindings for Rust #66

wants to merge 9 commits into from

Conversation

michaelgrigoryan25
Copy link
Contributor

@michaelgrigoryan25 michaelgrigoryan25 commented Jan 10, 2024

Hey @ashvardanian,
Hope you are having a great new year so far!

This pull-request includes a partial bindings implementation for StringZilla. Currently there is a single function binding for sz_count_char. Separate tests from the Rust side are currently failing, but I believe that it is due to some silly mistake in the code, we will have to look further.

The way bindings are implemented for Rust is the following:

  • In build.rs, cc compiles the StringZilla's header file into a separate static library inside of Rust's target folder and bindgen generates a Rust interface for the functions defined in the library.
  • lib.rs implements a Rust-friendly wrapper around the library for an easy access. It also contains tests so that we can be sure that the bindings do not create any undefined behavior.

To properly bind the functions, I had to create separate header and source files and basically wrap the original functions inside of a non inline static function context (see rust-lang/rust-bindgen#2405), so that bindgen can generate the bindings. Here's an example from rust-bindings.c:

sz_size_t si__count_char(sz_string_start_t const haystack,
                         sz_size_t const haystack_length,
                         sz_string_start_t const needle) {
    return sz_count_char(haystack, haystack_length, needle);
}

Let me know what you think.
Best,
Mikayel.

@ashvardanian
Copy link
Owner

Hi, thanks for the PR, @michaelgrigoryan25! I am afraid, a separate header is not a scalable solution. Let's think of a way to patch the primary header to avoid that.

@michaelgrigoryan25
Copy link
Contributor Author

michaelgrigoryan25 commented Jan 11, 2024

@ashvardanian,

I just pushed a fix which now generates the proper definitions for inline statics automatically from the header file (rust-lang/rust-bindgen#2405). At this point we are good to go and we can start implementing a Rust-friendly interface for the library. There are no linker errors, but we still need to figure out why the following test case is failing

#[test]
fn count_char() {
    let haystack = super::String::new("abba");
    assert_eq!(haystack.count_char("b"), 2);
}

Here is the output:

---- tests::count_char stdout ----
thread 'tests::count_char' panicked at 'assertion failed: `(left == right)`
  left: `1`,
 right: `2`', rust/lib.rs:36:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

I think this has something to do with the way that we are currently handling sz_string_view_t creation, though I am not entirely sure.

@michaelgrigoryan25
Copy link
Contributor Author

michaelgrigoryan25 commented Jan 11, 2024

I have also managed to fix the failing test case. It was happening because I was using a pointer to the temporarily allocated CString. The test passes now.

@michaelgrigoryan25
Copy link
Contributor Author

michaelgrigoryan25 commented Jan 11, 2024

For some reason the following test case is passing, is this behavior expected @ashvardanian:

        let haystack = super::String::new("abba");
        assert_eq!(haystack.count("ab"), 2); // 2 == 2 passes, but there is only 1 'ab'

Is this the expected behavior for count?

@ashvardanian
Copy link
Owner

The version you are taking from the main branch can only count the number of occurrences of one character. The main-dev is vastly different and more functional.

Can we avoid reimplementing the string class in Rust and just override some of it's methods?

@michaelgrigoryan25
Copy link
Contributor Author

michaelgrigoryan25 commented Jan 11, 2024

We can achieve something like that using custom trait the following way in our lib.rs:

trait Stringzilla {
    fn sz_count(&self, ...) -> ...;
}

impl Stringzilla for String {
    fn sz_count(&self, ...) -> ... { ... };
}

and then whenever we want to make these methods available for the String type, we would just do the following in the code:

use stringzilla::Stringzilla;

let x = String::from("x").sz_count(...);

@michaelgrigoryan25
Copy link
Contributor Author

michaelgrigoryan25 commented Jan 11, 2024

Is there any documentation about StringZilla and it's core functions which need to be implemented? I have started working on my fork's main-dev branch to create the Rust bindings from the up-to-date version of the library.

@michaelgrigoryan25
Copy link
Contributor Author

I will also try to make sure to include no_std support, so that the crate does not depend on Rust's standard library.

ashvardanian added a commit that referenced this pull request Jan 22, 2024
Provices a better baseline for #66
@ashvardanian
Copy link
Owner

That is a great suggestion, @michaelgrigoryan25! Sorry for a late response, I've been a bit overwhelmed the last weeks.

  1. Regarding the PR, please make sure to use the most recent main-dev variant as the baseline. The upcoming v3 C API is quite different v2.
  2. Regarding the Rust bindings, to make the project as light as possible, I avoid bindgen and only use cc, which pre-compiles the C dynamic library with multiple hardware accelerate backends.
  3. It's not trivial to override existing Rust String and str methods with StringZilla variants due to name collisions. One approach I was considering - is to use a wrapper type. For now I've only implemented a wrapper for sz_find as a starting point. Alternatively we can define a custom class - Str and reimplement all the interfaces for compatibility with the standard, similar to what I did for C++, but this may take over a thousand lines and will need a proper test coverage. What are your thoughts on this?

@michaelgrigoryan25
Copy link
Contributor Author

Hey @ashvardanian, no worries, I will make sure to update you on the 1st and 2nd points as we progress through this PR (I might need to create a new one since this one has a few issues with branching and stuff).

Regarding the 3rd point, it is impossible to override existing methods in the standard library and for that matter in any external libraries. The only way to go with this without re-implementing the whole String struct would be to create a trait with all the StringZilla methods and then import them using use statements. Other libraries like rayon also implement custom operations for standard types this way (see https://docs.rs/rayon/latest/rayon/iter/trait.ParallelIterator.html#method.for_each). I think re-implementing the whole String type is pointless unless we find that there are significant performance gains from doing this.

@ashvardanian
Copy link
Owner

For now, the whole API contains only global functions:

pub fn find<H: AsRef<[u8]>, N: AsRef<[u8]>>(haystack: H, needle: N) -> Option<usize>
pub fn rfind<H: AsRef<[u8]>, N: AsRef<[u8]>>(haystack: H, needle: N) -> Option<usize>
pub fn find_char_from<H: AsRef<[u8]>, N: AsRef<[u8]>>(haystack: H, needles: N) -> Option<usize>
pub fn rfind_char_from<H: AsRef<[u8]>, N: AsRef<[u8]>>(haystack: H, needles: N) -> Option<usize>
pub fn find_char_not_from<H: AsRef<[u8]>, N: AsRef<[u8]>>(haystack: H, needles: N) -> Option<usize>
pub fn rfind_char_not_from<H: AsRef<[u8]>, N: AsRef<[u8]>>(haystack: H, needles: N) -> Option<usize>

Not all of the functionality is implemented yet.

Functionality C 99 C++ 11 Python Swift Rust
Substring Search
Character Set Search
Edit Distance
Small String Class
Sequence Operation
Lazy Ranges
Fingerprints

Rust styling and docs can also be improved.

@michaelgrigoryan25
Copy link
Contributor Author

Looks good @ashvardanian! I suggest closing this PR and opening an issue instead, and link this PR to it.

@michaelgrigoryan25 michaelgrigoryan25 closed this by deleting the head repository Jan 25, 2024
This was referenced Jan 25, 2024
ashvardanian added a commit that referenced this pull request Jan 28, 2024
Provices a better baseline for #66
ashvardanian pushed a commit that referenced this pull request Feb 6, 2024
# 1.0.0 (2024-02-06)

### Add

* `_sz_find_3byte_serial` ([d542c4b](https://github.com/ashvardanian/stringzilla/commit/d542c4b3a7430efb0dc5745ee390921b385fec13)), closes [#70](https://github.com/ashvardanian/stringzilla/issues/70)
* `begin`, `size` and other utility C++ functions ([5378a6c](https://github.com/ashvardanian/stringzilla/commit/5378a6c869f0b84b50dd5cd02654b0c9ad476dcd))
* `memmem` to benchmarks ([aa14ac8](https://github.com/ashvardanian/stringzilla/commit/aa14ac8370066b1c48eca4aec2412e3df8230962))
* `MemoryMappedFile` ([28638f8](https://github.com/ashvardanian/stringzilla/commit/28638f85ab8887b036859adc44897bc6d85b3b2e))
* `partition` method in Python ([257ac6c](https://github.com/ashvardanian/stringzilla/commit/257ac6cff6860b2893f939bd16cef97cf9420853))
* `qsort_r` benchmarks for Linux ([e31127a](https://github.com/ashvardanian/stringzilla/commit/e31127a7969bbf3336cbb499504a4fe290c14db1))
* `sort()` and `order()` efficient Py methods ([dd4f57f](https://github.com/ashvardanian/stringzilla/commit/dd4f57f95d239492bc21bf76bcee8dc0b1642d08))
* `sort()` interface for Python ([e657baf](https://github.com/ashvardanian/stringzilla/commit/e657bafa5d709a853b9aeb684bfdec5e37924c65))
* `startswith` & `endswith` ([c1cbb77](https://github.com/ashvardanian/stringzilla/commit/c1cbb77fc29382f04d8ad36de2a28d448a8806e5))
* `Str` concatenation ([1d7fed2](https://github.com/ashvardanian/stringzilla/commit/1d7fed2ee4abf4763cc3d9b21d9515a1beb16cf6))
* `Strs` structure in CPython ([4841a54](https://github.com/ashvardanian/stringzilla/commit/4841a541d327c07305fd3d2ceb7a289a6269116e))
* `sz_copy_serial` implementation ([d47fa1c](https://github.com/ashvardanian/stringzilla/commit/d47fa1c3493013b058b10b7387a4895cf2129fb4))
* `sz_move_serial` implementation (#60) ([1342711](https://github.com/ashvardanian/stringzilla/commit/1342711db45bda465b80b36ff98a058a349adcf1)), closes [#60](https://github.com/ashvardanian/stringzilla/issues/60)
* `sz_string_erase` implementation ([a64e091](https://github.com/ashvardanian/stringzilla/commit/a64e091247da3799fbbed129b95607c639e5ccac))
* Arm Neon character counter ([db2f523](https://github.com/ashvardanian/stringzilla/commit/db2f52388a973f1fbddb14913f8ae273adfc33d2))
* Arm NEON Raita search ([7a085e6](https://github.com/ashvardanian/stringzilla/commit/7a085e61af38a1f28e0b2c7faf13c203eff4bf0a))
* Auto-fetching Google Benchmark ([28311f3](https://github.com/ashvardanian/stringzilla/commit/28311f3fa808c6b42de0959bd59297b493418664))
* AVX-512 for `character_set` search ([543a942](https://github.com/ashvardanian/stringzilla/commit/543a94299a47dc16f64374d10217cf544fe346b2))
* AVX-512 functionality ([cca3d19](https://github.com/ashvardanian/stringzilla/commit/cca3d19ccc5cc72b0e08cd81a8955b79b31dc548))
* AVX-512 implementations for similarity scores ([e205c7a](https://github.com/ashvardanian/stringzilla/commit/e205c7a0ea9534732403d8e24990b74a1803b2ae))
* AVX-512 implementations for substring search ([35f7a11](https://github.com/ashvardanian/stringzilla/commit/35f7a11568b09c5b7e3966139b4935fd95caf1fc))
* AVX-512 Levenshtein distance for longer strings ([2b33e61](https://github.com/ashvardanian/stringzilla/commit/2b33e618e76ca6ffc151adf1f54294f62701374a))
* AVX2 baseline implementation ([a99dd56](https://github.com/ashvardanian/stringzilla/commit/a99dd5672f5b92384fa2645a1c81267c8400ec0f))
* Baseline C++ class ([979bf56](https://github.com/ashvardanian/stringzilla/commit/979bf56b02a13e782a757b5f54324883ed7265cf))
* Baseline NodeJS binding ([7abc456](https://github.com/ashvardanian/stringzilla/commit/7abc456ca8ea5bf494b9a975f14b909cebba5c53))
* Baseline NodeJS binding ([611c2c1](https://github.com/ashvardanian/stringzilla/commit/611c2c12ce16625cfbb0af30ab5dd41f80098e6a))
* Benchmark for [<>] search ([e8dd299](https://github.com/ashvardanian/stringzilla/commit/e8dd29902c5488226d771902f1383625b5f277c4))
* Benchmarks notebook ([317fd7f](https://github.com/ashvardanian/stringzilla/commit/317fd7ff8a949f029d58fd8bedc29d53faafef2f))
* Benchmarks on synthetic strings ([f6d8522](https://github.com/ashvardanian/stringzilla/commit/f6d852213c7c35d38145596c7376a761ee59ac92))
* Buffer protocol support ([f4c17b9](https://github.com/ashvardanian/stringzilla/commit/f4c17b91f17e34fa58b391fc0191c9fdb6588757))
* C++ API for scores and fingerprints ([b8778d0](https://github.com/ashvardanian/stringzilla/commit/b8778d035debb494485974ffe80049ddde268f8f))
* char-set, reverse order, and scoring in Py ([563f264](https://github.com/ashvardanian/stringzilla/commit/563f2647722a386ecd46b00b9c85affe9eb1a759)), closes [#23](https://github.com/ashvardanian/stringzilla/issues/23) [#12](https://github.com/ashvardanian/stringzilla/issues/12)
* Collection-level `append`, `extend` ([5066505](https://github.com/ashvardanian/stringzilla/commit/506650585bbb20c0cdf40ac40db6f65c52187ce6))
* Commonly used character sets ([00cc2f3](https://github.com/ashvardanian/stringzilla/commit/00cc2f3b6ef600559db7e57ec51ca3447af8501d))
* comparsion operators ([abe63e4](https://github.com/ashvardanian/stringzilla/commit/abe63e4a7e89dd02e526ecdb1a7f0505dcbd925d))
* compile-time dispatch for fill/move/copy ([9cb00fc](https://github.com/ashvardanian/stringzilla/commit/9cb00fc154643d2fabec451819ee3a18950ddb9e))
* Counting specific characters or subtrings ([67e71d8](https://github.com/ashvardanian/stringzilla/commit/67e71d8647a8a722cac2e3e7f0385f3f9759e9c0))
* Diagonal order Levenshtein distance computation ([d1ac8e3](https://github.com/ashvardanian/stringzilla/commit/d1ac8e3d1905463beef858b45306e02fe881a7ab))
* Dynamic dispatch ([2059c87](https://github.com/ashvardanian/stringzilla/commit/2059c87c9e5b3150c5b45b1161dd405b6707ee85))
* evals for hash quality ([20b4db0](https://github.com/ashvardanian/stringzilla/commit/20b4db091972a0c797495e1db901f0abb0fc250a))
* Examples of lcoating unique strings ([8f5a09b](https://github.com/ashvardanian/stringzilla/commit/8f5a09bdfd61f9d6d59ada8c1511c0658252e21f))
* Exception-throwing cases for STL strings ([8318b32](https://github.com/ashvardanian/stringzilla/commit/8318b32a72be92adc9cc80ee0b03ec73e62eea17))
* Experimental rolling hashes on NEON ([571d1b2](https://github.com/ashvardanian/stringzilla/commit/571d1b27ed34a76e3070b5bb95049a8347ddfc4d))
* Fast integer division for random generator ([c0cc8ba](https://github.com/ashvardanian/stringzilla/commit/c0cc8ba35349f32cb8220388c03dd6b1b6a27177))
* Fast replacements and alloc-free concat ([3720cd0](https://github.com/ashvardanian/stringzilla/commit/3720cd0309761aecfeb16414995e0f29195a8ce0))
* Full line search benchmarks ([9db22d5](https://github.com/ashvardanian/stringzilla/commit/9db22d544475989a703501392c82dbceae0acf84))
* get item with slice ([ab5e5ac](https://github.com/ashvardanian/stringzilla/commit/ab5e5ac868dce0727858d55315e2f3bcafe20e3b))
* Horspool algorithm for longer patterns ([19ed36c](https://github.com/ashvardanian/stringzilla/commit/19ed36c7fb747b6a6c72572733b74b7efdb75890))
* Hybrid sorting with Radix and Quick Sorts ([e6e532c](https://github.com/ashvardanian/stringzilla/commit/e6e532c79f1f662516c98639cb92c6765ab9edf8))
* Initial Arm Neon support ([9d38c7d](https://github.com/ashvardanian/stringzilla/commit/9d38c7d467f8c6ca3a2c7b82b29cb86bb921f9e6))
* Initial Levenstein distance ([9093983](https://github.com/ashvardanian/stringzilla/commit/9093983b7751480fe999d0b374699c7ff11a056c))
* Levenshtein distance benchmarks ([19f5dd5](https://github.com/ashvardanian/stringzilla/commit/19f5dd59111e4d24d29dac24dc4fd5ec5369048e))
* Levenshtein distance tests in C++ ([1efccd9](https://github.com/ashvardanian/stringzilla/commit/1efccd9dd5a466e5e575ff84136d4e1c5f294015))
* Levenstein distance ([7723703](https://github.com/ashvardanian/stringzilla/commit/7723703295d1bdf22c45176b30e9fdf2c643d9fb))
* Merge-, Insertion-, Quick-sorting algos ([061d523](https://github.com/ashvardanian/stringzilla/commit/061d523b370d63ea9b3a0d0652c1bd7132ca82dd))
* Merge-sort for strings ([60e683b](https://github.com/ashvardanian/stringzilla/commit/60e683ba6d611d037eb49a4aa818a7af424f4cbf))
* Micro-benchmarking notebook ([c70e811](https://github.com/ashvardanian/stringzilla/commit/c70e811c81a1e76ce19a321b0ceeb6886f36fa5f))
* misaligned tests ([1e94b7d](https://github.com/ashvardanian/stringzilla/commit/1e94b7d15f81440392016c169b22b24f36eb0888))
* missing `append`, `assign` STL APIs ([b28136a](https://github.com/ashvardanian/stringzilla/commit/b28136aace2fda73544d9194ccfbf693e2d643c6))
* Mutable string slices ([009080b](https://github.com/ashvardanian/stringzilla/commit/009080b118064186fb6ced5aa76e9229ca3c34df))
* Non-STL Pythonic slicing ([8ca6f03](https://github.com/ashvardanian/stringzilla/commit/8ca6f03bb20be543ea8ea122f36863bdf64bb656))
* Purely `qsort`-based hybrid sort benchmark ([eaef636](https://github.com/ashvardanian/stringzilla/commit/eaef636ff64ef0b9f730f739cb57771f776f4826))
* Python bindings ([1c759c2](https://github.com/ashvardanian/stringzilla/commit/1c759c257afe048026bc89d0a8478067b2e43b0f))
* random `shuffle` for strings collections ([6e3309c](https://github.com/ashvardanian/stringzilla/commit/6e3309c00d75326ed87caaa5673fcd6296b68c7d))
* Random strings generator ([eafaba0](https://github.com/ashvardanian/stringzilla/commit/eafaba00315e553f30b1b6e77d5fdc19b6378341))
* Randomize non-owning ranges ([71890ac](https://github.com/ashvardanian/stringzilla/commit/71890acc26926274b56cf22c94e5d977bc007191))
* Range matchers for charsets ([207d1de](https://github.com/ashvardanian/stringzilla/commit/207d1de4fe99b5b1d0a9c6ddf154f7ca27b32f65))
* read-only operations for `string` ([df10847](https://github.com/ashvardanian/stringzilla/commit/df10847c8b5c4ca29e0ca71b9227fb1f8f33897d))
* reverse order AVX2 & benchmarks ([ac05a39](https://github.com/ashvardanian/stringzilla/commit/ac05a39ba22afe02864da2f9c8bfdd3d8a854a97))
* Reverse order iterator ([2931be7](https://github.com/ashvardanian/stringzilla/commit/2931be77445b2a5b3c37f6a961fb10b1f22825d8))
* Rust bindings ([5d75ccf](https://github.com/ashvardanian/stringzilla/commit/5d75ccfe82cd676cc36653e79872a5b1fc2ad659)), closes [#66](https://github.com/ashvardanian/stringzilla/issues/66)
* Search benchmark ([f257df6](https://github.com/ashvardanian/stringzilla/commit/f257df671418f8276e98394bc9e709962987d761))
* Separate notebook for similarity benchmarks ([f3f2ae6](https://github.com/ashvardanian/stringzilla/commit/f3f2ae6c394922278484bda1e99b226a6d4ff5b1))
* Shuffling method in Python ([6b82311](https://github.com/ashvardanian/stringzilla/commit/6b82311f8c12afe731eccab36642fabe6c327cde))
* Slices and rich comparisons ([d2d8de9](https://github.com/ashvardanian/stringzilla/commit/d2d8de9707ebd659fd425efd89bd25f7f4c74c1c))
* small string optimization in C & Cpp ([a0986e9](https://github.com/ashvardanian/stringzilla/commit/a0986e92c24248410e68aadb367af51a590fdee1))
* Sorting functionality for C++ ([39cc4d4](https://github.com/ashvardanian/stringzilla/commit/39cc4d40e6faf7628d2df34f7a1d99723b9bdec5))
* Split functionality ([c3e28c9](https://github.com/ashvardanian/stringzilla/commit/c3e28c954174c5d48337f78c5dda635d9af8c9cb))
* Split into consecutive slices ([f984397](https://github.com/ashvardanian/stringzilla/commit/f984397d16f3640bf212431af09a93ad81180f9c))
* Split ranges ([c591599](https://github.com/ashvardanian/stringzilla/commit/c5915999f08b69931c9249718b49e0666fc41842))
* Split ranges ([ca5e95b](https://github.com/ashvardanian/stringzilla/commit/ca5e95b1ef0f3ce9263b632372fd901539eb9055))
* SSE and Arm variants of CRC32 ([674da60](https://github.com/ashvardanian/stringzilla/commit/674da60244e283845453a874b44d19e8cf7c4369))
* STL compatibility tests ([5281628](https://github.com/ashvardanian/stringzilla/commit/52816283ec98d84b44f8c4ea7af76e076a237d91))
* String conversion functionality ([46ef2b7](https://github.com/ashvardanian/stringzilla/commit/46ef2b708de98ac7c17ef5aa0a5771f5520ca1aa))
* String literals, reverse iterators ([9a48ba2](https://github.com/ashvardanian/stringzilla/commit/9a48ba24dc87ac98553d599c929e62f30fd16a55))
* strippers on both sides ([782cffb](https://github.com/ashvardanian/stringzilla/commit/782cffb4c5e6b72cc566726b576fcfdb707e5c10))
* Subscript methods ([8c6ae0a](https://github.com/ashvardanian/stringzilla/commit/8c6ae0a8c2599ce33b94ef77e6101b6e8ef2a513))
* support of negative slices ([76ebcc4](https://github.com/ashvardanian/stringzilla/commit/76ebcc483605a0ce2312804abc6ad0732b248e3c))
* SwiftPM binding to C ([3940549](https://github.com/ashvardanian/stringzilla/commit/39405490c834677647c94172fb62414dae7bdfa6))
* test for slice operator ([70edef1](https://github.com/ashvardanian/stringzilla/commit/70edef1fe6ef906ef5df2032d4d4fc4dcde8ab92))
* tests for slices ([374fc0b](https://github.com/ashvardanian/stringzilla/commit/374fc0b7d3df8e2630d887b760f0463e750e5a43))
* tests for Slices ([a103c27](https://github.com/ashvardanian/stringzilla/commit/a103c27c61b9679a037fc3324aa6e4569a61b1ea))
* Vectorized `count` ([ef067d8](https://github.com/ashvardanian/stringzilla/commit/ef067d805b7678f1db84ebd55ab4994bb0e351df))
* Vectorized `split` for Python ([69b1e1a](https://github.com/ashvardanian/stringzilla/commit/69b1e1a53d69e00ece4922feb7c0bce9971c94be))
* Windows support ([79e0f47](https://github.com/ashvardanian/stringzilla/commit/79e0f476ef8637c54f52f7ef05e5b6772b4d4582))

### Break

* `sz_string_erase` to return delta ([7f01630](https://github.com/ashvardanian/stringzilla/commit/7f01630fbb9079adebea876a02e3b8408bf70d48))
* Avoiding LibC and new API ([efafbbf](https://github.com/ashvardanian/stringzilla/commit/efafbbf0687f1d315c94b54b08e5b93f91e88be0))
* Deprecate multi-source `Strs`; split tests ([1e09400](https://github.com/ashvardanian/stringzilla/commit/1e09400fe6e07936b9679a35731ab87819c5f8ac))
* New testing suite ([927bff1](https://github.com/ashvardanian/stringzilla/commit/927bff1f372da6702242fea871a5cb1142221a92))
* r-prefixed names for reverse order ([7f1e8c4](https://github.com/ashvardanian/stringzilla/commit/7f1e8c4a4fdb104a51ef97b37a5a5bfa21950265))
* rename C++ `split` to `partition` for consistency ([d8f1940](https://github.com/ashvardanian/stringzilla/commit/d8f194024169ee7d1362a3a7d5461329890d5311))
* Replace `append` -> `expand` ([bb02881](https://github.com/ashvardanian/stringzilla/commit/bb02881979e8ab1e8009b0bdbdeecfe278016165))
* Shorter function prefixes ([c0e129d](https://github.com/ashvardanian/stringzilla/commit/c0e129d8289d5df6ec65b29d2f90ec55d8a19ca5))
* Use two Rabin rolling hashes ([f4980d9](https://github.com/ashvardanian/stringzilla/commit/f4980d915d1f5b567cdef564a384fc6ab471e83f))

### Build

* Released 1.0.0 [skip ci] ([1e6b0f6](https://github.com/ashvardanian/stringzilla/commit/1e6b0f675c1b749024ee3ae2ab364672cd0016f7))
* Released 1.0.1 [skip ci] ([ab185a6](https://github.com/ashvardanian/stringzilla/commit/ab185a6dc01b4ebe69c0d54a7989b54b39f969f6))
* Released 1.0.2 [skip ci] ([dc4ce27](https://github.com/ashvardanian/stringzilla/commit/dc4ce2740e57e5ede6478f2637faa8cdc5f345e1))
* Released 1.0.3 [skip ci] ([0280ca6](https://github.com/ashvardanian/stringzilla/commit/0280ca60abeab793ee97d8778e201b3ac95dd11b))
* Released 1.1.0 [skip ci] ([22682e7](https://github.com/ashvardanian/stringzilla/commit/22682e732beafb5430b1186da9b6474ee37949b5))
* Released 1.1.1 [skip ci] ([ff64dcc](https://github.com/ashvardanian/stringzilla/commit/ff64dcc7207375416da3ec5b9e9fc15c1177bc8d))
* Released 1.1.2 [skip ci] ([8d2436d](https://github.com/ashvardanian/stringzilla/commit/8d2436dfeb8c62ff2aece8d9cc3650990aba1c1f))
* Released 1.1.3 [skip ci] ([3136ac8](https://github.com/ashvardanian/stringzilla/commit/3136ac868cdee2e529e6f4888c611eab3fe9bd3c))
* Released 1.2.0 [skip ci] ([085b89b](https://github.com/ashvardanian/stringzilla/commit/085b89ba046f7abf0552e770071a859d95d10b1c))
* Released 1.2.1 [skip ci] ([075ce13](https://github.com/ashvardanian/stringzilla/commit/075ce1385aef1b4a781716c85e4b36c9e91fe6cf))
* Released 1.2.2 [skip ci] ([ddac709](https://github.com/ashvardanian/stringzilla/commit/ddac7099cf50a21a99b1a432ec2dab1c09ef80df))
* Released 2.0.0 [skip ci] ([bc30dcf](https://github.com/ashvardanian/stringzilla/commit/bc30dcfdfa480bafde28264f1958cd8e7bd1d91e))
* Released 2.0.1 [skip ci] ([e44faed](https://github.com/ashvardanian/stringzilla/commit/e44faed6fffa8175b2ed4afb262efd6672f1ee08))
* Released 2.0.2 [skip ci] ([74bce88](https://github.com/ashvardanian/stringzilla/commit/74bce88200a6119cc43a9bd4e32f5b0b1328cf21))
* Released 2.0.3 [skip ci] ([d728848](https://github.com/ashvardanian/stringzilla/commit/d728848723ecbe5cec8fd47ce5e45fad7f2bd0ff))
* Released 2.0.4 [skip ci] ([7d0de91](https://github.com/ashvardanian/stringzilla/commit/7d0de911fd9a851175be5e8ea247d79df0dfe198))

### Docs

* Add Apache 2.0 LICENSE ([d9a52df](https://github.com/ashvardanian/stringzilla/commit/d9a52df7b256283105bc5381e566d61761be7e17))
* Add development plans ([cf81e41](https://github.com/ashvardanian/stringzilla/commit/cf81e413075560b43f34173deca9473db222e931))
* Annotate SWAR methods ([8bd2c20](https://github.com/ashvardanian/stringzilla/commit/8bd2c20c0859b0e80cf3302d3385963c002faadc))
* benchmark against BioPython ([c1b85bd](https://github.com/ashvardanian/stringzilla/commit/c1b85bdf90054278e525a97d6e633eb0d6c00c3a))
* Build instructions and contribution guide ([a7883aa](https://github.com/ashvardanian/stringzilla/commit/a7883aaa151a9dd87be196968a1f6d0bb9202d2d))
* correct SSO size in `libc++` ([86ba553](https://github.com/ashvardanian/stringzilla/commit/86ba5533db7bd0cc302050d568c38d77410ba172))
* Extend algorithms ([266c017](https://github.com/ashvardanian/stringzilla/commit/266c01710dddf71fc44800f36c2f992ca9735f87))
* Improved intro ([034260b](https://github.com/ashvardanian/stringzilla/commit/034260b1b6fec373cec3e101cb1aaa0c28b0d868))
* Less sections ([371c24f](https://github.com/ashvardanian/stringzilla/commit/371c24f65c5d1867a8cc417d0c51264da8e17d79))
* Library description ([40dd6f5](https://github.com/ashvardanian/stringzilla/commit/40dd6f56b37b56aad4d47ca73a52735070af9782))
* Linking issues and refreshing C part ([84bc1f5](https://github.com/ashvardanian/stringzilla/commit/84bc1f55b4f161e1b76b4969d8eb6867ce289c26))
* list performance considerations ([0b61591](https://github.com/ashvardanian/stringzilla/commit/0b61591bec153361aa1dff9139b0c940dbf1baae))
* Major improvements for hashing ([c6110b5](https://github.com/ashvardanian/stringzilla/commit/c6110b5890fa6de023c0d5fc7d39c3aa0e921293))
* Make front page easier on the eye ([edc6763](https://github.com/ashvardanian/stringzilla/commit/edc67632f126b691699351b4f208803642933cdf))
* More benchmarking instructions ([4ef7d64](https://github.com/ashvardanian/stringzilla/commit/4ef7d6477841ac0b6991642f27ace05f5b636906))
* More datasets for benchmarks ([87d1973](https://github.com/ashvardanian/stringzilla/commit/87d1973e6f7a05b8540fdfe3e9db0fd03b753c67))
* README and warnings ([f4348e4](https://github.com/ashvardanian/stringzilla/commit/f4348e48b8a5971c2dc16decf74b7cd77cea1c86))
* recommending VSCode extensions ([b19a186](https://github.com/ashvardanian/stringzilla/commit/b19a186897ca3802f7f4fe2c64aac252be803875))
* Refined README ([3caf621](https://github.com/ashvardanian/stringzilla/commit/3caf621596aa070f8720a315d9c07536ecd39d17))
* Refresh intro ([445f292](https://github.com/ashvardanian/stringzilla/commit/445f292ac17a4b935203d7fea3aa7a42c2d7e8d7))
* Restructure groups ([87c55b7](https://github.com/ashvardanian/stringzilla/commit/87c55b7b753145ad27c7f3083280bed787f66d1f))
* Sections on random strings ([067ef21](https://github.com/ashvardanian/stringzilla/commit/067ef21aebb3d828f77e135745d79840e726b516))
* Sorting and PRNG benchmarks ([d7a6e33](https://github.com/ashvardanian/stringzilla/commit/d7a6e33a8ea1ba68242ef4513171499bbbcc3c13))
* spelling ([49b70e8](https://github.com/ashvardanian/stringzilla/commit/49b70e8f9c1f090b85791107da4c24f0f5ee2f19))
* Spelling ([95c9fcf](https://github.com/ashvardanian/stringzilla/commit/95c9fcf8d507eea15fe5ba2450ac942ba764fa6d))
* Suggesting STL API extensions ([6094006](https://github.com/ashvardanian/stringzilla/commit/60940064aeeabfe60cc6e6a62e00f38b9e03668a))
* Update [skip release] ([1b336ee](https://github.com/ashvardanian/stringzilla/commit/1b336eee886c84d6afda9519f493432f3a4cfe47))
* Update LICENSE and table ([76d0c1f](https://github.com/ashvardanian/stringzilla/commit/76d0c1f8b48a983baa9cd70fc63656da19284755))
* Update README.md ([20de986](https://github.com/ashvardanian/stringzilla/commit/20de986212b2afda9f89958f0114ecba1a79c019))
* Update table [skip release] ([cdf425a](https://github.com/ashvardanian/stringzilla/commit/cdf425aa6161fb3c8be8160be4ddcf6e5c0d1a5e))

### Fix

* `comparator` function signature ([635ce6e](https://github.com/ashvardanian/stringzilla/commit/635ce6e1894ec12fa68e6333b32f4f7adfb6c315))
* `length` location assuming little-endian hardware ([e584f8b](https://github.com/ashvardanian/stringzilla/commit/e584f8bf79e363668afb30724451e099622604bb))
* `misaligned_len` estimate ([90ea05d](https://github.com/ashvardanian/stringzilla/commit/90ea05d217ebb7f7662a5a532c4196a70e8b7404))
* `qsort_r` argument order ([eb7c8f8](https://github.com/ashvardanian/stringzilla/commit/eb7c8f891a84e77294f27781cff360c2fb87b1ec))
* `qsort_s` vs `qsort_r` on MacOS ([7aaf624](https://github.com/ashvardanian/stringzilla/commit/7aaf624343008f2d862dc5f12110a32a1a20f534))
* `static_cast` for Clang builds ([246d79d](https://github.com/ashvardanian/stringzilla/commit/246d79dd0229bd655d4724c366695c93d2c27f40))
* `strzl_sort_config_t` symbol ([0e6cda7](https://github.com/ashvardanian/stringzilla/commit/0e6cda78755b57b23064aa5533a367e7546c8c52))
* `sz_move_serial` in reverse order ([6bbc963](https://github.com/ashvardanian/stringzilla/commit/6bbc9636ff5d10cfbe31509bf211151a3c6fe74b))
* `sz_size_bit_ceil(1)` == 1 ([5f19a16](https://github.com/ashvardanian/stringzilla/commit/5f19a164cd103be5aab436bddebb0183ea15200d))
* `sz_size_bit_ceil` and missing constructors ([174fc15](https://github.com/ashvardanian/stringzilla/commit/174fc150e2cc68925a4720e42e3540457c9ed979))
* `sz_size_t` size in MSVC ([d0ad4aa](https://github.com/ashvardanian/stringzilla/commit/d0ad4aa1deedf963ba836b662a2a18eda40b01f4))
* `sz::string` constructors ([805b99a](https://github.com/ashvardanian/stringzilla/commit/805b99a72c8cde876de60fba38d63ddcf74f0e96))
* 32-bit integer overflow in `sz_rfind_avx512` ([2833707](https://github.com/ashvardanian/stringzilla/commit/283370738d715a6fdd03acdb35eecb454492bf1f))
* Alignment score Py test ([3521a8f](https://github.com/ashvardanian/stringzilla/commit/3521a8f160792bbc7a40a69bdafae8ed9ffb14e8))
* Allow no args to `split` ([dd5dd1c](https://github.com/ashvardanian/stringzilla/commit/dd5dd1c11f61f69031412d86f14967b60baa750f))
* Applying sort order in Python ([73e1fc7](https://github.com/ashvardanian/stringzilla/commit/73e1fc7eaca606badcf8f94dcfe77d8fb1a3c90d))
* assertion logging condition ([1c1f4f7](https://github.com/ashvardanian/stringzilla/commit/1c1f4f75dff2c5c2472c9ca6e03d7d1a266d8c70))
* AVX-512 compilation and naming ([82820d4](https://github.com/ashvardanian/stringzilla/commit/82820d459c28aac5c7433a0f81fd9234ce265122))
* AVX-512 tests and cheaper copy construction ([08810e9](https://github.com/ashvardanian/stringzilla/commit/08810e961e04215dfc95630f977daa7b3260417d))
* AVX2 compilation ([3f32d89](https://github.com/ashvardanian/stringzilla/commit/3f32d890a8e561d864152f6e1a65f1ecafad06a1))
* Benchmarks compilation ([204444f](https://github.com/ashvardanian/stringzilla/commit/204444ff9befb044d74d0d6fc7446e0ec11f282a))
* Boundary condition with misaligned loads ([0d39e81](https://github.com/ashvardanian/stringzilla/commit/0d39e81f9c1f65748250371363bdec0925840636))
* Bounded Levenstein distance ([a875b4a](https://github.com/ashvardanian/stringzilla/commit/a875b4a3c70a1556646a7b167506715bd70eae66))
* Buffer width for NodeJS bindings ([3871bbf](https://github.com/ashvardanian/stringzilla/commit/3871bbf3b0f60b783fa0a7656d3804df849710c0))
* bugs in assignment, initialization, ... (#63) ([b234e7c](https://github.com/ashvardanian/stringzilla/commit/b234e7cf61ae8302e15bb234dc702992de1ced15)), closes [#63](https://github.com/ashvardanian/stringzilla/issues/63)
* C++ `rfind` second argument of two ([a243ef1](https://github.com/ashvardanian/stringzilla/commit/a243ef1c9958e0fd2f8f13b822f7dd400b868846))
* Cast to `UInt64` in Swift ([2a78408](https://github.com/ashvardanian/stringzilla/commit/2a78408a99f11fa4b20962323e6994f7b2f5cf68))
* Comparator ([c64dafa](https://github.com/ashvardanian/stringzilla/commit/c64dafa348a58695c10ae314435df76b5bda1650))
* Compilation ([b896f77](https://github.com/ashvardanian/stringzilla/commit/b896f77672c4a6c6c0a666493508f6dbca8771c8))
* Compilation ([71ff4df](https://github.com/ashvardanian/stringzilla/commit/71ff4dfbc0bbace33dfed9234c71ebd1d96b14d4))
* Compilation and warnings ([df47d8a](https://github.com/ashvardanian/stringzilla/commit/df47d8aa57047ebbb657cb3ca5caf831c118ab5c))
* Compilation for older C++ standards ([5629c0b](https://github.com/ashvardanian/stringzilla/commit/5629c0b42a1d32b40bec450751693abd78f265be))
* Compilation on GCC11 ([4da34a8](https://github.com/ashvardanian/stringzilla/commit/4da34a8a132ad7de31cf3fcc696044334cc20da3))
* Compilation on MacOS ([c1d138c](https://github.com/ashvardanian/stringzilla/commit/c1d138ca5f5fb43e3da2953291562b3c44fcbb1d))
* Constructing from string and moves ([9e3aa95](https://github.com/ashvardanian/stringzilla/commit/9e3aa952d8f296b1a3776fd860b6f18749aa45ce))
* Counting substrings with `allowoverlap` ([8f35f54](https://github.com/ashvardanian/stringzilla/commit/8f35f54d8ebc3d552e82a3bad8dbdbb8c1b3903a))
* Cpp20-only constructor ([62e6788](https://github.com/ashvardanian/stringzilla/commit/62e678854acdef2b01efe411765082d7f1e4440a))
* Default argument sign for NW. scores ([3cb1f7a](https://github.com/ashvardanian/stringzilla/commit/3cb1f7a0daf3475ef9507c7d1895d6f7ca83c958))
* Exit search loop in benchmarks ([875200e](https://github.com/ashvardanian/stringzilla/commit/875200edae8279dc668bd21136df580dff271bfd))
* Experimental hashes names ([ff6a660](https://github.com/ashvardanian/stringzilla/commit/ff6a660ceb7bd14e1b0cdc05b20dd3601d4f4b53))
* Global `rsplit` return type ([e00963e](https://github.com/ashvardanian/stringzilla/commit/e00963e38192714253c88b7e2b823da86e216990))
* Identical overlapping semantics to Python ([f1ffe51](https://github.com/ashvardanian/stringzilla/commit/f1ffe518ffa3c67567d27c6d78ae22f7fefd98b3))
* include <stdexcept> for `out_of_range` ([0e5b85b](https://github.com/ashvardanian/stringzilla/commit/0e5b85b671917a8cb84ca29d22fb5a1ccdf9f3f6))
* Invoking the wrong constructor in tests ([8d450f5](https://github.com/ashvardanian/stringzilla/commit/8d450f574330d4753f4d3f2b6304c57a8eb8aa04))
* JS compilation and missing symbols ([582d5ab](https://github.com/ashvardanian/stringzilla/commit/582d5ab41046e02839880d663dca81eeac27e280))
* JS compilation and missing symbols ([61ed1a1](https://github.com/ashvardanian/stringzilla/commit/61ed1a14e3d517f753384add47f25c07ba86a82f))
* leaks and semantics, testing for memory leaks ([e7f0858](https://github.com/ashvardanian/stringzilla/commit/e7f0858e8bf9d716461aaee8751aec257078792e))
* Masking last comparisons in AVX-512 ([d5f6338](https://github.com/ashvardanian/stringzilla/commit/d5f6338539de3c3253bf65f976953b7f89cc7594))
* Matching Python string semantics ([1067090](https://github.com/ashvardanian/stringzilla/commit/10670905d1abd930ab0798045aa8140e95a44aab))
* memory access after `free` ([ec2e9b2](https://github.com/ashvardanian/stringzilla/commit/ec2e9b2f74373c403423b34574d58128d34d1c5b))
* Memory CPython memory allocations ([49030d4](https://github.com/ashvardanian/stringzilla/commit/49030d4af00b7eb48daa07ae8d7e6c3baeefb231))
* Memory leak and extra `strlen` calls ([a013147](https://github.com/ashvardanian/stringzilla/commit/a0131470ef77f40b1820124d7bef59d05624beda))
* Minor merge issues ([cfa540b](https://github.com/ashvardanian/stringzilla/commit/cfa540b638d2ac4ed415d8f7ccd146f3ce8567bf))
* Misaligned count and non C99 features ([1efd896](https://github.com/ashvardanian/stringzilla/commit/1efd8961d4ae1207058acbd407fcfed21bcb9e3b))
* Missing `__builtin_clzll` symbol ([bd4496a](https://github.com/ashvardanian/stringzilla/commit/bd4496a405823b687f43a7b093f180ba2e3cfc14))
* Missing header and test path ([303390e](https://github.com/ashvardanian/stringzilla/commit/303390e4b56f3acadd1d8d797b7b883cf2a2867b))
* Missing initialization for on-stack string ([5d85174](https://github.com/ashvardanian/stringzilla/commit/5d85174e8aef79d8390a137324e1da82c544be02))
* MSVC-compliant initialization ([ef2d66c](https://github.com/ashvardanian/stringzilla/commit/ef2d66c4fcbe5e56e29c5b16f3d2f420542c2185))
* Normalizing offsets in Py ([351567f](https://github.com/ashvardanian/stringzilla/commit/351567f44e0fb59f307710463acac1ed922dcb87))
* NPM build warnings ([da72015](https://github.com/ashvardanian/stringzilla/commit/da72015dbfcae4bae63176e616dda64d1db108c5))
* NPM build warnings ([b2e4b3e](https://github.com/ashvardanian/stringzilla/commit/b2e4b3e0bccbe1a413d6b6c73c8064ae5e3bd69b))
* Overflow bug in Arm NEON ([cdcc3b7](https://github.com/ashvardanian/stringzilla/commit/cdcc3b7e82f6b77cbdc344f12f1ee2c834048435))
* Overflow on consecutive matches ([f4ab1ea](https://github.com/ashvardanian/stringzilla/commit/f4ab1eab2cb8686c8a146414a5c1d6a5d7427100))
* Passing builds with strictest settings ([629a280](https://github.com/ashvardanian/stringzilla/commit/629a280c7ec1df9737ef85ba7a2785f453f00dda))
* Propagating definitions ([847763f](https://github.com/ashvardanian/stringzilla/commit/847763f7b47cb3de35ceac14db91021ecd8cb740))
* Python bindings passing tests ([e995121](https://github.com/ashvardanian/stringzilla/commit/e995121ca5c4d420cea2b8742338a79ef309eac0))
* python slices of splits used incorrect offsets. ([c7e54e4](https://github.com/ashvardanian/stringzilla/commit/c7e54e4bc123938575a105dbf38d427223c6cd03))
* Python sort ([a1d32d8](https://github.com/ashvardanian/stringzilla/commit/a1d32d8cfd7d40e19e2f6a4c8cb7a1b5c0f0750b))
* Python tests passing ([9cd14ab](https://github.com/ashvardanian/stringzilla/commit/9cd14abdeeb0b666618de58340a8e9667f601b1b))
* Random generator type resolution ([16da145](https://github.com/ashvardanian/stringzilla/commit/16da1451823815b3cbe1471ee055609917583e19))
* remove unnecessary include ([1f863e7](https://github.com/ashvardanian/stringzilla/commit/1f863e7b8c6736a4f976e13297aad5d070f4c8b2))
* reporting if step defined ([6af744c](https://github.com/ashvardanian/stringzilla/commit/6af744cbc3edef0a7cd06f95a64e4c01876a2a92))
* Returning `NULL` without setting the error ([cfffaeb](https://github.com/ashvardanian/stringzilla/commit/cfffaeb3734be9c9d914a58f1ed7f8e348f1046d))
* Reverse order ([250a97e](https://github.com/ashvardanian/stringzilla/commit/250a97ea1da53f8d2ca4f03dd28f67575971b01c))
* Sime constructors in C++11 can't be `constexpr` ([9fbbeb8](https://github.com/ashvardanian/stringzilla/commit/9fbbeb8e720cb2d85bdb341bd16a25e49ec0bd18))
* Skipping `misaligned` region twice ([2457915](https://github.com/ashvardanian/stringzilla/commit/2457915d8b2825b1be85b0a7bd5627d3a4f8c638))
* slice function logic ([a48609b](https://github.com/ashvardanian/stringzilla/commit/a48609bb926f3284bfd33fd52976b30561bb26f3))
* Slices ([8449dda](https://github.com/ashvardanian/stringzilla/commit/8449ddaf695d01aa033af6c81c04af80c894c17d))
* Sort in ascending order ([d049043](https://github.com/ashvardanian/stringzilla/commit/d049043ccb230a29f51e219058755a6927aaf3b3))
* Sort test ([7aa2c0b](https://github.com/ashvardanian/stringzilla/commit/7aa2c0b7315ccdfd9cee84be6d331714ba751691))
* speculative_neon_t count ([571e0a5](https://github.com/ashvardanian/stringzilla/commit/571e0a5269f15c339e176d43f1d7c6e439d8ff8c))
* strzl_sort ([612373b](https://github.com/ashvardanian/stringzilla/commit/612373ba85eec048a8b376d9247470574acc616c))
* SWAR search bug ([b62b9c6](https://github.com/ashvardanian/stringzilla/commit/b62b9c666c8970bb4219f1227b225ecb44a0d707))
* Swift build in Xcode ([3321c85](https://github.com/ashvardanian/stringzilla/commit/3321c8530406f816f2ee7f1f5077855f60a663aa))
* Switch to shared mappings to reduce RAM use ([07bc055](https://github.com/ashvardanian/stringzilla/commit/07bc05532f91dbb49c0b3dd350701fa70fe337a9))
* Throughput calculation for rfind ([1c48a42](https://github.com/ashvardanian/stringzilla/commit/1c48a42f44bd01a833712df893d9e5e3d2cb55d6))
* Use different functions depending on arch ([2ad5790](https://github.com/ashvardanian/stringzilla/commit/2ad5790c20cdf83afc7ab766f9267bd3b2c853f7))
* Use different functions depending on arch ([327a149](https://github.com/ashvardanian/stringzilla/commit/327a149037782df6c07d44974b31009dbfa63727))
* Using the right pragma for GCC ivdep ([ca3b62d](https://github.com/ashvardanian/stringzilla/commit/ca3b62defe47994cd2ce574ffd7bc310a02a5ae3))
* wrong intrinsic for non-AVX512 x86 ([550fb38](https://github.com/ashvardanian/stringzilla/commit/550fb38593c637cf6faf2cb743641d91a4394964))

### Fixes

* RNG instantiation UB, reducing avoiding compiler optimization for the callback. ([1ae31a0](https://github.com/ashvardanian/stringzilla/commit/1ae31a0c37447f55b48ed779e530452af4f14813))

### Format

* Compact code style ([4ddee17](https://github.com/ashvardanian/stringzilla/commit/4ddee17153d07e9381619f6a34c05e5e78d0292b))

### Improve

* `_sz_locate_needle_anomalies` for Arm ([a8df0f9](https://github.com/ashvardanian/stringzilla/commit/a8df0f991644d033250184619f8747fe051a437b))
* `_sz_locate_needle_anomalies` for AVX ([e453ab8](https://github.com/ashvardanian/stringzilla/commit/e453ab86745277ad9c8a3decc0065845e5fc3e80))
* `sz::` and `std::string` are mostly compatible ([41570d6](https://github.com/ashvardanian/stringzilla/commit/41570d6e57b9f62c849c452640383eefd6fcb561))
* `vtbl`-based charset search for NEON ([8ed148e](https://github.com/ashvardanian/stringzilla/commit/8ed148e7d126bae25240aa6637b607d66ae4d263))
* Apply Swift API to both strings and buffers ([d52bdb3](https://github.com/ashvardanian/stringzilla/commit/d52bdb389546e8f4ae459196670977013a321420))
* Avoid inner `for`-loop on Arm NEON ([eafe41c](https://github.com/ashvardanian/stringzilla/commit/eafe41cba0b227395f311be676413f39c15efb42))
* avoiding nested loop in AVX2 ([ac7012a](https://github.com/ashvardanian/stringzilla/commit/ac7012a2796e613af75fde91e205ef55fb84944b))
* AVX2 and AVX512 backends ([462a426](https://github.com/ashvardanian/stringzilla/commit/462a4264863fd9e9899276a124c704ede1add4d3))
* BitScan dispatch on Windows ([7e2ca96](https://github.com/ashvardanian/stringzilla/commit/7e2ca96b76db453fca2601a2b72c2d57153e18b1))
* Broader benchmarks ([4014af9](https://github.com/ashvardanian/stringzilla/commit/4014af9f74f0f7e1a0ca6daec7638fd93e7b742d))
* Bypass GIL on long tasks ([59f41f9](https://github.com/ashvardanian/stringzilla/commit/59f41f9a25f2ec364974cef2f72e9273787f3d61))
* C++ tests structure ([f6bec48](https://github.com/ashvardanian/stringzilla/commit/f6bec488380f489fd99872f817f6d39d9504bd94))
* Compatibility with STL strings ([deafa73](https://github.com/ashvardanian/stringzilla/commit/deafa732080d965ba1774ed3747c1693fdf79f06))
* Deduplicate charset-matching on NEON ([7c4e169](https://github.com/ashvardanian/stringzilla/commit/7c4e16928f722e8110804816b55a879fcc31c277))
* drop `ctype`, `stddef`, `stdint` headers ([245da6d](https://github.com/ashvardanian/stringzilla/commit/245da6df67df2a51cca453ff8fd5dd48f20f5994))
* Drop useless AVX-512 parts ([7c104ec](https://github.com/ashvardanian/stringzilla/commit/7c104ec02a943cd0029bc6aac04960e1975f69f4))
* Extend benchmarks ([3838a85](https://github.com/ashvardanian/stringzilla/commit/3838a857d5d8c2eeebc09d787672d57ddbc02662))
* Faster `Str` constructor ([4796afb](https://github.com/ashvardanian/stringzilla/commit/4796afb21b7dfdc3efa4b3f4adfc60bb69013dd4))
* Faster Horspool initialization ([156b814](https://github.com/ashvardanian/stringzilla/commit/156b814848fa5ead86d11889c6bc2e3c15870bdf))
* Identical bit-counting intrinsics ([c934fb5](https://github.com/ashvardanian/stringzilla/commit/c934fb5af3c260aef4c530cb62e7f47a2bb02e35))
* Intro-sort ([644630b](https://github.com/ashvardanian/stringzilla/commit/644630b852ad43be6ba092c3091b458446688c4c))
* Less overhead per benchmark cycle ([6f1bde6](https://github.com/ashvardanian/stringzilla/commit/6f1bde6273ee821d5eea457ece517908385f7a01))
* Loading large files into memory ([c041962](https://github.com/ashvardanian/stringzilla/commit/c041962df9cd9994a0217c9d1d69b40da82db3d8))
* Mimic hyper-scalar code ([21f143c](https://github.com/ashvardanian/stringzilla/commit/21f143c5cf5e337245bee2bb72a1104983570858))
* Missing CPUID checks ([139e4fd](https://github.com/ashvardanian/stringzilla/commit/139e4fd52c115224606b05e62ec675eb56cded61))
* move `skip_length` into the matcher ([8905a56](https://github.com/ashvardanian/stringzilla/commit/8905a5671035a22bfc8f11856de7840c2359afd0))
* NW AVX-512 alignment ([e49cacb](https://github.com/ashvardanian/stringzilla/commit/e49cacbdb4762d06b636d836bc12d825b17b3c13))
* parity between `std` and `sz` string views ([487edd3](https://github.com/ashvardanian/stringzilla/commit/487edd32a8e99dcc6bb077ba8dfc944ab92f189d))
* Passing basic tests ([ee0ab2d](https://github.com/ashvardanian/stringzilla/commit/ee0ab2d138a4c127f7af6a9d2716dc04040791ea))
* Poison ranges with ASAN ([4703fad](https://github.com/ashvardanian/stringzilla/commit/4703fad44d7f2bfcebec8603c6ccf1763ff0317e))
* Polish xxHash ([ca085df](https://github.com/ashvardanian/stringzilla/commit/ca085df4436a87ae3dfc5fd8ba0a7d0a8116a04e))
* Preserving failed tests to disks ([9cd5c21](https://github.com/ashvardanian/stringzilla/commit/9cd5c218a64c052fbd8ccef6306f5c1be1d5a54b))
* Raita-style midpoint check in AVX-512 ([df683d9](https://github.com/ashvardanian/stringzilla/commit/df683d905e3adcc8f16b8e358235f57ec8f78d14))
* random generation and token-level benchmarks ([be54519](https://github.com/ashvardanian/stringzilla/commit/be545196bcac13e7c1fd353b1fa85b3d0d52306b))
* Rearrange tests and benchmarks ([8564852](https://github.com/ashvardanian/stringzilla/commit/856485223075872743cbf6d521c6a09bb0dbe601))
* Reduce `vmaxvq_u8` usage ([982ca69](https://github.com/ashvardanian/stringzilla/commit/982ca6929f0ebce52e0749bb869a1f7d451aec14))
* Reduce `vmaxvq_u8` usage ([53cb5ce](https://github.com/ashvardanian/stringzilla/commit/53cb5ce8b65f7e28e73643ee84e39f8150ee7d0d))
* Reduce number of loads/stores in scoring ([0c860c8](https://github.com/ashvardanian/stringzilla/commit/0c860c834f5d0c528ecdc95f58b72402e2b7d765))
* Reducing swaps in Radix sort ([3eac160](https://github.com/ashvardanian/stringzilla/commit/3eac1601a1d8cb88db9f6e7863c90f53bdf98ca1)), closes [#45](https://github.com/ashvardanian/stringzilla/issues/45)
* Refactoring AVX-512 control-flow for simplicity ([b42394c](https://github.com/ashvardanian/stringzilla/commit/b42394cce6e26b461134898442653bd15b94c71f))
* Remove deprecated code ([e3adaa4](https://github.com/ashvardanian/stringzilla/commit/e3adaa44f98df0127072f00724ae07500a1b46fb))
* Reorganizing for readability ([9dd1f8c](https://github.com/ashvardanian/stringzilla/commit/9dd1f8cdf3ef5c79caf4a0ff3309a9b53e2091ed))
* Reuse the C shared lib for Swift ([bd1686d](https://github.com/ashvardanian/stringzilla/commit/bd1686da68e0550567663d9b2e7db01bbb339ce4))
* Rust Bindings (#74) ([8200ca3](https://github.com/ashvardanian/stringzilla/commit/8200ca3894f575d772754c261b769d5852295877)), closes [#74](https://github.com/ashvardanian/stringzilla/issues/74)
* Same functions as global and members ([4a22ea8](https://github.com/ashvardanian/stringzilla/commit/4a22ea8984173a3f71704e47a8b8dd31213f3808))
* serial move implementation ([9173ca0](https://github.com/ashvardanian/stringzilla/commit/9173ca0f55c61cb1221bc783138185f4a62c443d))
* shorter tests with `std::string_view` ([d9977b0](https://github.com/ashvardanian/stringzilla/commit/d9977b0d07d4a3a776fb39011a31e0f71976a005))
* Silence type-casting warnings ([dbe4db3](https://github.com/ashvardanian/stringzilla/commit/dbe4db30845df932e34b5518133916bd094a14b3))
* Similarity search benchmarks ([d2e8da2](https://github.com/ashvardanian/stringzilla/commit/d2e8da242b43846a34bf4ebd7518ded0a6c10549))
* SWAR search for normal order search ([6669b1e](https://github.com/ashvardanian/stringzilla/commit/6669b1e3f38b921aedaa4af01571fbddabb2fbc9))
* Test coverage ([c967582](https://github.com/ashvardanian/stringzilla/commit/c9675825d71592dec075f40633967bd833f99c72))
* Test reproducibility of the `shuffle` ([ce888cc](https://github.com/ashvardanian/stringzilla/commit/ce888ccaadd89b247d3f549d8590837c0b1fe52d))
* Testing suite ([50a2a2f](https://github.com/ashvardanian/stringzilla/commit/50a2a2fc159f36972423590cf4ba5865dc0a3775))
* Tests against Raita ([6a5b18b](https://github.com/ashvardanian/stringzilla/commit/6a5b18b7de77a518cba80d70a3c90e78e81a32c4))
* Use less temp. variables to count matches ([3245330](https://github.com/ashvardanian/stringzilla/commit/32453305cb9d7b84090a8a17979aafd8d82f9c08))
* Using Clang `modulemap`-s ([05d21c5](https://github.com/ashvardanian/stringzilla/commit/05d21c52661138201d7e3b519b75c7c0f9d16aa5))
* Vectorized function calls ([6cd5a69](https://github.com/ashvardanian/stringzilla/commit/6cd5a69096982d2b2c7761063f6e265260f5fac5))
* Window width as runtime argument ([3bd29ae](https://github.com/ashvardanian/stringzilla/commit/3bd29ae5dee4586ed174be8f4f4fda19a2e057d0))

### Make

* `AlwaysBreakBeforeMultilineStrings` ([1dabc3b](https://github.com/ashvardanian/stringzilla/commit/1dabc3ba77e62a1732b6d83d2aa286273118218c))
* `numpy` dependency ([2d825ba](https://github.com/ashvardanian/stringzilla/commit/2d825ba2cfca86ef3c906cfa25a612ba820d0068))
* Add GitHub CI ([ba333db](https://github.com/ashvardanian/stringzilla/commit/ba333dbcf5d432fa27e2c1f4f917eb28dd68977a))
* Add NumPy dependency ([2e928ba](https://github.com/ashvardanian/stringzilla/commit/2e928bab7421ded7b5f4bec7fbcb6679bdde7b6d))
* Adding `.npmignore` ([cf93dfd](https://github.com/ashvardanian/stringzilla/commit/cf93dfd60e0cdc69a93bff848794cb62bc53d184))
* Automate major releases ([987475e](https://github.com/ashvardanian/stringzilla/commit/987475e20edbcaa8c78afaac413a5d62ce453215))
* Build with different compilers at once ([0580219](https://github.com/ashvardanian/stringzilla/commit/05802192a563bcf752be13830de76ce3b2a6f049))
* Bump VERSION ([f221874](https://github.com/ashvardanian/stringzilla/commit/f2218744a370549fe14eaa888c2124db22359f96))
* Bump VERSION ([bebda9f](https://github.com/ashvardanian/stringzilla/commit/bebda9ff05848495d2ab3dad9de3a2d20ac1febd))
* C++17 default, build 11/14/17/20 ([156afae](https://github.com/ashvardanian/stringzilla/commit/156afae9a5a3f7a7302414782cd3493609989e12))
* Change CXX standard ([4f4e69b](https://github.com/ashvardanian/stringzilla/commit/4f4e69b5ed163c44de177c66030cf7f64e12475e))
* CI for Clang and MacOS ([3162760](https://github.com/ashvardanian/stringzilla/commit/31627607d3c39f745fa11d65eb57e0a50f2efbb5))
* Cleaning build caches on Windows ([01d209f](https://github.com/ashvardanian/stringzilla/commit/01d209f6f2ce87f429c22a7c8f2ccde86ebd199c))
* Colorful diagnostics ([0b8d9cd](https://github.com/ashvardanian/stringzilla/commit/0b8d9cdd6d424fa540c04ecb8441a856a1065363))
* Compile for different x86 generations ([ae7b119](https://github.com/ashvardanian/stringzilla/commit/ae7b11934c298e80072edb2b21f9001ceed1c0dc))
* Consistent compilation settings ([6f930ea](https://github.com/ashvardanian/stringzilla/commit/6f930ea703edddef9308e713a70b213631e91496))
* Deduplicate `.clang-format` settings ([3db6845](https://github.com/ashvardanian/stringzilla/commit/3db684571ffa93f8420d5bc62b7285bf10aa07f4))
* Define default build type ([4ce3d64](https://github.com/ashvardanian/stringzilla/commit/4ce3d641943c571a6434687ec46261eb33eaef0e))
* Dependencies for testing ([253a26d](https://github.com/ashvardanian/stringzilla/commit/253a26de2c1c70d69196833b62893eb58d5a8230))
* Deprecate old benchmarks ([b5b1f83](https://github.com/ashvardanian/stringzilla/commit/b5b1f833fd2dfe6e60db01217dcb025df9fdc98e))
* Don't build the library every time ([daaa93b](https://github.com/ashvardanian/stringzilla/commit/daaa93b8a1591f9fca2d3589383be24729c5f7eb))
* Enable DQ extensions for `sz_hashes_avx512` ([26e54c9](https://github.com/ashvardanian/stringzilla/commit/26e54c9cdd604c3fe8cd136e581163e034f8e182))
* Explicitly mark AVX sections ([53a4ef1](https://github.com/ashvardanian/stringzilla/commit/53a4ef1b69a65d36f0f82aef70fa84965938f279))
* Explicitly UTF-8 encoding on Windows ([6c323ea](https://github.com/ashvardanian/stringzilla/commit/6c323ea19ab813d93124ce1d0bfed0832693f7ff))
* Exporting lite builds without LibC ([a5ece39](https://github.com/ashvardanian/stringzilla/commit/a5ece39df940137a402ad282d631b0716d5d8876))
* Exporting lite builds without LibC ([dfba995](https://github.com/ashvardanian/stringzilla/commit/dfba99533f4ef7c9d4277352e82460d2dc546f1a))
* Fetch before rebase ([fda58df](https://github.com/ashvardanian/stringzilla/commit/fda58dfe268bec7f4279c9d607551cde1eb39a5c))
* Fix include paths ([d3c9025](https://github.com/ashvardanian/stringzilla/commit/d3c90255efc4948c17bcf7f84bd54b9fae77004f))
* Fix Windows PyPi releases ([0efaad1](https://github.com/ashvardanian/stringzilla/commit/0efaad194b1228dbc68eebc5eb2393ef701d1365))
* Formatting and docs ([416b885](https://github.com/ashvardanian/stringzilla/commit/416b885429d2eb97e6c677eaac0eba6de5ff9fc4))
* GitHub CI for tests with recent GCC ([48869d3](https://github.com/ashvardanian/stringzilla/commit/48869d3f62dc226a20aa690cbe7eae4787a8a9ae))
* Linking the standard libs in Swift ([6a25a8e](https://github.com/ashvardanian/stringzilla/commit/6a25a8e3c5a10716b7c0cb51a3f2a0bd5c03c5ee))
* Log ENV details if build fails ([8527f38](https://github.com/ashvardanian/stringzilla/commit/8527f386770eb8ee635395338adc6ecc47b35e51))
* Match directory structure of SimSIMD ([afac999](https://github.com/ashvardanian/stringzilla/commit/afac999380220b6d6c9ec0f191f339f29ed30cf0))
* Match directory structure of SimSIMD ([679f9e7](https://github.com/ashvardanian/stringzilla/commit/679f9e758ba181765a5473f7d5264d2c1372ec81))
* Matching only `version` at line start ([bb56b00](https://github.com/ashvardanian/stringzilla/commit/bb56b0079aceb491ee3a39330401b24519434a06))
* Move Python bindings ([e9ac4cb](https://github.com/ashvardanian/stringzilla/commit/e9ac4cb2e516c0b48f1f0e5f43c207b1359913b6))
* MSVC compatibility ([f776087](https://github.com/ashvardanian/stringzilla/commit/f776087ce005b4ecc2f21a5be4c9ce99976af77c))
* NumPy test dependencies ([53481a9](https://github.com/ashvardanian/stringzilla/commit/53481a9fa4b98b7ac7ac61dda5e2bfc719804f2e))
* Optimize `RelWithDebInfo` builds ([0ec4b0d](https://github.com/ashvardanian/stringzilla/commit/0ec4b0d8dce059528d4e4b5a47c7a0fdd1e81e72))
* Pass compilation flags depending on which architecture and compiler ([23846ef](https://github.com/ashvardanian/stringzilla/commit/23846ef733f6463fbb94a4d11296014e2e870662))
* passing empty C++ standard version ([6abf8b6](https://github.com/ashvardanian/stringzilla/commit/6abf8b61bf351aacde639b0a56ba68b9101bbd23))
* Position Independent Code ([2638c66](https://github.com/ashvardanian/stringzilla/commit/2638c66ae92cdd3076720b47be4b73930d7a54e5))
* PR head autoresolution ([b483e59](https://github.com/ashvardanian/stringzilla/commit/b483e595796cd61ff61d1726320f0c7abcc14d7a))
* Pre-set target hardware generation ([a9fe148](https://github.com/ashvardanian/stringzilla/commit/a9fe14806337d90b5e6c23a1183bd58a8f2d6f94))
* Publish Rust crates ([b954a55](https://github.com/ashvardanian/stringzilla/commit/b954a556b1d188003a63b70b5e6594a47e6d33ac))
* Publish StringZilla to NPM ([ff2e85b](https://github.com/ashvardanian/stringzilla/commit/ff2e85b94bc0943910254ba8a676fee22a563315))
* Remove `fuzz.py` ([50ab905](https://github.com/ashvardanian/stringzilla/commit/50ab905ae95ecdaeaeeea818879f72d1980d1a41))
* Remove PyBind11 dependency ([971890c](https://github.com/ashvardanian/stringzilla/commit/971890cd8c53f04ae56f823f8784bba04928a77e))
* sanitizers and silencing false warnings ([6f7d5c1](https://github.com/ashvardanian/stringzilla/commit/6f7d5c1e415055d1069472d262fc0f63e60427ff))
* Semantic Versioning ([4a21db7](https://github.com/ashvardanian/stringzilla/commit/4a21db78774fd391d798822b0162bb5583305dba))
* Separate source files ([9e75d04](https://github.com/ashvardanian/stringzilla/commit/9e75d04a585a56213adaf361d8296d4b6bbee5f7))
* Shift JavaScript CI ([534291f](https://github.com/ashvardanian/stringzilla/commit/534291f13021f6ebcbcca11ab6d2b820aa78dbe1))
* Swift CI and MacOS PyPa image ([9184a42](https://github.com/ashvardanian/stringzilla/commit/9184a42f01be208aca733d30f1bec02eacd432a9))
* Switch to pure C ([e8f7249](https://github.com/ashvardanian/stringzilla/commit/e8f724941136453586a88e862c3f0ab135b34f0f))
* Test cpp ([b4a89c5](https://github.com/ashvardanian/stringzilla/commit/b4a89c534776f86acb8b63c5b4c7c68ea487fc00))
* Update release tasks ([bc938c1](https://github.com/ashvardanian/stringzilla/commit/bc938c158b1bdce175bb28c08f36842018100675))
* Upload versioned files ([5e254b0](https://github.com/ashvardanian/stringzilla/commit/5e254b036fdceda7d777e627be5cdc03a8f4172c))
* Use Clang attribute pragmas ([33ba031](https://github.com/ashvardanian/stringzilla/commit/33ba031e7b470fdfba46826f919f2188cd3f536c))
* use newest SIMD for Python builds ([62c0012](https://github.com/ashvardanian/stringzilla/commit/62c0012e7e1e96ff773d0072592bd520a6fc61f8))
* VSCode launchers for any C++ benchmark ([6f0d799](https://github.com/ashvardanian/stringzilla/commit/6f0d79975ef0b46803cb4c7fc17392f943ca2361))
* Workaround for Swift CI ([bc1869a](https://github.com/ashvardanian/stringzilla/commit/bc1869a85293ff5aa6e5075475263002c43648eb)), closes [/github.com/swift-actions/setup-swift/issues/591#issuecomment-1685710678](https://github.com//github.com/swift-actions/setup-swift/issues/591/issues/issuecomment-1685710678)

### Refacot

* Styling ([e4177b2](https://github.com/ashvardanian/stringzilla/commit/e4177b291db6fbbe7c69cec40e3d7b092ed7488a))

### Refactor

* `on_stack`/`on_heap` to `internal`/`external` ([69e8b70](https://github.com/ashvardanian/stringzilla/commit/69e8b70273a022f4249b45c5d526823f9944bdd4))
* `start` and `length` common member names ([cff3a38](https://github.com/ashvardanian/stringzilla/commit/cff3a38fd6f2b5e06e71567c2ccd30bcfccb00cc))
* args checking ([9395a6b](https://github.com/ashvardanian/stringzilla/commit/9395a6b390e43fa567c29ceb442d972df8f70dc3))
* C++17 -> C99 ([e4429ef](https://github.com/ashvardanian/stringzilla/commit/e4429ef976ab176e8700dddc8eb155680fcef547))
* comparsion operators ([5883633](https://github.com/ashvardanian/stringzilla/commit/5883633bdc6fa4a2bf18cfb97b76a4e1fd7fc537))
* Deprecating C++ version in favor of C99 ([042e59e](https://github.com/ashvardanian/stringzilla/commit/042e59e32d89313ffa56b74ea6984fd74e82dd86))
* Directory structure ([c36bd68](https://github.com/ashvardanian/stringzilla/commit/c36bd685a1b3dac3dc188f2e500fc39999e3a95f))
* Drop slow sorts ([15f1b30](https://github.com/ashvardanian/stringzilla/commit/15f1b30b28f44f4bd1ee6bb3b666db978366d67e))
* Larger arrays for modern CPUs ([96e7234](https://github.com/ashvardanian/stringzilla/commit/96e7234ae990d4d664e47adb4cecfa8340766b23))
* Layout and spelling ([08cc0c7](https://github.com/ashvardanian/stringzilla/commit/08cc0c79de61348650e81eb597d0d1a8d0a833e1))
* Moving constants to the top ([b3c2da2](https://github.com/ashvardanian/stringzilla/commit/b3c2da2ad53bf4426d9c522e20008b7473a6affa))
* New C API for JS ([05a409c](https://github.com/ashvardanian/stringzilla/commit/05a409ce7ab1f76582c7936d2a4d2d6c99e7b3ed))
* no need to cast to string ([ec1744a](https://github.com/ashvardanian/stringzilla/commit/ec1744a7ffaf00d67cb224409aa802c9160fce88))
* Ops order and style ([3a18292](https://github.com/ashvardanian/stringzilla/commit/3a182922c6aec90a3b836bca96471c8810642e7d))
* Regrouping folders ([d9fb16d](https://github.com/ashvardanian/stringzilla/commit/d9fb16d7bab046abbe7a990b52172f98f99b4b17))
* rename `Slices` to `Strs` ([ed8f360](https://github.com/ashvardanian/stringzilla/commit/ed8f3608735c00636aa58c4b811de30b08b5c423))
* Rename bindings file ([f54b791](https://github.com/ashvardanian/stringzilla/commit/f54b791d7f6899023c5b05338287470459dcfee5))
* Restarting CPython bindings ([9fef6d8](https://github.com/ashvardanian/stringzilla/commit/9fef6d8cb32ae4966f46944add18f0017c5288a6))
* Swift bindings ([1c4ffda](https://github.com/ashvardanian/stringzilla/commit/1c4ffda9dbf923ff4a888d8637f603ed171b2894))
* Sync up Py and JS bindings ([cffae4a](https://github.com/ashvardanian/stringzilla/commit/cffae4a684437eafe3ed75299d2fb8c82baa1019))
* Tests, docs ([50adb32](https://github.com/ashvardanian/stringzilla/commit/50adb32ef6b4127ac49db418ae15051267aea405))
* Using `strzl_array_t` structure ([a1249a7](https://github.com/ashvardanian/stringzilla/commit/a1249a710a107e4040dc826e40f70a03b3b29952))

### Test

* Printing failed cases ([10068f6](https://github.com/ashvardanian/stringzilla/commit/10068f617b26bc47e88600ac33573a5d417aa695))
ashvardanian pushed a commit that referenced this pull request Feb 6, 2024
# 1.0.0 (2024-02-06)

### Add

* `_sz_find_3byte_serial` ([d542c4b](https://github.com/ashvardanian/stringzilla/commit/d542c4b3a7430efb0dc5745ee390921b385fec13)), closes [#70](https://github.com/ashvardanian/stringzilla/issues/70)
* `begin`, `size` and other utility C++ functions ([5378a6c](https://github.com/ashvardanian/stringzilla/commit/5378a6c869f0b84b50dd5cd02654b0c9ad476dcd))
* `memmem` to benchmarks ([aa14ac8](https://github.com/ashvardanian/stringzilla/commit/aa14ac8370066b1c48eca4aec2412e3df8230962))
* `MemoryMappedFile` ([28638f8](https://github.com/ashvardanian/stringzilla/commit/28638f85ab8887b036859adc44897bc6d85b3b2e))
* `partition` method in Python ([257ac6c](https://github.com/ashvardanian/stringzilla/commit/257ac6cff6860b2893f939bd16cef97cf9420853))
* `qsort_r` benchmarks for Linux ([e31127a](https://github.com/ashvardanian/stringzilla/commit/e31127a7969bbf3336cbb499504a4fe290c14db1))
* `sort()` and `order()` efficient Py methods ([dd4f57f](https://github.com/ashvardanian/stringzilla/commit/dd4f57f95d239492bc21bf76bcee8dc0b1642d08))
* `sort()` interface for Python ([e657baf](https://github.com/ashvardanian/stringzilla/commit/e657bafa5d709a853b9aeb684bfdec5e37924c65))
* `startswith` & `endswith` ([c1cbb77](https://github.com/ashvardanian/stringzilla/commit/c1cbb77fc29382f04d8ad36de2a28d448a8806e5))
* `Str` concatenation ([1d7fed2](https://github.com/ashvardanian/stringzilla/commit/1d7fed2ee4abf4763cc3d9b21d9515a1beb16cf6))
* `Strs` structure in CPython ([4841a54](https://github.com/ashvardanian/stringzilla/commit/4841a541d327c07305fd3d2ceb7a289a6269116e))
* `sz_copy_serial` implementation ([d47fa1c](https://github.com/ashvardanian/stringzilla/commit/d47fa1c3493013b058b10b7387a4895cf2129fb4))
* `sz_move_serial` implementation (#60) ([1342711](https://github.com/ashvardanian/stringzilla/commit/1342711db45bda465b80b36ff98a058a349adcf1)), closes [#60](https://github.com/ashvardanian/stringzilla/issues/60)
* `sz_string_erase` implementation ([a64e091](https://github.com/ashvardanian/stringzilla/commit/a64e091247da3799fbbed129b95607c639e5ccac))
* Arm Neon character counter ([db2f523](https://github.com/ashvardanian/stringzilla/commit/db2f52388a973f1fbddb14913f8ae273adfc33d2))
* Arm NEON Raita search ([7a085e6](https://github.com/ashvardanian/stringzilla/commit/7a085e61af38a1f28e0b2c7faf13c203eff4bf0a))
* Auto-fetching Google Benchmark ([28311f3](https://github.com/ashvardanian/stringzilla/commit/28311f3fa808c6b42de0959bd59297b493418664))
* AVX-512 for `character_set` search ([543a942](https://github.com/ashvardanian/stringzilla/commit/543a94299a47dc16f64374d10217cf544fe346b2))
* AVX-512 functionality ([cca3d19](https://github.com/ashvardanian/stringzilla/commit/cca3d19ccc5cc72b0e08cd81a8955b79b31dc548))
* AVX-512 implementations for similarity scores ([e205c7a](https://github.com/ashvardanian/stringzilla/commit/e205c7a0ea9534732403d8e24990b74a1803b2ae))
* AVX-512 implementations for substring search ([35f7a11](https://github.com/ashvardanian/stringzilla/commit/35f7a11568b09c5b7e3966139b4935fd95caf1fc))
* AVX-512 Levenshtein distance for longer strings ([2b33e61](https://github.com/ashvardanian/stringzilla/commit/2b33e618e76ca6ffc151adf1f54294f62701374a))
* AVX2 baseline implementation ([a99dd56](https://github.com/ashvardanian/stringzilla/commit/a99dd5672f5b92384fa2645a1c81267c8400ec0f))
* Baseline C++ class ([979bf56](https://github.com/ashvardanian/stringzilla/commit/979bf56b02a13e782a757b5f54324883ed7265cf))
* Baseline NodeJS binding ([7abc456](https://github.com/ashvardanian/stringzilla/commit/7abc456ca8ea5bf494b9a975f14b909cebba5c53))
* Baseline NodeJS binding ([611c2c1](https://github.com/ashvardanian/stringzilla/commit/611c2c12ce16625cfbb0af30ab5dd41f80098e6a))
* Benchmark for [<>] search ([e8dd299](https://github.com/ashvardanian/stringzilla/commit/e8dd29902c5488226d771902f1383625b5f277c4))
* Benchmarks notebook ([317fd7f](https://github.com/ashvardanian/stringzilla/commit/317fd7ff8a949f029d58fd8bedc29d53faafef2f))
* Benchmarks on synthetic strings ([f6d8522](https://github.com/ashvardanian/stringzilla/commit/f6d852213c7c35d38145596c7376a761ee59ac92))
* Buffer protocol support ([f4c17b9](https://github.com/ashvardanian/stringzilla/commit/f4c17b91f17e34fa58b391fc0191c9fdb6588757))
* C++ API for scores and fingerprints ([b8778d0](https://github.com/ashvardanian/stringzilla/commit/b8778d035debb494485974ffe80049ddde268f8f))
* char-set, reverse order, and scoring in Py ([563f264](https://github.com/ashvardanian/stringzilla/commit/563f2647722a386ecd46b00b9c85affe9eb1a759)), closes [#23](https://github.com/ashvardanian/stringzilla/issues/23) [#12](https://github.com/ashvardanian/stringzilla/issues/12)
* Collection-level `append`, `extend` ([5066505](https://github.com/ashvardanian/stringzilla/commit/506650585bbb20c0cdf40ac40db6f65c52187ce6))
* Commonly used character sets ([00cc2f3](https://github.com/ashvardanian/stringzilla/commit/00cc2f3b6ef600559db7e57ec51ca3447af8501d))
* comparsion operators ([abe63e4](https://github.com/ashvardanian/stringzilla/commit/abe63e4a7e89dd02e526ecdb1a7f0505dcbd925d))
* compile-time dispatch for fill/move/copy ([9cb00fc](https://github.com/ashvardanian/stringzilla/commit/9cb00fc154643d2fabec451819ee3a18950ddb9e))
* Counting specific characters or subtrings ([67e71d8](https://github.com/ashvardanian/stringzilla/commit/67e71d8647a8a722cac2e3e7f0385f3f9759e9c0))
* Diagonal order Levenshtein distance computation ([d1ac8e3](https://github.com/ashvardanian/stringzilla/commit/d1ac8e3d1905463beef858b45306e02fe881a7ab))
* Dynamic dispatch ([2059c87](https://github.com/ashvardanian/stringzilla/commit/2059c87c9e5b3150c5b45b1161dd405b6707ee85))
* evals for hash quality ([20b4db0](https://github.com/ashvardanian/stringzilla/commit/20b4db091972a0c797495e1db901f0abb0fc250a))
* Examples of lcoating unique strings ([8f5a09b](https://github.com/ashvardanian/stringzilla/commit/8f5a09bdfd61f9d6d59ada8c1511c0658252e21f))
* Exception-throwing cases for STL strings ([8318b32](https://github.com/ashvardanian/stringzilla/commit/8318b32a72be92adc9cc80ee0b03ec73e62eea17))
* Experimental rolling hashes on NEON ([571d1b2](https://github.com/ashvardanian/stringzilla/commit/571d1b27ed34a76e3070b5bb95049a8347ddfc4d))
* Fast integer division for random generator ([c0cc8ba](https://github.com/ashvardanian/stringzilla/commit/c0cc8ba35349f32cb8220388c03dd6b1b6a27177))
* Fast replacements and alloc-free concat ([3720cd0](https://github.com/ashvardanian/stringzilla/commit/3720cd0309761aecfeb16414995e0f29195a8ce0))
* Full line search benchmarks ([9db22d5](https://github.com/ashvardanian/stringzilla/commit/9db22d544475989a703501392c82dbceae0acf84))
* get item with slice ([ab5e5ac](https://github.com/ashvardanian/stringzilla/commit/ab5e5ac868dce0727858d55315e2f3bcafe20e3b))
* Horspool algorithm for longer patterns ([19ed36c](https://github.com/ashvardanian/stringzilla/commit/19ed36c7fb747b6a6c72572733b74b7efdb75890))
* Hybrid sorting with Radix and Quick Sorts ([e6e532c](https://github.com/ashvardanian/stringzilla/commit/e6e532c79f1f662516c98639cb92c6765ab9edf8))
* Initial Arm Neon support ([9d38c7d](https://github.com/ashvardanian/stringzilla/commit/9d38c7d467f8c6ca3a2c7b82b29cb86bb921f9e6))
* Initial Levenstein distance ([9093983](https://github.com/ashvardanian/stringzilla/commit/9093983b7751480fe999d0b374699c7ff11a056c))
* Levenshtein distance benchmarks ([19f5dd5](https://github.com/ashvardanian/stringzilla/commit/19f5dd59111e4d24d29dac24dc4fd5ec5369048e))
* Levenshtein distance tests in C++ ([1efccd9](https://github.com/ashvardanian/stringzilla/commit/1efccd9dd5a466e5e575ff84136d4e1c5f294015))
* Levenstein distance ([7723703](https://github.com/ashvardanian/stringzilla/commit/7723703295d1bdf22c45176b30e9fdf2c643d9fb))
* Merge-, Insertion-, Quick-sorting algos ([061d523](https://github.com/ashvardanian/stringzilla/commit/061d523b370d63ea9b3a0d0652c1bd7132ca82dd))
* Merge-sort for strings ([60e683b](https://github.com/ashvardanian/stringzilla/commit/60e683ba6d611d037eb49a4aa818a7af424f4cbf))
* Micro-benchmarking notebook ([c70e811](https://github.com/ashvardanian/stringzilla/commit/c70e811c81a1e76ce19a321b0ceeb6886f36fa5f))
* misaligned tests ([1e94b7d](https://github.com/ashvardanian/stringzilla/commit/1e94b7d15f81440392016c169b22b24f36eb0888))
* missing `append`, `assign` STL APIs ([b28136a](https://github.com/ashvardanian/stringzilla/commit/b28136aace2fda73544d9194ccfbf693e2d643c6))
* Mutable string slices ([009080b](https://github.com/ashvardanian/stringzilla/commit/009080b118064186fb6ced5aa76e9229ca3c34df))
* Non-STL Pythonic slicing ([8ca6f03](https://github.com/ashvardanian/stringzilla/commit/8ca6f03bb20be543ea8ea122f36863bdf64bb656))
* Purely `qsort`-based hybrid sort benchmark ([eaef636](https://github.com/ashvardanian/stringzilla/commit/eaef636ff64ef0b9f730f739cb57771f776f4826))
* Python bindings ([1c759c2](https://github.com/ashvardanian/stringzilla/commit/1c759c257afe048026bc89d0a8478067b2e43b0f))
* random `shuffle` for strings collections ([6e3309c](https://github.com/ashvardanian/stringzilla/commit/6e3309c00d75326ed87caaa5673fcd6296b68c7d))
* Random strings generator ([eafaba0](https://github.com/ashvardanian/stringzilla/commit/eafaba00315e553f30b1b6e77d5fdc19b6378341))
* Randomize non-owning ranges ([71890ac](https://github.com/ashvardanian/stringzilla/commit/71890acc26926274b56cf22c94e5d977bc007191))
* Range matchers for charsets ([207d1de](https://github.com/ashvardanian/stringzilla/commit/207d1de4fe99b5b1d0a9c6ddf154f7ca27b32f65))
* read-only operations for `string` ([df10847](https://github.com/ashvardanian/stringzilla/commit/df10847c8b5c4ca29e0ca71b9227fb1f8f33897d))
* reverse order AVX2 & benchmarks ([ac05a39](https://github.com/ashvardanian/stringzilla/commit/ac05a39ba22afe02864da2f9c8bfdd3d8a854a97))
* Reverse order iterator ([2931be7](https://github.com/ashvardanian/stringzilla/commit/2931be77445b2a5b3c37f6a961fb10b1f22825d8))
* Rust bindings ([5d75ccf](https://github.com/ashvardanian/stringzilla/commit/5d75ccfe82cd676cc36653e79872a5b1fc2ad659)), closes [#66](https://github.com/ashvardanian/stringzilla/issues/66)
* Search benchmark ([f257df6](https://github.com/ashvardanian/stringzilla/commit/f257df671418f8276e98394bc9e709962987d761))
* Separate notebook for similarity benchmarks ([f3f2ae6](https://github.com/ashvardanian/stringzilla/commit/f3f2ae6c394922278484bda1e99b226a6d4ff5b1))
* Shuffling method in Python ([6b82311](https://github.com/ashvardanian/stringzilla/commit/6b82311f8c12afe731eccab36642fabe6c327cde))
* Slices and rich comparisons ([d2d8de9](https://github.com/ashvardanian/stringzilla/commit/d2d8de9707ebd659fd425efd89bd25f7f4c74c1c))
* small string optimization in C & Cpp ([a0986e9](https://github.com/ashvardanian/stringzilla/commit/a0986e92c24248410e68aadb367af51a590fdee1))
* Sorting functionality for C++ ([39cc4d4](https://github.com/ashvardanian/stringzilla/commit/39cc4d40e6faf7628d2df34f7a1d99723b9bdec5))
* Split functionality ([c3e28c9](https://github.com/ashvardanian/stringzilla/commit/c3e28c954174c5d48337f78c5dda635d9af8c9cb))
* Split into consecutive slices ([f984397](https://github.com/ashvardanian/stringzilla/commit/f984397d16f3640bf212431af09a93ad81180f9c))
* Split ranges ([c591599](https://github.com/ashvardanian/stringzilla/commit/c5915999f08b69931c9249718b49e0666fc41842))
* Split ranges ([ca5e95b](https://github.com/ashvardanian/stringzilla/commit/ca5e95b1ef0f3ce9263b632372fd901539eb9055))
* SSE and Arm variants of CRC32 ([674da60](https://github.com/ashvardanian/stringzilla/commit/674da60244e283845453a874b44d19e8cf7c4369))
* STL compatibility tests ([5281628](https://github.com/ashvardanian/stringzilla/commit/52816283ec98d84b44f8c4ea7af76e076a237d91))
* String conversion functionality ([46ef2b7](https://github.com/ashvardanian/stringzilla/commit/46ef2b708de98ac7c17ef5aa0a5771f5520ca1aa))
* String literals, reverse iterators ([9a48ba2](https://github.com/ashvardanian/stringzilla/commit/9a48ba24dc87ac98553d599c929e62f30fd16a55))
* strippers on both sides ([782cffb](https://github.com/ashvardanian/stringzilla/commit/782cffb4c5e6b72cc566726b576fcfdb707e5c10))
* Subscript methods ([8c6ae0a](https://github.com/ashvardanian/stringzilla/commit/8c6ae0a8c2599ce33b94ef77e6101b6e8ef2a513))
* support of negative slices ([76ebcc4](https://github.com/ashvardanian/stringzilla/commit/76ebcc483605a0ce2312804abc6ad0732b248e3c))
* SwiftPM binding to C ([3940549](https://github.com/ashvardanian/stringzilla/commit/39405490c834677647c94172fb62414dae7bdfa6))
* test for slice operator ([70edef1](https://github.com/ashvardanian/stringzilla/commit/70edef1fe6ef906ef5df2032d4d4fc4dcde8ab92))
* tests for slices ([374fc0b](https://github.com/ashvardanian/stringzilla/commit/374fc0b7d3df8e2630d887b760f0463e750e5a43))
* tests for Slices ([a103c27](https://github.com/ashvardanian/stringzilla/commit/a103c27c61b9679a037fc3324aa6e4569a61b1ea))
* Vectorized `count` ([ef067d8](https://github.com/ashvardanian/stringzilla/commit/ef067d805b7678f1db84ebd55ab4994bb0e351df))
* Vectorized `split` for Python ([69b1e1a](https://github.com/ashvardanian/stringzilla/commit/69b1e1a53d69e00ece4922feb7c0bce9971c94be))
* Windows support ([79e0f47](https://github.com/ashvardanian/stringzilla/commit/79e0f476ef8637c54f52f7ef05e5b6772b4d4582))

### Break

* `sz_string_erase` to return delta ([7f01630](https://github.com/ashvardanian/stringzilla/commit/7f01630fbb9079adebea876a02e3b8408bf70d48))
* Avoiding LibC and new API ([efafbbf](https://github.com/ashvardanian/stringzilla/commit/efafbbf0687f1d315c94b54b08e5b93f91e88be0))
* Deprecate multi-source `Strs`; split tests ([1e09400](https://github.com/ashvardanian/stringzilla/commit/1e09400fe6e07936b9679a35731ab87819c5f8ac))
* New testing suite ([927bff1](https://github.com/ashvardanian/stringzilla/commit/927bff1f372da6702242fea871a5cb1142221a92))
* r-prefixed names for reverse order ([7f1e8c4](https://github.com/ashvardanian/stringzilla/commit/7f1e8c4a4fdb104a51ef97b37a5a5bfa21950265))
* rename C++ `split` to `partition` for consistency ([d8f1940](https://github.com/ashvardanian/stringzilla/commit/d8f194024169ee7d1362a3a7d5461329890d5311))
* Replace `append` -> `expand` ([bb02881](https://github.com/ashvardanian/stringzilla/commit/bb02881979e8ab1e8009b0bdbdeecfe278016165))
* Shorter function prefixes ([c0e129d](https://github.com/ashvardanian/stringzilla/commit/c0e129d8289d5df6ec65b29d2f90ec55d8a19ca5))
* Use two Rabin rolling hashes ([f4980d9](https://github.com/ashvardanian/stringzilla/commit/f4980d915d1f5b567cdef564a384fc6ab471e83f))

### Build

* Released 1.0.0 [skip ci] ([ac6afd5](https://github.com/ashvardanian/stringzilla/commit/ac6afd5cce010f8b652aa12fabb0a856456d3544)), closes [#70](https://github.com/ashvardanian/stringzilla/issues/70) [#60](https://github.com/ashvardanian/stringzilla/issues/60) [#23](https://github.com/ashvardanian/stringzilla/issues/23) [#12](https://github.com/ashvardanian/stringzilla/issues/12) [#66](https://github.com/ashvardanian/stringzilla/issues/66) [#63](https://github.com/ashvardanian/stringzilla/issues/63) [#45](https://github.com/ashvardanian/stringzilla/issues/45) [#74](https://github.com/ashvardanian/stringzilla/issues/74) [github.com/swift-actions/setup-swift/issues/591#issuecomment-1685710678](https://github.com/github.com/swift-actions/setup-swift/issues/591/issues/issuecomment-1685710678)
* Released 1.0.0 [skip ci] ([1e6b0f6](https://github.com/ashvardanian/stringzilla/commit/1e6b0f675c1b749024ee3ae2ab364672cd0016f7))
* Released 1.0.1 [skip ci] ([ab185a6](https://github.com/ashvardanian/stringzilla/commit/ab185a6dc01b4ebe69c0d54a7989b54b39f969f6))
* Released 1.0.2 [skip ci] ([dc4ce27](https://github.com/ashvardanian/stringzilla/commit/dc4ce2740e57e5ede6478f2637faa8cdc5f345e1))
* Released 1.0.3 [skip ci] ([0280ca6](https://github.com/ashvardanian/stringzilla/commit/0280ca60abeab793ee97d8778e201b3ac95dd11b))
* Released 1.1.0 [skip ci] ([22682e7](https://github.com/ashvardanian/stringzilla/commit/22682e732beafb5430b1186da9b6474ee37949b5))
* Released 1.1.1 [skip ci] ([ff64dcc](https://github.com/ashvardanian/stringzilla/commit/ff64dcc7207375416da3ec5b9e9fc15c1177bc8d))
* Released 1.1.2 [skip ci] ([8d2436d](https://github.com/ashvardanian/stringzilla/commit/8d2436dfeb8c62ff2aece8d9cc3650990aba1c1f))
* Released 1.1.3 [skip ci] ([3136ac8](https://github.com/ashvardanian/stringzilla/commit/3136ac868cdee2e529e6f4888c611eab3fe9bd3c))
* Released 1.2.0 [skip ci] ([085b89b](https://github.com/ashvardanian/stringzilla/commit/085b89ba046f7abf0552e770071a859d95d10b1c))
* Released 1.2.1 [skip ci] ([075ce13](https://github.com/ashvardanian/stringzilla/commit/075ce1385aef1b4a781716c85e4b36c9e91fe6cf))
* Released 1.2.2 [skip ci] ([ddac709](https://github.com/ashvardanian/stringzilla/commit/ddac7099cf50a21a99b1a432ec2dab1c09ef80df))
* Released 2.0.0 [skip ci] ([bc30dcf](https://github.com/ashvardanian/stringzilla/commit/bc30dcfdfa480bafde28264f1958cd8e7bd1d91e))
* Released 2.0.1 [skip ci] ([e44faed](https://github.com/ashvardanian/stringzilla/commit/e44faed6fffa8175b2ed4afb262efd6672f1ee08))
* Released 2.0.2 [skip ci] ([74bce88](https://github.com/ashvardanian/stringzilla/commit/74bce88200a6119cc43a9bd4e32f5b0b1328cf21))
* Released 2.0.3 [skip ci] ([d728848](https://github.com/ashvardanian/stringzilla/commit/d728848723ecbe5cec8fd47ce5e45fad7f2bd0ff))
* Released 2.0.4 [skip ci] ([7d0de91](https://github.com/ashvardanian/stringzilla/commit/7d0de911fd9a851175be5e8ea247d79df0dfe198))

### Docs

* Add Apache 2.0 LICENSE ([d9a52df](https://github.com/ashvardanian/stringzilla/commit/d9a52df7b256283105bc5381e566d61761be7e17))
* Add development plans ([cf81e41](https://github.com/ashvardanian/stringzilla/commit/cf81e413075560b43f34173deca9473db222e931))
* Annotate SWAR methods ([8bd2c20](https://github.com/ashvardanian/stringzilla/commit/8bd2c20c0859b0e80cf3302d3385963c002faadc))
* benchmark against BioPython ([c1b85bd](https://github.com/ashvardanian/stringzilla/commit/c1b85bdf90054278e525a97d6e633eb0d6c00c3a))
* Build instructions and contribution guide ([a7883aa](https://github.com/ashvardanian/stringzilla/commit/a7883aaa151a9dd87be196968a1f6d0bb9202d2d))
* correct SSO size in `libc++` ([86ba553](https://github.com/ashvardanian/stringzilla/commit/86ba5533db7bd0cc302050d568c38d77410ba172))
* Extend algorithms ([266c017](https://github.com/ashvardanian/stringzilla/commit/266c01710dddf71fc44800f36c2f992ca9735f87))
* Improved intro ([034260b](https://github.com/ashvardanian/stringzilla/commit/034260b1b6fec373cec3e101cb1aaa0c28b0d868))
* Less sections ([371c24f](https://github.com/ashvardanian/stringzilla/commit/371c24f65c5d1867a8cc417d0c51264da8e17d79))
* Library description ([40dd6f5](https://github.com/ashvardanian/stringzilla/commit/40dd6f56b37b56aad4d47ca73a52735070af9782))
* Linking issues and refreshing C part ([84bc1f5](https://github.com/ashvardanian/stringzilla/commit/84bc1f55b4f161e1b76b4969d8eb6867ce289c26))
* list performance considerations ([0b61591](https://github.com/ashvardanian/stringzilla/commit/0b61591bec153361aa1dff9139b0c940dbf1baae))
* Major improvements for hashing ([c6110b5](https://github.com/ashvardanian/stringzilla/commit/c6110b5890fa6de023c0d5fc7d39c3aa0e921293))
* Make front page easier on the eye ([edc6763](https://github.com/ashvardanian/stringzilla/commit/edc67632f126b691699351b4f208803642933cdf))
* More benchmarking instructions ([4ef7d64](https://github.com/ashvardanian/stringzilla/commit/4ef7d6477841ac0b6991642f27ace05f5b636906))
* More datasets for benchmarks ([87d1973](https://github.com/ashvardanian/stringzilla/commit/87d1973e6f7a05b8540fdfe3e9db0fd03b753c67))
* README and warnings ([f4348e4](https://github.com/ashvardanian/stringzilla/commit/f4348e48b8a5971c2dc16decf74b7cd77cea1c86))
* recommending VSCode extensions ([b19a186](https://github.com/ashvardanian/stringzilla/commit/b19a186897ca3802f7f4fe2c64aac252be803875))
* Refined README ([3caf621](https://github.com/ashvardanian/stringzilla/commit/3caf621596aa070f8720a315d9c07536ecd39d17))
* Refresh intro ([445f292](https://github.com/ashvardanian/stringzilla/commit/445f292ac17a4b935203d7fea3aa7a42c2d7e8d7))
* Restructure groups ([87c55b7](https://github.com/ashvardanian/stringzilla/commit/87c55b7b753145ad27c7f3083280bed787f66d1f))
* Sections on random strings ([067ef21](https://github.com/ashvardanian/stringzilla/commit/067ef21aebb3d828f77e135745d79840e726b516))
* Sorting and PRNG benchmarks ([d7a6e33](https://github.com/ashvardanian/stringzilla/commit/d7a6e33a8ea1ba68242ef4513171499bbbcc3c13))
* spelling ([49b70e8](https://github.com/ashvardanian/stringzilla/commit/49b70e8f9c1f090b85791107da4c24f0f5ee2f19))
* Spelling ([95c9fcf](https://github.com/ashvardanian/stringzilla/commit/95c9fcf8d507eea15fe5ba2450ac942ba764fa6d))
* Suggesting STL API extensions ([6094006](https://github.com/ashvardanian/stringzilla/commit/60940064aeeabfe60cc6e6a62e00f38b9e03668a))
* Update [skip release] ([1b336ee](https://github.com/ashvardanian/stringzilla/commit/1b336eee886c84d6afda9519f493432f3a4cfe47))
* Update LICENSE and table ([76d0c1f](https://github.com/ashvardanian/stringzilla/commit/76d0c1f8b48a983baa9cd70fc63656da19284755))
* Update README.md ([20de986](https://github.com/ashvardanian/stringzilla/commit/20de986212b2afda9f89958f0114ecba1a79c019))
* Update table [skip release] ([cdf425a](https://github.com/ashvardanian/stringzilla/commit/cdf425aa6161fb3c8be8160be4ddcf6e5c0d1a5e))

### Fix

* `comparator` function signature ([635ce6e](https://github.com/ashvardanian/stringzilla/commit/635ce6e1894ec12fa68e6333b32f4f7adfb6c315))
* `length` location assuming little-endian hardware ([e584f8b](https://github.com/ashvardanian/stringzilla/commit/e584f8bf79e363668afb30724451e099622604bb))
* `misaligned_len` estimate ([90ea05d](https://github.com/ashvardanian/stringzilla/commit/90ea05d217ebb7f7662a5a532c4196a70e8b7404))
* `qsort_r` argument order ([eb7c8f8](https://github.com/ashvardanian/stringzilla/commit/eb7c8f891a84e77294f27781cff360c2fb87b1ec))
* `qsort_s` vs `qsort_r` on MacOS ([7aaf624](https://github.com/ashvardanian/stringzilla/commit/7aaf624343008f2d862dc5f12110a32a1a20f534))
* `static_cast` for Clang builds ([246d79d](https://github.com/ashvardanian/stringzilla/commit/246d79dd0229bd655d4724c366695c93d2c27f40))
* `strzl_sort_config_t` symbol ([0e6cda7](https://github.com/ashvardanian/stringzilla/commit/0e6cda78755b57b23064aa5533a367e7546c8c52))
* `sz_move_serial` in reverse order ([6bbc963](https://github.com/ashvardanian/stringzilla/commit/6bbc9636ff5d10cfbe31509bf211151a3c6fe74b))
* `sz_size_bit_ceil(1)` == 1 ([5f19a16](https://github.com/ashvardanian/stringzilla/commit/5f19a164cd103be5aab436bddebb0183ea15200d))
* `sz_size_bit_ceil` and missing constructors ([174fc15](https://github.com/ashvardanian/stringzilla/commit/174fc150e2cc68925a4720e42e3540457c9ed979))
* `sz_size_t` size in MSVC ([d0ad4aa](https://github.com/ashvardanian/stringzilla/commit/d0ad4aa1deedf963ba836b662a2a18eda40b01f4))
* `sz::string` constructors ([805b99a](https://github.com/ashvardanian/stringzilla/commit/805b99a72c8cde876de60fba38d63ddcf74f0e96))
* 32-bit integer overflow in `sz_rfind_avx512` ([2833707](https://github.com/ashvardanian/stringzilla/commit/283370738d715a6fdd03acdb35eecb454492bf1f))
* Alignment score Py test ([3521a8f](https://github.com/ashvardanian/stringzilla/commit/3521a8f160792bbc7a40a69bdafae8ed9ffb14e8))
* Allow no args to `split` ([dd5dd1c](https://github.com/ashvardanian/stringzilla/commit/dd5dd1c11f61f69031412d86f14967b60baa750f))
* Applying sort order in Python ([73e1fc7](https://github.com/ashvardanian/stringzilla/commit/73e1fc7eaca606badcf8f94dcfe77d8fb1a3c90d))
* assertion logging condition ([1c1f4f7](https://github.com/ashvardanian/stringzilla/commit/1c1f4f75dff2c5c2472c9ca6e03d7d1a266d8c70))
* AVX-512 compilation and naming ([82820d4](https://github.com/ashvardanian/stringzilla/commit/82820d459c28aac5c7433a0f81fd9234ce265122))
* AVX-512 tests and cheaper copy construction ([08810e9](https://github.com/ashvardanian/stringzilla/commit/08810e961e04215dfc95630f977daa7b3260417d))
* AVX2 compilation ([3f32d89](https://github.com/ashvardanian/stringzilla/commit/3f32d890a8e561d864152f6e1a65f1ecafad06a1))
* Benchmarks compilation ([204444f](https://github.com/ashvardanian/stringzilla/commit/204444ff9befb044d74d0d6fc7446e0ec11f282a))
* Boundary condition with misaligned loads ([0d39e81](https://github.com/ashvardanian/stringzilla/commit/0d39e81f9c1f65748250371363bdec0925840636))
* Bounded Levenstein distance ([a875b4a](https://github.com/ashvardanian/stringzilla/commit/a875b4a3c70a1556646a7b167506715bd70eae66))
* Buffer width for NodeJS bindings ([3871bbf](https://github.com/ashvardanian/stringzilla/commit/3871bbf3b0f60b783fa0a7656d3804df849710c0))
* bugs in assignment, initialization, ... (#63) ([b234e7c](https://github.com/ashvardanian/stringzilla/commit/b234e7cf61ae8302e15bb234dc702992de1ced15)), closes [#63](https://github.com/ashvardanian/stringzilla/issues/63)
* C++ `rfind` second argument of two ([a243ef1](https://github.com/ashvardanian/stringzilla/commit/a243ef1c9958e0fd2f8f13b822f7dd400b868846))
* Cast to `UInt64` in Swift ([2a78408](https://github.com/ashvardanian/stringzilla/commit/2a78408a99f11fa4b20962323e6994f7b2f5cf68))
* Comparator ([c64dafa](https://github.com/ashvardanian/stringzilla/commit/c64dafa348a58695c10ae314435df76b5bda1650))
* Compilation ([b896f77](https://github.com/ashvardanian/stringzilla/commit/b896f77672c4a6c6c0a666493508f6dbca8771c8))
* Compilation ([71ff4df](https://github.com/ashvardanian/stringzilla/commit/71ff4dfbc0bbace33dfed9234c71ebd1d96b14d4))
* Compilation and warnings ([df47d8a](https://github.com/ashvardanian/stringzilla/commit/df47d8aa57047ebbb657cb3ca5caf831c118ab5c))
* Compilation for older C++ standards ([5629c0b](https://github.com/ashvardanian/stringzilla/commit/5629c0b42a1d32b40bec450751693abd78f265be))
* Compilation on GCC11 ([4da34a8](https://github.com/ashvardanian/stringzilla/commit/4da34a8a132ad7de31cf3fcc696044334cc20da3))
* Compilation on MacOS ([c1d138c](https://github.com/ashvardanian/stringzilla/commit/c1d138ca5f5fb43e3da2953291562b3c44fcbb1d))
* Constructing from string and moves ([9e3aa95](https://github.com/ashvardanian/stringzilla/commit/9e3aa952d8f296b1a3776fd860b6f18749aa45ce))
* Counting substrings with `allowoverlap` ([8f35f54](https://github.com/ashvardanian/stringzilla/commit/8f35f54d8ebc3d552e82a3bad8dbdbb8c1b3903a))
* Cpp20-only constructor ([62e6788](https://github.com/ashvardanian/stringzilla/commit/62e678854acdef2b01efe411765082d7f1e4440a))
* Default argument sign for NW. scores ([3cb1f7a](https://github.com/ashvardanian/stringzilla/commit/3cb1f7a0daf3475ef9507c7d1895d6f7ca83c958))
* Exit search loop in benchmarks ([875200e](https://github.com/ashvardanian/stringzilla/commit/875200edae8279dc668bd21136df580dff271bfd))
* Experimental hashes names ([ff6a660](https://github.com/ashvardanian/stringzilla/commit/ff6a660ceb7bd14e1b0cdc05b20dd3601d4f4b53))
* Global `rsplit` return type ([e00963e](https://github.com/ashvardanian/stringzilla/commit/e00963e38192714253c88b7e2b823da86e216990))
* Identical overlapping semantics to Python ([f1ffe51](https://github.com/ashvardanian/stringzilla/commit/f1ffe518ffa3c67567d27c6d78ae22f7fefd98b3))
* include <stdexcept> for `out_of_range` ([0e5b85b](https://github.com/ashvardanian/stringzilla/commit/0e5b85b671917a8cb84ca29d22fb5a1ccdf9f3f6))
* Invoking the wrong constructor in tests ([8d450f5](https://github.com/ashvardanian/stringzilla/commit/8d450f574330d4753f4d3f2b6304c57a8eb8aa04))
* JS compilation and missing symbols ([582d5ab](https://github.com/ashvardanian/stringzilla/commit/582d5ab41046e02839880d663dca81eeac27e280))
* JS compilation and missing symbols ([61ed1a1](https://github.com/ashvardanian/stringzilla/commit/61ed1a14e3d517f753384add47f25c07ba86a82f))
* leaks and semantics, testing for memory leaks ([e7f0858](https://github.com/ashvardanian/stringzilla/commit/e7f0858e8bf9d716461aaee8751aec257078792e))
* Masking last comparisons in AVX-512 ([d5f6338](https://github.com/ashvardanian/stringzilla/commit/d5f6338539de3c3253bf65f976953b7f89cc7594))
* Matching Python string semantics ([1067090](https://github.com/ashvardanian/stringzilla/commit/10670905d1abd930ab0798045aa8140e95a44aab))
* memory access after `free` ([ec2e9b2](https://github.com/ashvardanian/stringzilla/commit/ec2e9b2f74373c403423b34574d58128d34d1c5b))
* Memory CPython memory allocations ([49030d4](https://github.com/ashvardanian/stringzilla/commit/49030d4af00b7eb48daa07ae8d7e6c3baeefb231))
* Memory leak and extra `strlen` calls ([a013147](https://github.com/ashvardanian/stringzilla/commit/a0131470ef77f40b1820124d7bef59d05624beda))
* Minor merge issues ([cfa540b](https://github.com/ashvardanian/stringzilla/commit/cfa540b638d2ac4ed415d8f7ccd146f3ce8567bf))
* Misaligned count and non C99 features ([1efd896](https://github.com/ashvardanian/stringzilla/commit/1efd8961d4ae1207058acbd407fcfed21bcb9e3b))
* Missing `__builtin_clzll` symbol ([bd4496a](https://github.com/ashvardanian/stringzilla/commit/bd4496a405823b687f43a7b093f180ba2e3cfc14))
* Missing header and test path ([303390e](https://github.com/ashvardanian/stringzilla/commit/303390e4b56f3acadd1d8d797b7b883cf2a2867b))
* Missing initialization for on-stack string ([5d85174](https://github.com/ashvardanian/stringzilla/commit/5d85174e8aef79d8390a137324e1da82c544be02))
* MSVC-compliant initialization ([ef2d66c](https://github.com/ashvardanian/stringzilla/commit/ef2d66c4fcbe5e56e29c5b16f3d2f420542c2185))
* Normalizing offsets in Py ([351567f](https://github.com/ashvardanian/stringzilla/commit/351567f44e0fb59f307710463acac1ed922dcb87))
* NPM build warnings ([da72015](https://github.com/ashvardanian/stringzilla/commit/da72015dbfcae4bae63176e616dda64d1db108c5))
* NPM build warnings ([b2e4b3e](https://github.com/ashvardanian/stringzilla/commit/b2e4b3e0bccbe1a413d6b6c73c8064ae5e3bd69b))
* Overflow bug in Arm NEON ([cdcc3b7](https://github.com/ashvardanian/stringzilla/commit/cdcc3b7e82f6b77cbdc344f12f1ee2c834048435))
* Overflow on consecutive matches ([f4ab1ea](https://github.com/ashvardanian/stringzilla/commit/f4ab1eab2cb8686c8a146414a5c1d6a5d7427100))
* Passing builds with strictest settings ([629a280](https://github.com/ashvardanian/stringzilla/commit/629a280c7ec1df9737ef85ba7a2785f453f00dda))
* Propagating definitions ([847763f](https://github.com/ashvardanian/stringzilla/commit/847763f7b47cb3de35ceac14db91021ecd8cb740))
* Python bindings passing tests ([e995121](https://github.com/ashvardanian/stringzilla/commit/e995121ca5c4d420cea2b8742338a79ef309eac0))
* python slices of splits used incorrect offsets. ([c7e54e4](https://github.com/ashvardanian/stringzilla/commit/c7e54e4bc123938575a105dbf38d427223c6cd03))
* Python sort ([a1d32d8](https://github.com/ashvardanian/stringzilla/commit/a1d32d8cfd7d40e19e2f6a4c8cb7a1b5c0f0750b))
* Python tests passing ([9cd14ab](https://github.com/ashvardanian/stringzilla/commit/9cd14abdeeb0b666618de58340a8e9667f601b1b))
* Random generator type resolution ([16da145](https://github.com/ashvardanian/stringzilla/commit/16da1451823815b3cbe1471ee055609917583e19))
* remove unnecessary include ([1f863e7](https://github.com/ashvardanian/stringzilla/commit/1f863e7b8c6736a4f976e13297aad5d070f4c8b2))
* reporting if step defined ([6af744c](https://github.com/ashvardanian/stringzilla/commit/6af744cbc3edef0a7cd06f95a64e4c01876a2a92))
* Returning `NULL` without setting the error ([cfffaeb](https://github.com/ashvardanian/stringzilla/commit/cfffaeb3734be9c9d914a58f1ed7f8e348f1046d))
* Reverse order ([250a97e](https://github.com/ashvardanian/stringzilla/commit/250a97ea1da53f8d2ca4f03dd28f67575971b01c))
* Sime constructors in C++11 can't be `constexpr` ([9fbbeb8](https://github.com/ashvardanian/stringzilla/commit/9fbbeb8e720cb2d85bdb341bd16a25e49ec0bd18))
* Skipping `misaligned` region twice ([2457915](https://github.com/ashvardanian/stringzilla/commit/2457915d8b2825b1be85b0a7bd5627d3a4f8c638))
* slice function logic ([a48609b](https://github.com/ashvardanian/stringzilla/commit/a48609bb926f3284bfd33fd52976b30561bb26f3))
* Slices ([8449dda](https://github.com/ashvardanian/stringzilla/commit/8449ddaf695d01aa033af6c81c04af80c894c17d))
* Sort in ascending order ([d049043](https://github.com/ashvardanian/stringzilla/commit/d049043ccb230a29f51e219058755a6927aaf3b3))
* Sort test ([7aa2c0b](https://github.com/ashvardanian/stringzilla/commit/7aa2c0b7315ccdfd9cee84be6d331714ba751691))
* speculative_neon_t count ([571e0a5](https://github.com/ashvardanian/stringzilla/commit/571e0a5269f15c339e176d43f1d7c6e439d8ff8c))
* strzl_sort ([612373b](https://github.com/ashvardanian/stringzilla/commit/612373ba85eec048a8b376d9247470574acc616c))
* SWAR search bug ([b62b9c6](https://github.com/ashvardanian/stringzilla/commit/b62b9c666c8970bb4219f1227b225ecb44a0d707))
* Swift build in Xcode ([3321c85](https://github.com/ashvardanian/stringzilla/commit/3321c8530406f816f2ee7f1f5077855f60a663aa))
* Switch to shared mappings to reduce RAM use ([07bc055](https://github.com/ashvardanian/stringzilla/commit/07bc05532f91dbb49c0b3dd350701fa70fe337a9))
* Throughput calculation for rfind ([1c48a42](https://github.com/ashvardanian/stringzilla/commit/1c48a42f44bd01a833712df893d9e5e3d2cb55d6))
* Use different functions depending on arch ([2ad5790](https://github.com/ashvardanian/stringzilla/commit/2ad5790c20cdf83afc7ab766f9267bd3b2c853f7))
* Use different functions depending on arch ([327a149](https://github.com/ashvardanian/stringzilla/commit/327a149037782df6c07d44974b31009dbfa63727))
* Using the right pragma for GCC ivdep ([ca3b62d](https://github.com/ashvardanian/stringzilla/commit/ca3b62defe47994cd2ce574ffd7bc310a02a5ae3))
* wrong intrinsic for non-AVX512 x86 ([550fb38](https://github.com/ashvardanian/stringzilla/commit/550fb38593c637cf6faf2cb743641d91a4394964))

### Fixes

* RNG instantiation UB, reducing avoiding compiler optimization for the callback. ([1ae31a0](https://github.com/ashvardanian/stringzilla/commit/1ae31a0c37447f55b48ed779e530452af4f14813))

### Format

* Compact code style ([4ddee17](https://github.com/ashvardanian/stringzilla/commit/4ddee17153d07e9381619f6a34c05e5e78d0292b))

### Improve

* `_sz_locate_needle_anomalies` for Arm ([a8df0f9](https://github.com/ashvardanian/stringzilla/commit/a8df0f991644d033250184619f8747fe051a437b))
* `_sz_locate_needle_anomalies` for AVX ([e453ab8](https://github.com/ashvardanian/stringzilla/commit/e453ab86745277ad9c8a3decc0065845e5fc3e80))
* `sz::` and `std::string` are mostly compatible ([41570d6](https://github.com/ashvardanian/stringzilla/commit/41570d6e57b9f62c849c452640383eefd6fcb561))
* `vtbl`-based charset search for NEON ([8ed148e](https://github.com/ashvardanian/stringzilla/commit/8ed148e7d126bae25240aa6637b607d66ae4d263))
* Apply Swift API to both strings and buffers ([d52bdb3](https://github.com/ashvardanian/stringzilla/commit/d52bdb389546e8f4ae459196670977013a321420))
* Avoid inner `for`-loop on Arm NEON ([eafe41c](https://github.com/ashvardanian/stringzilla/commit/eafe41cba0b227395f311be676413f39c15efb42))
* avoiding nested loop in AVX2 ([ac7012a](https://github.com/ashvardanian/stringzilla/commit/ac7012a2796e613af75fde91e205ef55fb84944b))
* AVX2 and AVX512 backends ([462a426](https://github.com/ashvardanian/stringzilla/commit/462a4264863fd9e9899276a124c704ede1add4d3))
* BitScan dispatch on Windows ([7e2ca96](https://github.com/ashvardanian/stringzilla/commit/7e2ca96b76db453fca2601a2b72c2d57153e18b1))
* Broader benchmarks ([4014af9](https://github.com/ashvardanian/stringzilla/commit/4014af9f74f0f7e1a0ca6daec7638fd93e7b742d))
* Bypass GIL on long tasks ([59f41f9](https://github.com/ashvardanian/stringzilla/commit/59f41f9a25f2ec364974cef2f72e9273787f3d61))
* C++ tests structure ([f6bec48](https://github.com/ashvardanian/stringzilla/commit/f6bec488380f489fd99872f817f6d39d9504bd94))
* Compatibility with STL strings ([deafa73](https://github.com/ashvardanian/stringzilla/commit/deafa732080d965ba1774ed3747c1693fdf79f06))
* Deduplicate charset-matching on NEON ([7c4e169](https://github.com/ashvardanian/stringzilla/commit/7c4e16928f722e8110804816b55a879fcc31c277))
* drop `ctype`, `stddef`, `stdint` headers ([245da6d](https://github.com/ashvardanian/stringzilla/commit/245da6df67df2a51cca453ff8fd5dd48f20f5994))
* Drop useless AVX-512 parts ([7c104ec](https://github.com/ashvardanian/stringzilla/commit/7c104ec02a943cd0029bc6aac04960e1975f69f4))
* Extend benchmarks ([3838a85](https://github.com/ashvardanian/stringzilla/commit/3838a857d5d8c2eeebc09d787672d57ddbc02662))
* Faster `Str` constructor ([4796afb](https://github.com/ashvardanian/stringzilla/commit/4796afb21b7dfdc3efa4b3f4adfc60bb69013dd4))
* Faster Horspool initialization ([156b814](https://github.com/ashvardanian/stringzilla/commit/156b814848fa5ead86d11889c6bc2e3c15870bdf))
* Identical bit-counting intrinsics ([c934fb5](https://github.com/ashvardanian/stringzilla/commit/c934fb5af3c260aef4c530cb62e7f47a2bb02e35))
* Intro-sort ([644630b](https://github.com/ashvardanian/stringzilla/commit/644630b852ad43be6ba092c3091b458446688c4c))
* Less overhead per benchmark cycle ([6f1bde6](https://github.com/ashvardanian/stringzilla/commit/6f1bde6273ee821d5eea457ece517908385f7a01))
* Loading large files into memory ([c041962](https://github.com/ashvardanian/stringzilla/commit/c041962df9cd9994a0217c9d1d69b40da82db3d8))
* Mimic hyper-scalar code ([21f143c](https://github.com/ashvardanian/stringzilla/commit/21f143c5cf5e337245bee2bb72a1104983570858))
* Missing CPUID checks ([139e4fd](https://github.com/ashvardanian/stringzilla/commit/139e4fd52c115224606b05e62ec675eb56cded61))
* move `skip_length` into the matcher ([8905a56](https://github.com/ashvardanian/stringzilla/commit/8905a5671035a22bfc8f11856de7840c2359afd0))
* NW AVX-512 alignment ([e49cacb](https://github.com/ashvardanian/stringzilla/commit/e49cacbdb4762d06b636d836bc12d825b17b3c13))
* parity between `std` and `sz` string views ([487edd3](https://github.com/ashvardanian/stringzilla/commit/487edd32a8e99dcc6bb077ba8dfc944ab92f189d))
* Passing basic tests ([ee0ab2d](https://github.com/ashvardanian/stringzilla/commit/ee0ab2d138a4c127f7af6a9d2716dc04040791ea))
* Poison ranges with ASAN ([4703fad](https://github.com/ashvardanian/stringzilla/commit/4703fad44d7f2bfcebec8603c6ccf1763ff0317e))
* Polish xxHash ([ca085df](https://github.com/ashvardanian/stringzilla/commit/ca085df4436a87ae3dfc5fd8ba0a7d0a8116a04e))
* Preserving failed tests to disks ([9cd5c21](https://github.com/ashvardanian/stringzilla/commit/9cd5c218a64c052fbd8ccef6306f5c1be1d5a54b))
* Raita-style midpoint check in AVX-512 ([df683d9](https://github.com/ashvardanian/stringzilla/commit/df683d905e3adcc8f16b8e358235f57ec8f78d14))
* random generation and token-level benchmarks ([be54519](https://github.com/ashvardanian/stringzilla/commit/be545196bcac13e7c1fd353b1fa85b3d0d52306b))
* Rearrange tests and benchmarks ([8564852](https://github.com/ashvardanian/stringzilla/commit/856485223075872743cbf6d521c6a09bb0dbe601))
* Reduce `vmaxvq_u8` usage ([982ca69](https://github.com/ashvardanian/stringzilla/commit/982ca6929f0ebce52e0749bb869a1f7d451aec14))
* Reduce `vmaxvq_u8` usage ([53cb5ce](https://github.com/ashvardanian/stringzilla/commit/53cb5ce8b65f7e28e73643ee84e39f8150ee7d0d))
* Reduce number of loads/stores in scoring ([0c860c8](https://github.com/ashvardanian/stringzilla/commit/0c860c834f5d0c528ecdc95f58b72402e2b7d765))
* Reducing swaps in Radix sort ([3eac160](https://github.com/ashvardanian/stringzilla/commit/3eac1601a1d8cb88db9f6e7863c90f53bdf98ca1)), closes [#45](https://github.com/ashvardanian/stringzilla/issues/45)
* Refactoring AVX-512 control-flow for simplicity ([b42394c](https://github.com/ashvardanian/stringzilla/commit/b42394cce6e26b461134898442653bd15b94c71f))
* Remove deprecated code ([e3adaa4](https://github.com/ashvardanian/stringzilla/commit/e3adaa44f98df0127072f00724ae07500a1b46fb))
* Reorganizing for readability ([9dd1f8c](https://github.com/ashvardanian/stringzilla/commit/9dd1f8cdf3ef5c79caf4a0ff3309a9b53e2091ed))
* Reuse the C shared lib for Swift ([bd1686d](https://github.com/ashvardanian/stringzilla/commit/bd1686da68e0550567663d9b2e7db01bbb339ce4))
* Rust Bindings (#74) ([8200ca3](https://github.com/ashvardanian/stringzilla/commit/8200ca3894f575d772754c261b769d5852295877)), closes [#74](https://github.com/ashvardanian/stringzilla/issues/74)
* Same functions as global and members ([4a22ea8](https://github.com/ashvardanian/stringzilla/commit/4a22ea8984173a3f71704e47a8b8dd31213f3808))
* serial move implementation ([9173ca0](https://github.com/ashvardanian/stringzilla/commit/9173ca0f55c61cb1221bc783138185f4a62c443d))
* shorter tests with `std::string_view` ([d9977b0](https://github.com/ashvardanian/stringzilla/commit/d9977b0d07d4a3a776fb39011a31e0f71976a005))
* Silence type-casting warnings ([dbe4db3](https://github.com/ashvardanian/stringzilla/commit/dbe4db30845df932e34b5518133916bd094a14b3))
* Similarity search benchmarks ([d2e8da2](https://github.com/ashvardanian/stringzilla/commit/d2e8da242b43846a34bf4ebd7518ded0a6c10549))
* SWAR search for normal order search ([6669b1e](https://github.com/ashvardanian/stringzilla/commit/6669b1e3f38b921aedaa4af01571fbddabb2fbc9))
* Test coverage ([c967582](https://github.com/ashvardanian/stringzilla/commit/c9675825d71592dec075f40633967bd833f99c72))
* Test reproducibility of the `shuffle` ([ce888cc](https://github.com/ashvardanian/stringzilla/commit/ce888ccaadd89b247d3f549d8590837c0b1fe52d))
* Testing suite ([50a2a2f](https://github.com/ashvardanian/stringzilla/commit/50a2a2fc159f36972423590cf4ba5865dc0a3775))
* Tests against Raita ([6a5b18b](https://github.com/ashvardanian/stringzilla/commit/6a5b18b7de77a518cba80d70a3c90e78e81a32c4))
* Use less temp. variables to count matches ([3245330](https://github.com/ashvardanian/stringzilla/commit/32453305cb9d7b84090a8a17979aafd8d82f9c08))
* Using Clang `modulemap`-s ([05d21c5](https://github.com/ashvardanian/stringzilla/commit/05d21c52661138201d7e3b519b75c7c0f9d16aa5))
* Vectorized function calls ([6cd5a69](https://github.com/ashvardanian/stringzilla/commit/6cd5a69096982d2b2c7761063f6e265260f5fac5))
* Window width as runtime argument ([3bd29ae](https://github.com/ashvardanian/stringzilla/commit/3bd29ae5dee4586ed174be8f4f4fda19a2e057d0))

### Make

* `AlwaysBreakBeforeMultilineStrings` ([1dabc3b](https://github.com/ashvardanian/stringzilla/commit/1dabc3ba77e62a1732b6d83d2aa286273118218c))
* `numpy` dependency ([2d825ba](https://github.com/ashvardanian/stringzilla/commit/2d825ba2cfca86ef3c906cfa25a612ba820d0068))
* Add GitHub CI ([ba333db](https://github.com/ashvardanian/stringzilla/commit/ba333dbcf5d432fa27e2c1f4f917eb28dd68977a))
* Add NumPy dependency ([2e928ba](https://github.com/ashvardanian/stringzilla/commit/2e928bab7421ded7b5f4bec7fbcb6679bdde7b6d))
* Adding `.npmignore` ([cf93dfd](https://github.com/ashvardanian/stringzilla/commit/cf93dfd60e0cdc69a93bff848794cb62bc53d184))
* Automate major releases ([987475e](https://github.com/ashvardanian/stringzilla/commit/987475e20edbcaa8c78afaac413a5d62ce453215))
* Build with different compilers at once ([0580219](https://github.com/ashvardanian/stringzilla/commit/05802192a563bcf752be13830de76ce3b2a6f049))
* Bump VERSION ([f221874](https://github.com/ashvardanian/stringzilla/commit/f2218744a370549fe14eaa888c2124db22359f96))
* Bump VERSION ([bebda9f](https://github.com/ashvardanian/stringzilla/commit/bebda9ff05848495d2ab3dad9de3a2d20ac1febd))
* C++17 default, build 11/14/17/20 ([156afae](https://github.com/ashvardanian/stringzilla/commit/156afae9a5a3f7a7302414782cd3493609989e12))
* Change CXX standard ([4f4e69b](https://github.com/ashvardanian/stringzilla/commit/4f4e69b5ed163c44de177c66030cf7f64e12475e))
* CI for Clang and MacOS ([3162760](https://github.com/ashvardanian/stringzilla/commit/31627607d3c39f745fa11d65eb57e0a50f2efbb5))
* Cleaning build caches on Windows ([01d209f](https://github.com/ashvardanian/stringzilla/commit/01d209f6f2ce87f429c22a7c8f2ccde86ebd199c))
* Colorful diagnostics ([0b8d9cd](https://github.com/ashvardanian/stringzilla/commit/0b8d9cdd6d424fa540c04ecb8441a856a1065363))
* Compile for different x86 generations ([ae7b119](https://github.com/ashvardanian/stringzilla/commit/ae7b11934c298e80072edb2b21f9001ceed1c0dc))
* Consistent compilation settings ([6f930ea](https://github.com/ashvardanian/stringzilla/commit/6f930ea703edddef9308e713a70b213631e91496))
* Deduplicate `.clang-format` settings ([3db6845](https://github.com/ashvardanian/stringzilla/commit/3db684571ffa93f8420d5bc62b7285bf10aa07f4))
* Define default build type ([4ce3d64](https://github.com/ashvardanian/stringzilla/commit/4ce3d641943c571a6434687ec46261eb33eaef0e))
* Dependencies for testing ([253a26d](https://github.com/ashvardanian/stringzilla/commit/253a26de2c1c70d69196833b62893eb58d5a8230))
* Deprecate old benchmarks ([b5b1f83](https://github.com/ashvardanian/stringzilla/commit/b5b1f833fd2dfe6e60db01217dcb025df9fdc98e))
* Don't build the library every time ([daaa93b](https://github.com/ashvardanian/stringzilla/commit/daaa93b8a1591f9fca2d3589383be24729c5f7eb))
* Enable DQ extensions for `sz_hashes_avx512` ([26e54c9](https://github.com/ashvardanian/stringzilla/commit/26e54c9cdd604c3fe8cd136e581163e034f8e182))
* Explicitly mark AVX sections ([53a4ef1](https://github.com/ashvardanian/stringzilla/commit/53a4ef1b69a65d36f0f82aef70fa84965938f279))
* Explicitly UTF-8 encoding on Windows ([6c323ea](https://github.com/ashvardanian/stringzilla/commit/6c323ea19ab813d93124ce1d0bfed0832693f7ff))
* Exporting lite builds without LibC ([a5ece39](https://github.com/ashvardanian/stringzilla/commit/a5ece39df940137a402ad282d631b0716d5d8876))
* Exporting lite builds without LibC ([dfba995](https://github.com/ashvardanian/stringzilla/commit/dfba99533f4ef7c9d4277352e82460d2dc546f1a))
* Fetch before rebase ([fda58df](https://github.com/ashvardanian/stringzilla/commit/fda58dfe268bec7f4279c9d607551cde1eb39a5c))
* Fix include paths ([d3c9025](https://github.com/ashvardanian/stringzilla/commit/d3c90255efc4948c17bcf7f84bd54b9fae77004f))
* Fix Windows PyPi releases ([0efaad1](https://github.com/ashvardanian/stringzilla/commit/0efaad194b1228dbc68eebc5eb2393ef701d1365))
* Formatting and docs ([416b885](https://github.com/ashvardanian/stringzilla/commit/416b885429d2eb97e6c677eaac0eba6de5ff9fc4))
* GitHub CI for tests with recent GCC ([48869d3](https://github.com/ashvardanian/stringzilla/commit/48869d3f62dc226a20aa690cbe7eae4787a8a9ae))
* Linking the standard libs in Swift ([6a25a8e](https://github.com/ashvardanian/stringzilla/commit/6a25a8e3c5a10716b7c0cb51a3f2a0bd5c03c5ee))
* Log ENV details if build fails ([8527f38](https://github.com/ashvardanian/stringzilla/commit/8527f386770eb8ee635395338adc6ecc47b35e51))
* Manually bump SemVer ([24f0693](https://github.com/ashvardanian/stringzilla/commit/24f069366b904615019e3850d8f9b8c4f9246a95))
* Match directory structure of SimSIMD ([afac999](https://github.com/ashvardanian/stringzilla/commit/afac999380220b6d6c9ec0f191f339f29ed30cf0))
* Match directory structure of SimSIMD ([679f9e7](https://github.com/ashvardanian/stringzilla/commit/679f9e758ba181765a5473f7d5264d2c1372ec81))
* Matching only `version` at line start ([bb56b00](https://github.com/ashvardanian/stringzilla/commit/bb56b0079aceb491ee3a39330401b24519434a06))
* Move Python bindings ([e9ac4cb](https://github.com/ashvardanian/stringzilla/commit/e9ac4cb2e516c0b48f1f0e5f43c207b1359913b6))
* MSVC compatibility ([f776087](https://github.com/ashvardanian/stringzilla/commit/f776087ce005b4ecc2f21a5be4c9ce99976af77c))
* NumPy test dependencies ([53481a9](https://github.com/ashvardanian/stringzilla/commit/53481a9fa4b98b7ac7ac61dda5e2bfc719804f2e))
* Optimize `RelWithDebInfo` builds ([0ec4b0d](https://github.com/ashvardanian/stringzilla/commit/0ec4b0d8dce059528d4e4b5a47c7a0fdd1e81e72))
* Pass compilation flags depending on which architecture and compiler ([23846ef](https://github.com/ashvardanian/stringzilla/commit/23846ef733f6463fbb94a4d11296014e2e870662))
* passing empty C++ standard version ([6abf8b6](https://github.com/ashvardanian/stringzilla/commit/6abf8b61bf351aacde639b0a56ba68b9101bbd23))
* Position Independent Code ([2638c66](https://github.com/ashvardanian/stringzilla/commit/2638c66ae92cdd3076720b47be4b73930d7a54e5))
* PR head autoresolution ([b483e59](https://github.com/ashvardanian/stringzilla/commit/b483e595796cd61ff61d1726320f0c7abcc14d7a))
* Pre-set target hardware generation ([a9fe148](https://github.com/ashvardanian/stringzilla/commit/a9fe14806337d90b5e6c23a1183bd58a8f2d6f94))
* Publish Rust crates ([b954a55](https://github.com/ashvardanian/stringzilla/commit/b954a556b1d188003a63b70b5e6594a47e6d33ac))
* Publish StringZilla to NPM ([ff2e85b](https://github.com/ashvardanian/stringzilla/commit/ff2e85b94bc0943910254ba8a676fee22a563315))
* Remove `fuzz.py` ([50ab905](https://github.com/ashvardanian/stringzilla/commit/50ab905ae95ecdaeaeeea818879f72d1980d1a41))
* Remove PyBind11 dependency ([971890c](https://github.com/ashvardanian/stringzilla/commit/971890cd8c53f04ae56f823f8784bba04928a77e))
* sanitizers and silencing false warnings ([6f7d5c1](https://github.com/ashvardanian/stringzilla/commit/6f7d5c1e415055d1069472d262fc0f63e60427ff))
* Semantic Versioning ([4a21db7](https://github.com/ashvardanian/stringzilla/commit/4a21db78774fd391d798822b0162bb5583305dba))
* Separate source files ([9e75d04](https://github.com/ashvardanian/stringzilla/commit/9e75d04a585a56213adaf361d8296d4b6bbee5f7))
* Shift JavaScript CI ([534291f](https://github.com/ashvardanian/stringzilla/commit/534291f13021f6ebcbcca11ab6d2b820aa78dbe1))
* Swift CI and MacOS PyPa image ([9184a42](https://github.com/ashvardanian/stringzilla/commit/9184a42f01be208aca733d30f1bec02eacd432a9))
* Switch to pure C ([e8f7249](https://github.com/ashvardanian/stringzilla/commit/e8f724941136453586a88e862c3f0ab135b34f0f))
* Test cpp ([b4a89c5](https://github.com/ashvardanian/stringzilla/commit/b4a89c534776f86acb8b63c5b4c7c68ea487fc00))
* Update release tasks ([bc938c1](https://github.com/ashvardanian/stringzilla/commit/bc938c158b1bdce175bb28c08f36842018100675))
* Update SemVer toolchain ([26b0dfb](https://github.com/ashvardanian/stringzilla/commit/26b0dfb992159c82bfcce8c693ba31b0b0c80cf2))
* Upload versioned files ([5e254b0](https://github.com/ashvardanian/stringzilla/commit/5e254b036fdceda7d777e627be5cdc03a8f4172c))
* Use Clang attribute pragmas ([33ba031](https://github.com/ashvardanian/stringzilla/commit/33ba031e7b470fdfba46826f919f2188cd3f536c))
* use newest SIMD for Python builds ([62c0012](https://github.com/ashvardanian/stringzilla/commit/62c0012e7e1e96ff773d0072592bd520a6fc61f8))
* VSCode launchers for any C++ benchmark ([6f0d799](https://github.com/ashvardanian/stringzilla/commit/6f0d79975ef0b46803cb4c7fc17392f943ca2361))
* Workaround for Swift CI ([bc1869a](https://github.com/ashvardanian/stringzilla/commit/bc1869a85293ff5aa6e5075475263002c43648eb)), closes [/github.com/swift-actions/setup-swift/issues/591#issuecomment-1685710678](https://github.com//github.com/swift-actions/setup-swift/issues/591/issues/issuecomment-1685710678)

### Refacot

* Styling ([e4177b2](https://github.com/ashvardanian/stringzilla/commit/e4177b291db6fbbe7c69cec40e3d7b092ed7488a))

### Refactor

* `on_stack`/`on_heap` to `internal`/`external` ([69e8b70](https://github.com/ashvardanian/stringzilla/commit/69e8b70273a022f4249b45c5d526823f9944bdd4))
* `start` and `length` common member names ([cff3a38](https://github.com/ashvardanian/stringzilla/commit/cff3a38fd6f2b5e06e71567c2ccd30bcfccb00cc))
* args checking ([9395a6b](https://github.com/ashvardanian/stringzilla/commit/9395a6b390e43fa567c29ceb442d972df8f70dc3))
* C++17 -> C99 ([e4429ef](https://github.com/ashvardanian/stringzilla/commit/e4429ef976ab176e8700dddc8eb155680fcef547))
* comparsion operators ([5883633](https://github.com/ashvardanian/stringzilla/commit/5883633bdc6fa4a2bf18cfb97b76a4e1fd7fc537))
* Deprecating C++ version in favor of C99 ([042e59e](https://github.com/ashvardanian/stringzilla/commit/042e59e32d89313ffa56b74ea6984fd74e82dd86))
* Directory structure ([c36bd68](https://github.com/ashvardanian/stringzilla/commit/c36bd685a1b3dac3dc188f2e500fc39999e3a95f))
* Drop slow sorts ([15f1b30](https://github.com/ashvardanian/stringzilla/commit/15f1b30b28f44f4bd1ee6bb3b666db978366d67e))
* Larger arrays for modern CPUs ([96e7234](https://github.com/ashvardanian/stringzilla/commit/96e7234ae990d4d664e47adb4cecfa8340766b23))
* Layout and spelling ([08cc0c7](https://github.com/ashvardanian/stringzilla/commit/08cc0c79de61348650e81eb597d0d1a8d0a833e1))
* Moving constants to the top ([b3c2da2](https://github.com/ashvardanian/stringzilla/commit/b3c2da2ad53bf4426d9c522e20008b7473a6affa))
* New C API for JS ([05a409c](https://github.com/ashvardanian/stringzilla/commit/05a409ce7ab1f76582c7936d2a4d2d6c99e7b3ed))
* no need to cast to string ([ec1744a](https://github.com/ashvardanian/stringzilla/commit/ec1744a7ffaf00d67cb224409aa802c9160fce88))
* Ops order and style ([3a18292](https://github.com/ashvardanian/stringzilla/commit/3a182922c6aec90a3b836bca96471c8810642e7d))
* Regrouping folders ([d9fb16d](https://github.com/ashvardanian/stringzilla/commit/d9fb16d7bab046abbe7a990b52172f98f99b4b17))
* rename `Slices` to `Strs` ([ed8f360](https://github.com/ashvardanian/stringzilla/commit/ed8f3608735c00636aa58c4b811de30b08b5c423))
* Rename bindings file ([f54b791](https://github.com/ashvardanian/stringzilla/commit/f54b791d7f6899023c5b05338287470459dcfee5))
* Restarting CPython bindings ([9fef6d8](https://github.com/ashvardanian/stringzilla/commit/9fef6d8cb32ae4966f46944add18f0017c5288a6))
* Swift bindings ([1c4ffda](https://github.com/ashvardanian/stringzilla/commit/1c4ffda9dbf923ff4a888d8637f603ed171b2894))
* Sync up Py and JS bindings ([cffae4a](https://github.com/ashvardanian/stringzilla/commit/cffae4a684437eafe3ed75299d2fb8c82baa1019))
* Tests, docs ([50adb32](https://github.com/ashvardanian/stringzilla/commit/50adb32ef6b4127ac49db418ae15051267aea405))
* Using `strzl_array_t` structure ([a1249a7](https://github.com/ashvardanian/stringzilla/commit/a1249a710a107e4040dc826e40f70a03b3b29952))

### Test

* Printing failed cases ([10068f6](https://github.com/ashvardanian/stringzilla/commit/10068f617b26bc47e88600ac33573a5d417aa695))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants