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

Unexpected error, unable to continue. Please report (gpg: no valid OpenPGP data found.) #591

Open
dabrahams opened this issue Aug 8, 2023 · 22 comments
Assignees
Labels
bug Something isn't working

Comments

@dabrahams
Copy link

Describe the bug
Please see this report

Workflow configuration (please complete the following information):

  • Action version (uses): swift-actions/setup-swift@v1
  • Platform (runs-on): ubuntu-latest
  • Swift version (swift-version): 5.8
@dabrahams dabrahams added the bug Something isn't working label Aug 8, 2023
@nickpdemarco
Copy link

Gentle bump: this is breaking CI for Hylo.

dabrahams added a commit to hylo-lang/hylo that referenced this issue Aug 17, 2023
Try to suppress random gpg failures
@dabrahams
Copy link
Author

I am no expert on the tech underlying this plugin, but to my layman's eye it looks like we are failing here trying to import non-existent GPG data. Which we are trying to download here. It strikes me that the download could fail and I don't see any code to detect that case. I note that this plugin never fails on MacOS, but then it also never has to download these GPG keys.

dabrahams added a commit to hylo-lang/hylo that referenced this issue Aug 19, 2023
This analysis <swift-actions/setup-swift#591 (comment)>
explains why I think it will work.

An alternative would be to run it on Linux in the devcontainer, where Swift is already set up.
@dabrahams
Copy link
Author

At least one alternative plugin fails in exactly the same way. Not sure what it means yet. I've never failed to get the keys file myself (so far)…

dabrahams added a commit to hylo-lang/hylo that referenced this issue Aug 19, 2023
An attempt to stomp out the spurious format-check failures we've been seeing, that [die in setup-swift](swift-actions/setup-swift#591).

An alternative would be to run the format check on MacOS, but that's expected to be slower.  This analysis <swift-actions/setup-swift#591 (comment)> explains why I think it would work.

Another alternative would be to run it on Linux in the devcontainer, where Swift is already set up.
@dabrahams
Copy link
Author

So far, this alternative swift-installation action doesn't seem to be causing these spurious failures. Another workaround I know of is to use a dev container in which you've pre-installed swift, making this step unnecessary.

@stevapple
Copy link

This is also breaking CI for Teco Core, which uses a merge queue that doesn’t allow manually retrying failed tests.

I decided to work around by disabling merge queue temporarily, but I hope this can be resolved ASAP🙏

@sanderploegsma
Copy link

Another workaround I know of is to use a dev container in which you've pre-installed swift, making this step unnecessary.

Oh wow, thanks for the tip! I am already using a devcontainer on one of my repositories that is running into this issue, never considered to reuse it in CI as well.

@sanderploegsma
Copy link

@dabrahams I've seen at least one workflow with slashmo/install-swift where it also failed to download the keys with the same error. However, because the install script in that action doesn't contain set -e it ignores the error and happily continues with verifying the signature (which also fails and is ignored) and finally it installs the toolchain.

So the underlying problem here seems to be that the signing key download occasionally fails for an unknown reason. Whatever that reason may be, handling it is an interesting discussion: should the action just skip the signature verification if this occurs?

@dabrahams
Copy link
Author

dabrahams commented Aug 19, 2023

Heh, not being aware of the nutty details of how shell scripts deal with errors without -e (beyond that they are easily ignored in that case), I had wondered whether @slashmo 's script was extremely carefully written to work within those rules or just carelessly overlooking error handling. I guess it's the latter. No, the action shouldn't skip signature verification; that's a security feature!

I think what this means is that there's currently no known reliable procedure for automating the installation of Swift on Linux and the only workable approach for github actions is to use a devcontainer.

@sanderploegsma
Copy link

sanderploegsma commented Aug 20, 2023

Yes that was my conclusion as well, until I tried it and my CI build times increased more than tenfold (~1min with this action vs >12min with a devcontainer)…

I am interested to see why downloading the signing keys and signatures from swift.org is so inconsistent, since that seems to be the culprit.

@Nef10
Copy link
Contributor

Nef10 commented Aug 20, 2023

A run with debug log enabled looks like this for me:

##[debug]Evaluating condition for step: 'Install Swift'
##[debug]Evaluating: success()
##[debug]Evaluating success:
##[debug]=> true
##[debug]Result: true
##[debug]Starting: Install Swift
##[debug]Loading inputs
##[debug]Loading env
Run swift-actions/setup-swift@v1.24.0
  with:
    swift-version: 5.8.1
##[debug]Resolved range 5.8.1
##[debug]Found matching version 5.8.1
##[debug]isExplicit: 5.8.1
##[debug]explicit? true
##[debug]checking cache: /opt/hostedtoolcache/swift-Ubuntu/5.8.1/x64
##[debug]not found
##[debug]No matching installation found
##[debug]Fetching verification keys
##[debug]Downloading https://swift.org/keys/all-keys.asc
##[debug]Destination /home/runner/work/_temp/3249f1b8-c55a-42cf-9aec-94684a857815
##[debug]download complete
##[debug]Importing verification keys
/usr/bin/gpg --import /home/runner/work/_temp/3249f1b8-c55a-42cf-9aec-94684a857815
gpg: directory '/home/runner/.gnupg' created
gpg: keybox '/home/runner/.gnupg/pubring.kbx' created
gpg: no valid OpenPGP data found.
gpg: Total number processed: 0
Error: Unexpected error, unable to continue. Please report at https://github.com/swift-actions/setup-swift/issues
The process '/usr/bin/gpg' failed with exit code 2
Stacktrace:
Error: The process '/usr/bin/gpg' failed with exit code 2
    at ExecState._setResult (/home/runner/work/_actions/swift-actions/setup-swift/v1.24.0/dist/index.js:3295:25)
    at ExecState.CheckComplete (/home/runner/work/_actions/swift-actions/setup-swift/v1.24.0/dist/index.js:3278:18)
    at ChildProcess.<anonymous> (/home/runner/work/_actions/swift-actions/setup-swift/v1.24.0/dist/index.js:3172:27)
    at ChildProcess.emit (node:events:513:28)
    at maybeClose (node:internal/child_process:1100:16)
    at Process.ChildProcess._handle.onexit (node:internal/child_process:304:5)
##[debug]Node Action run completed with exit code 1
##[debug]Finishing: Install Swift

So it looks like it downloaded something but no valid data?

Also, it's flaky for me and seems to work like 50% of the time - so maybe this download and key import can just be re-tried like 3 times?

@sanderploegsma
Copy link

sanderploegsma commented Aug 20, 2023

I did some debugging of a failing workflow run using action-tmate and it turns out the swift.org server compresses the response, so the file being downloaded is actually gzipped, which is why it cannot be imported in gpg. The same happens in my terminal:

❯ curl -v --output all-keys.asc https://www.swift.org/keys/all-keys.asc
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 17.253.53.204:443...
* Connected to www.swift.org (17.253.53.204) port 443 (#0)
* ALPN: offers h2,http/1.1
* (304) (OUT), TLS handshake, Client hello (1):
} [318 bytes data]
*  CAfile: /etc/ssl/cert.pem
*  CApath: none
* (304) (IN), TLS handshake, Server hello (2):
{ [122 bytes data]
* (304) (IN), TLS handshake, Unknown (8):
{ [21 bytes data]
* (304) (IN), TLS handshake, Certificate (11):
{ [3610 bytes data]
* (304) (IN), TLS handshake, CERT verify (15):
{ [80 bytes data]
* (304) (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* (304) (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / AEAD-CHACHA20-POLY1305-SHA256
* ALPN: server accepted http/1.1
* Server certificate:
*  subject: CN=swift.org; O=Apple Inc.; ST=California; C=US
*  start date: Oct 25 18:09:36 2022 GMT
*  expire date: Nov 24 18:09:35 2023 GMT
*  subjectAltName: host "www.swift.org" matched cert's "www.swift.org"
*  issuer: CN=Apple Public Server ECC CA 12 - G1; O=Apple Inc.; ST=California; C=US
*  SSL certificate verify ok.
* using HTTP/1.1
> GET /keys/all-keys.asc HTTP/1.1
> Host: www.swift.org
> User-Agent: curl/7.88.1
> Accept: */*
> 
< HTTP/1.1 200 OK
< Server: Apple
< Date: Sun, 20 Aug 2023 18:33:51 GMT
< Content-Type: text/plain; charset=UTF-8
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Last-Modified: Fri, 18 Aug 2023 19:09:05 GMT
< X-Frame-Options: SAMEORIGIN
< Strict-Transport-Security: max-age=31536000; includeSubdomains
< Content-Encoding: gzip
< Cache-Control: max-age=180, public
< Accept-Ranges: bytes
< Content-Length: 10412
< Via: http/1.1 nlams2-edge-lx-007.ts.apple.com (acdn/84.14362), http/1.1 nlams2-edge-bx-014.ts.apple.com (acdn/84.14362)
< X-Cache: hit-fresh, hit-fresh
< CDNUUID: 9d0b2fa7-c23b-451d-9b8c-e55736742dc1-427031446
< Etag: "41c9-6033743275640"
< Age: 10
< Connection: keep-alive
< 
{ [1300 bytes data]
100 10412  100 10412    0     0   165k      0 --:--:-- --:--:-- --:--:--  221k
* Connection #0 to host www.swift.org left intact
❯ file all-keys.asc 
all-keys.asc: gzip compressed data, max speed, from Unix, original size modulo 2^32 16841

I tried forcing the server to send an uncompressed response by setting accept-encoding: identity and by setting accept-encoding: gzip;q=0 but both attempts still yielded a gzipped response.

What I don't get is why this happens intermittently. It's as if some of the swift.org servers are misconfigured and therefore some send a compressed response while others don't, which is why the action is able to succeed every now and then.

This also makes fixing the bug a little bit annoying: since there is no way of knowing whether the response is compressed or not, the action should first check the file information and then decompress if needed.

I suspect the same issue occurs when the action is able to download the signing keys but then fails to verify the signature file; probably the signature file response is gzipped as well.

@dabrahams
Copy link
Author

dabrahams commented Aug 20, 2023

Wow great sleuthing! Definitely worthy of a report to bugs.swift.org! Et voilà: swiftlang/swift#68047

@stevapple
Copy link

stevapple commented Aug 21, 2023

This also makes fixing the bug a little bit annoying: since there is no way of knowing whether the response is compressed or not, the action should first check the file information and then decompress if needed.

Nice catch! I wonder if it’s possible to send Accept-Encoding: gzip (though cURL flag --compressed) to force the server respond with a gzipped file?

Edit: It seemed to work! cURL is clever enough to identify if the response is gzipped, and to decompress the response body accordingly.

@sanderploegsma
Copy link

Nice catch! I wonder if it’s possible to send Accept-Encoding: gzip (though cURL flag --compressed) to force the server respond with a gzipped file?

Maybe, although you can never be sure whether the server respects the Accept-Encoding header (as it already ignores explicitly asking to not compress it).

Ideally the action should check the Content-Encoding response header, but since the current implementation downloads the file through @actions/tool-cache the response headers are not accessible. So it would either have to be refactored to use @actions/http-client directly or check whether the downloaded file is gzipped by checking the magic number (1f 8b) or something.

@sanderploegsma
Copy link

@dabrahams in the mean time if you're looking for another workaround that doesn't involve skipping the signature verification, you could consider using the swift Docker image in your action workflow:

name: Swift

on:
  pull_request:
  push:
    branches: [ "main" ]

jobs:
  test:
    runs-on: ubuntu-latest
    container: swift:5.8
    steps:
      - uses: actions/checkout@v3
      - name: Run tests
        run: swift test

This is as fast as using swift-actions/setup-swift, taking around 30s to initialize the container

@dabrahams
Copy link
Author

@sanderploegsma Thanks that's an interesting possibility. We currently use a devcontainer because we need an LLVM-15+ installation and a custom .pc file, but the trade-off might be worth it.

@dabrahams
Copy link
Author

I've seen at least one workflow with slashmo/install-swift where it also failed to download the keys with the same error. However, because the install script in that action doesn't contain set -e it ignores the error and happily continues with verifying the signature (which also fails and is ignored) and finally it installs the toolchain.

When I set up swift with that workflow, I am seeing other problems (failure to find libswiftGlibc.so), FWIW.

@dabrahams
Copy link
Author

dabrahams commented Aug 22, 2023

@dabrahams in the mean time if you're looking for another workaround that doesn't involve skipping the signature verification, you could consider using the swift Docker image in your action workflow:

@sanderploegsma fun fact: that image doesn't have node preinstalled, which means that most other actions fail. And to install nodejs requires

        apt update
        apt install -y curl
        curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
        apt install -y nodejs

which is slow… so I can't win(?)

fwcd added a commit to fwcd/swift-utils that referenced this issue Jan 7, 2024
stephencelis added a commit to pointfreeco/swift-case-paths that referenced this issue Jan 31, 2024
stephencelis added a commit to pointfreeco/swift-case-paths that referenced this issue Jan 31, 2024
* Upgrade to macOS 14 CI

* swift-actions/setup-swift#591 (comment)

* wip

* wip

* wip

* Update ci.yml
ashvardanian added a commit to ashvardanian/StringZilla that referenced this issue Feb 2, 2024
ashvardanian pushed a commit to ashvardanian/StringZilla that referenced this issue 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 to ashvardanian/StringZilla that referenced this issue 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))
kateinoigakukun added a commit to swiftwasm/carton that referenced this issue Apr 4, 2024
kateinoigakukun added a commit to swiftwasm/carton that referenced this issue Apr 4, 2024
kateinoigakukun added a commit to swiftwasm/carton that referenced this issue Apr 4, 2024
kateinoigakukun added a commit to swiftwasm/carton that referenced this issue Apr 4, 2024
kateinoigakukun added a commit to swiftwasm/carton that referenced this issue Apr 4, 2024
@redsun82
Copy link

redsun82 commented Apr 9, 2024

We were affected by this as well, and very frequently since yesterday. Following the excellent @sanderploegsma's investigation I tried this, and I can confirm it worked in our case.

I don't think it's really PR worthy (it probably does not work on Windows, it doesn't have any tests, and requires gunzip being installed instead of relying on some npm library), but at least it confirms what was found out previously on this issue. Maybe someone else can pick this up to do a proper PR? Typescript's not my strong suit, and I cannot devote too much time to it at the moment.

You can try it out using redsun82/setup-swift@b2b6f77ab14f6a9b136b520dc53ec8eca27d2b99, if it helps 🙂

pfusik added a commit to pfusik/setup-swift that referenced this issue Apr 10, 2024
pfusik added a commit to fusionlanguage/fut that referenced this issue Apr 10, 2024
@pfusik
Copy link

pfusik commented Apr 10, 2024

Since swift.org redirects to www.swift.org, why not fetch the latter in the first place? This might be pure luck, but it helped me.

@jtbandes
Copy link

I'm experiencing this issue as well... looks like by retrying a few times I managed to get past it. https://github.com/foxglove/mcap/actions/runs/8637068613/job/23679121390?pr=1153

@fwcd
Copy link

fwcd commented Aug 28, 2024

Ran into this pretty frequently in a new Swift package... would love to see @redsun82's fix upstream. Even if it doesn't work on Windows, we could just scope it to Unix-ish platforms for now. Anything would be better than having CI fail randomly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

10 participants