BurntSushi/memchr

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

Open

#195 建立於 2025年12月1日

在 GitHub 查看
 (1 留言) (0 反應) (0 負責人)Rust (146 fork)github user discovery
enhancementhelp wanted

倉庫指標

Star
 (1,457 star)
PR 合併指標
 (平均合併 18分鐘) (30 天內合併 2 個 PR)

描述

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.

貢獻者指南