История изменений
Исправление LightDiver, (текущая версия) :
Ну да, раст полностью разворачивает цикл, как выше вон предложили. Нет проверок границ, константы зашивает, работает через временное хранилще, оптимизирует выход. Интересное. Вот только использует стек для хранения загрузки, а это медленее чуть чуть, чем напрмую.
Может немного удивлю, хотя врядли. Попробуй такой «бенчарк».
use std::process::exit;
const ITERS: usize = 1_000_000_000;
const ARR: [i64; 5] = [4, 9, 3, 8, 4];
const VAL: i64 = 9;
const LEN: usize = 5;
const EXIT_FAILURE: i32 = 0;
const EXIT_SUCCESS: i32 = 1;
fn main() {
let mut found = EXIT_FAILURE;
for _ in 0..ITERS {
found = EXIT_FAILURE;
let mut i = LEN;
while i > 0 {
i -= 1;
if ARR[i] == VAL {
found = EXIT_SUCCESS;
break;
}
}
}
exit(found);
}
Исправление LightDiver, :
Может немного удивлю, хотя врядли. Попробуй такой «бенчарк».
use std::process::exit;
const ITERS: usize = 1_000_000_000;
const ARR: [i64; 5] = [4, 9, 3, 8, 4];
const VAL: i64 = 9;
const LEN: usize = 5;
const EXIT_FAILURE: i32 = 0;
const EXIT_SUCCESS: i32 = 1;
fn main() {
let mut found = EXIT_FAILURE;
for _ in 0..ITERS {
found = EXIT_FAILURE;
let mut i = LEN;
while i > 0 {
i -= 1;
if ARR[i] == VAL {
found = EXIT_SUCCESS;
break;
}
}
}
exit(found);
}
Исходная версия LightDiver, :
Ну да, раст полностью разворачивает цикл, как выше вон предложили. Нет проверок границ, константы зашивает, работает через временное хранилще, оптимизирует выход. Интересное. Вот только использует стек для хранения загрузки, а это медленее чуть чуть, чем напрмую.