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 обычно и так устраняют проверки границ.
Необязательно: покажите одинаковый сгенерированный ассемблер для обеих функций.