Rust: C-ben írt modul hívásának "költsége"

... érdekelt, lemértem.

fn testffi(i: i32) -> i32 {
    unsafe { test_c(i) } // c-ben implementálva a return i+1;
}

#[inline(never)]
fn test_noinline(i: i32) -> i32 {
    i+1
}

Nincs új a nap alatt. Ahogy vártam, pontosan ugyanannyi idő alatt fut le a kettő.
Tehát a Rust többletköltség nélkül adja át a futást a C-ből fordított részre.

Hozzászólások

De noinline nélkül nem egyezne, nem? Mert akkor beinlájnosítaná, és kész.

Az hagyján, de ennél az egyszerű példánál még a meghívó ciklus sem lenne benne. Helyette ahogy a C-nél is, a fordító végigszimulálja a for ciklust és futáskor már csak az eredménykonstanssal tér itt vissza.

Próbáld ki:

//#[inline(never)]
fn teszt(i: i64) -> i64 {
    i + 1
}

fn main() {
    let mut eredmeny = 0;
    for i in 0..1_000_000_000 {
        eredmeny += teszt(i);
    }
    println!("{}", eredmeny);
}

$ rustc -O teszt.rs
$ time ./teszt

vedd ki a kommentjelet és újra.