Как избавиться от проверок выхода за границы при доступе по индексу в Rust (без unsafe!)
В сети часто можно услышать, что в Rust доступ по индексу со слайсом (как, например, my_slice[i]) работает медленно, и вместо этого в целях повышения производительности вы должны организовать свой код как‑нибудь иначе.
Детали этого, однако, зачастую туманны. Мало где можно найти какие‑либо внятные замеры производительности, и нет почти никакой документации по устранению этих накладных расходов, не прибегая к unsafe коду.
Поэтому я решил поделиться с вами опытом и методами, которые я обнаружил в процессе удаления проверок выхода индекса за границы (далее просто «проверка границ»), а также удаления unsafe кода, где это возможно, из множества громоздких крейтов.
В этой статье я расскажу:
Каковы типичные накладные расходы на проверку границ при доступе по индексу.
Как избежать проверки границ без использования unsafe кода.
Как убедиться, что проверки границ были устранены.
Как замерять производительность и профилировать Rust‑код.
Как нам сконструировать самую дешевую проверку границ в случае, когда она все‑таки необходима.
https://shnatsel.medium.com/how-to-avoid-bounds-checks-in-rust-without-unsafe-f65e618b4c1e
👉 @rust_lib
Post #79
822