Unsafe はときどき有用です

コードをより高速にできます!

// Copyright 2026 Google LLC
// SPDX-License-Identifier: Apache-2.0

fn iter_sum(xs: &[u64]) -> u64 {
    xs.iter().sum()
}

fn fast_sum(xs: &[u64]) -> u64 {
    let mut acc = 0;
    let mut i = 0;
    unsafe {
        while i < xs.len() {
            acc += *xs.get_unchecked(i);
            i += 1;
        }
    }
    acc
}

fn main() {
    let data: Vec<_> = (0..1_000_000).collect();

    let baseline = iter_sum(&data);
    let unchecked = fast_sum(&data);

    assert_eq!(baseline, unchecked);
}

unsafe を使ったコードは、より高速になる かもしれません

fast_sum() は境界チェックを省略します。ただし、性能に関する主張を検証するには ベンチマークが必要です。このようなケースでは、Rust のイテレータでも通常は 境界チェックを省略できます。

オプション: 2 つの関数について生成されたアセンブリが同一であることを表示します。