Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 обычно и так устраняют проверки границ.

Необязательно: покажите одинаковый сгенерированный ассемблер для обеих функций.