Arithmetic still happens a lot in programs, and especially so in tight loops (most tight loops will be filled with arithmetic, rather than anything else), even if it doesn&#x27;t happen as the loop counters.<p>You are correct that Rust does bounds checks in release mode, but fortunately there&#x27;s no extra bounds checks needed:<p>- all indexing is done with unsigned values, and,<p>- even if signed values were used, the &#x27;&lt; 0&#x27; comparison is still not necessary because one can first cast to unsigned (a noop) and then do a single &#x27;&lt; length&#x27; comparison: negative values will be huge, at least as large as MEMORY_SPACE&#x2F;2, which is in fact the limit on array lengths in Rust[1].<p>[1]: <a href="http:&#x2F;&#x2F;doc.rust-lang.org&#x2F;stable&#x2F;nomicon&#x2F;vec-alloc.html" rel="nofollow">http:&#x2F;&#x2F;doc.rust-lang.org&#x2F;stable&#x2F;nomicon&#x2F;vec-alloc.html</a> search for isize::MAX.