I bez praktické znalostí C vidím, že v Rustu se píšou jinak algoritmy, jinak se pracuje s pamětí, má jiné datové struktury atp. Pak uvažte třeba monomorfizaci generik a celou oblast toolchainu a optimalizací kompilátoru. Rust je něco jiného než C.
Ten dojem, že mě rustc vyhejtí jako školáčka, mám však občas taky :-)
Tak předně je to úplně jiná rodina jazyků. C je Algol family, Rust je z velké části založený na ML, takže klade velký důraz na funkcionální programování. Což v C prakticky neexistuje.
Ty garance dané kompilátorem tu navíc nejsou jen pro "vyhejtění programátora". Kompiler má třeba díky mnohem přísnějšímu typovému systému lepší představu o pointerech, díky čemuž může být výsledek rychlejší než C. (Díky aliasingu - ze starších jazyků tohle umí Fortran)
Veru Rust som na
https://www.levenez.com/lang/
nenašiel
Subset z akeho hladiska? Rust ti nebrani urobit cokolvek v ramci unsafe bloku, co je AFAIK prave v ramci kernelu pomerne casto potrebne. Cize ta memory safety cast nemusi byt nutne z hladiska vyvoja jadra zas taka podstatna. Tu je status update z Jula, zhruba od 15-tej minuty tam hovoria o async ako jednej z motivacii pouzivat Rust v jadre.
Unsafe blok nevypíná všechny garance, takže je to pořád bezpečnější než C.
Z tohoto pohledu jsou si vsechny jazyky rovne, protoze at uz pisete v C, C++, ASM ci Rustu, vysledkem bude strojovy kod, ze ktereho lze odvodit hezci nebo skaredsi reprezentaci zpetne ve vyssim jazyku.
Ale C++ a Rust prinasi trocha vice pohodli pro autora, stejne tak jako C prineslo vetsi pohodli do sveta ASM, na ukor eliminace nebezpecnych kostrukci (treba v cistem C neudelate jump do prostredku instrukce, zatimco v ASM ano).
Pokud se na to díváte z hlediska výsledného strojového kódu, tak asi nebude celky rozdíl mezi C a Rustem, byť se nějaké detaily (třeba kontrola hranic pole, eliminace alokaci na heapu, …) najdou. Z hlediska komfortu programátora je ale rozdíl větší, než píšete. Rust nabízí i různé zero-cost abstrakce. V Rustu lze mnohem snáze řešit chybové stavy. Rust má lambdy a closures.
IIRC často ano (obzvlášť bych to čekal u konstrukcí jako map), nicméně vždy se najdou případy, kdy to kompilátor nezvládne odstranit ani omezit*. Snad bych s trochou snahy zvládl i formální důkaz redukcí na problém zastavení. Pokud takový kód kompilátor neodmítne a nechce obětovat memory safety, zbývá jen kontrola za běhu.
*) Omezit – někdy může například dávat smysl vyhodit kontrolu mimo smyčku, a v optimistickém případě zvolit rychlou variantu. Kontrola tak nezmizí, ale provádí se méně často.