BurntSushi/memchr

Consider hinting to the compiler that indices returned from `memchr()` are within bounds of the haystack

Open

#195 ouverte le 1 déc. 2025

Voir sur GitHub
 (1 commentaire) (0 réactions) (0 assignés)Rust (146 forks)github user discovery
enhancementhelp wanted

Métriques du dépôt

Stars
 (1 457 stars)
Métriques de merge PR
 (Merge moyen 18m) (2 PRs mergées en 30 j)

Description

Currently, indexing into the haystack with the index returned by memchr usually generates a bounds check, because the compiler doesn't know that it's valid. However, if an assert_unchecked(i < haystack.len()) is inserted, the compiler has enough information to elide the check (godbolt).

Pros:

  • Reduces bounds-checking in downstream code; this doesn't remove a ton of overhead but could possibly allow for further optimizations that had been inhibited by the branch.

Cons:

  • assert_unchecked() is only available since Rust 1.81, so would either have to feature-gate this, do rust version detection, or (most likely) use if !cond { unreachable_unchecked(); } to polyfill it. The last option should be equivalent to assert_unchecked(), but I'm not sure if it's treated exactly the same by the compiler.
  • Returning an out-of-bound index becomes UB rather than just a logic error. I assume there was already downstream code relying on this, though, and also it'd probably already be UB internally.

Guide contributeur