SPIKE411: Tohle se dost podrobně řešilo na Redditu v C++ i v Rustu. Ten člověk má sice zkušenost s C++, ale s Rustem minimální a základním věcem ani nerozumí, např. co je to unsafe Rust. Já jsem 10 let dělal C++ a teď už pár let Rust a je to tedy nesrovnatelné s tím, že Rust je prakticky ve všem lepší. Když jsem s ním začínal, byl jsem extrémně skeptický, ale vždy když mi něco nesedělo a pak jsem pochopil, proč je to v Rustu jinak než v C++, tak mi to došlo a ve 100 % případů měl "Rust pravdu". Můj dojem z toho byl, že takhle by C++ vypadalo, kdyby vzniklo dneska a ne v roce 1979.
Ale k tomu článku:
- Unsafe Rust: Je to normální Rust, jen v něm fungují jiná (komplikovanější) pravidla. Vlastně je to velmi blízko tomu jak C++ funguje normálně. Je to celé invertované, C++ je defaultně unsafe a když se snažíš, tak je safe. Rust je defaultně safe a když chceš, můžeš psát unsafe variantu. Inline assembly příměr je úplne mimo. Spíš C++11/14/17/20 vs C++98/03.
- Safety Toll: I po 10 letech jsem občas napsal kód, který crashoval. Prostě jsem si kolikrát neuvědomil při psaní ty nuance. Možnost psát Rust, kde je nemožné takové chyby dělat (a mnoho dalších) je naprostý game changer. A ten "trade off" performance vs safety je falešné dilema. Jednak
Google to krásně debunknul, ale hlavně když vaše blbost crashuje a neběží, tak může být nejrychlejší v historii, ale nikomu to k ničemu není.
- UB=optimalizace: Doporučuji následující video:
Undefined Behaviour is Awesome. Je to vtipné a velmi děsivé. Kompilátor skutečně na základě UB dělá optimalizace, ale málokdy takové, které fakt chcete. Navíc se na to nedá spolehnout. A opět viz Google výše, v naprosté většině případů je to stejně irelevantní. V článku zmiňované bounds checking mají na dnešních cpu nulový dopad na performance.
- Cache locality: Nic souvisejícího s C++ a totální nesmysl, že to v Rustu je těžké. Já jsem v tomhle ohledu měl naopak lepší zkušenost v Rustu, kde je všechno explicitní. V C++ jsem vlastně spoléhal na to, že kompilátor udělá co bych chtěl/čekal, protože tam je strašně moc věcí implicitních. Třeba padding apod. Srovnej třeba s
std::pin. Přesně věc na to co on popisuje v článku. A je to explicitní, narozdíl od C++, kde se mi přesně podařilo vždy vyskenout chybu v self-referential věcech.
- Compiler choice: Jop, velká výhoda, když napíšete perfektně validní C++ a pak zjistíte, že na MSVC se to nezkompiluje a v Clangu se to chová jinak než v GCC. Ohromná zábava takové věci "řešit". O nějakých no-name kompilátorech třetích stran ani nemluvim. Tam půlka standardu není implementovaná vůbec a druhá je blbě.
- Resources: Naprosto nemám problém k jakémukoliv probému (i obskurnímu) najít zdrojek Rustu. K C++ toho je víc, protože existuje 4x dýl (ale často je to zastaralé).
- The Dubious Benefits of Safety: Tady se asi opravdu neshodneme. Autor článku je ztělesněním fenoménu
Software in decline. Píšeme nefunkční sračky a nevadí nám to. Kvalita většiny softwareu je naprosto otřesná. A pak přijde tenhle týpek, který brání jazyk, ve kterém nejde psát bezpečný software at scale (a to říkám jako velký C++ fanboi) slovy "že to crashuje nikomu nevadí". Mezitím
Microsoft řeší, že 70 % všech CVE plynou z memory unsafety C++, konrétně use-after-free, kde utápí miliony a miliony dolarů. Ani ne běžné crashe, ale reálné exploitovatelné problémy. Fakt mi přijdou takovéhle hlody jako že bezpečnost softwareu se přeceňuje jako dokonale absurdní. Jestli něco, tak přesně obráceně. Mě otravuje restartovat myčku kvůli memory bugu jednou za měsíc, natož odmávnout to, že Boeing zabil shitózním softwarem 737 MAX 346 lidí, protože k tomu přistoupili přesně takhle. Nemluvě o takových věcech jako neřešit různé bugy jako třeba 70 % všech CVE snižuje celkové náklady na údržbu a tak.
Po letech zkušeností s Rustem jsem schopen porovnat C++ a Rust a k C++ bych se už nevracel ani za nic. Je to fakt všechno špatně a argumenty jako výše jsou buď zcestné nebo nesmyslné a je snaha si obhájit, proč v tom dál ještě pokračuju. A to jsem C++ skutečně měl hodně rád, ale taky jsem s ním měl hodně problémů. A ty my všechny Rust vyřešil.