( TCH | 2021. 03. 21., v – 23:39 )

clang -O2 -Wall ... ahogy a legtöbbünk fordít alapból.
Amíg debuggolsz, addig -Weverything jobb, persze mindent az sem szűr ki.
Rust esetén elkülönül az adatcsatorna a hibakezeléstől, nincs NULL pointer állapot:
Már bocs de ennek a Rust kódnak
fn datagen() -> Option {
    None
}

fn main() {
    if let Some(adat) = datagen() {
        println!("{}", adat);
    } else {
        println!("Nincs adat.");
    }
}
ez a C-s megfelelője
#include 

char *datagen() {
    return NULL;
}

int main() {
    char *adat;

    if (adat = datagen())
    {
        printf("%s\n", adat);
    }
    else
    {
        printf("Nincs adat.\n");
    }
}
és nem az, amit te írtál, ez pedig ugyanúgy azt fogja kiírni, hogy nincs adat. Így könnyű ráfogni a C-re, hogy szar, ha direkt kihagyod a hibakezelést, Rust-ban meg belerakod...
Rust esetén szintén nehéz hibázni, nem engedi az ilyesmit.
unsafe esetén se?
Egy kis malloc() oda nem figyelés. Sebaj valamelyi másik területre ráírunk. Tipikus codeinjection sérülékenység forrás:
Az oda nem figyelés is számít? Mert ennyi erővel végy egy 1.20-nál régebbi Rust fordítót, vagy futtasd egy olyan platformon, ahol az LLVM nem támogatja a stack probing-ot, aztán egy kis oda nem figyelés egy rekurziónál és kész a segfault, safe módban is. Egyébként, amiket írtál, hogy "elfelejtődik" a free(), Valgrind-del ki lehet mérni, hogy mindent felszabadítottál-e.
A C-t tudni kell uralni. Mindig, hibázás nélkül!
Hibázni egyik nyelvben sem lehet, különben bugos lesz a programod. Az meg had ne legyen egy lowlevel nyelv hátránya, hogy tudni kell vele bánni; ennyi erővel az assembly is szar. Egyébként nem tudom, hogy mit akartál ezzel bizonyítani; ha azt, hogy Rust-ban könnyebb programozni, azt senki sem vitatta, ha meg azt, hogy már tökéletesen működő C kódokat le kéne cserélni Rust-ra, azt meg ezzel nem sikerült.