Hm.... let me see...
Rust-project:
git clone <repo>
cargo build --release
En klaar. Cargo downloadt alle dependencies (en dependencies van dependencies), en maakt dan een build aan de hand van de opties in cargo.toml van het project en de toolchain die je geinstalleerd/geactiveerd hebt. Als een project gebruik maakt van stable Rust, dan werkt dit nagenoeg altijd.
C++-project:
git clone <repo>
make
....
Dan krijg je waarschijnlijk 300 errors. Grote kans dat je niet de juiste compiler hebt geinstalleerd van de 32 beschikbare opties, of je make-file houdt geen rekening met specifiek NET DAT ding dat nodig is voor jouw geïnstalleerde toolchain... zelfs als dat allemaal goed is, dan missen er waarschijnlijk dependencies waardoor het compileren niet lukt, en nadat je een dependency hebt opgezocht en *just so* hebt neergezet met *precies deze* opties voor dat project, blijkt dat die ook weer een dependency heeft... enzovoorts. Soms kan het letterlijk uren duren voordat je een groot C++-project daadwerkelijk gecompileerd krijgt.
Het enige waar ik geen fan van ben met Rust is de afhankelijkheid van crates.io (net zoals NPM afhankelijik is van het NPM-repo). Wat ik graag zou willen is iets als dit:
cargo download-deps <mapnaam>
rustup create-installer full 1.45 <mapnaam>
Dan zou Cargo alle dependencies kunnen downloaden naar die map, waarna je in cargo.toml kunt aangeven dat die map gebruikt moet worden in plaats van crates.io. rustup zou een installer kunnen bouwen van een specifieke versie van Rust, met alle componenten erin.
Als je dan jouw code hebt, de map/zip met dependencies en de installer, dan kun je het project ook nog compileren over 20 jaar, mits je een computer hebt waar de compiler op draait.
Nu zou het kunnen gebeuren dat het project incompatible wordt met zijn dependencies; ik ga er niet van uit dat crates.io alle versies van alle dependencies voor altijd en altijd bewaart (en dat crates.io voor altijd bestaat).
Misschien is iets dergelijks wel nu beschikbaar. Ik heb verscheidene keren berichten gezien dat aan iets als dit gewerkt wordt, maar ik heb het niet meer in de gaten gehouden. (Ik schrijf op dit moment enkel één programma in Rust, als hobby; omdat ik niet C wil gebruiken. En Go al helemaal niet.)
===
Oh, en als je vindt dat Rust "net C is maar dan met veiliger geheugenbeheer", dan zit je er op dat gebied flink naast.
Rust is niet OOP; het gebruikt een abstract-data-type (ADT)-structuur op basis van structs, zoals je die in C ook zou bouwen om "pseudo-objectgeorienteerd" te programmeren, maar Rust doet dat veel netter. Dat is echter voor mijn gevoel waar de overeenkomst met C eindigt. Rust heeft VEEL meer concepten dan C en is op het gebied van types en dergelijke veel stricter; het komt veel meer in de beurt van C++, maar dan dus pseudo-objectgeorienteerd.
En dan heb ik het niet eens over het feit dat Rust memory safe, thread safe en race condition safe is, zolang je geen "unsafe { }"-blocks gebruikt... en dat de compiler je al van te voren kan vertellen dat code niet betrouwbaar gaat werken. (Rust-analyzer kan het tegenwoordig zelfs vaak al in de IDE.)
[Reactie gewijzigd door Katsunami op 23 juli 2024 00:57]