Murmurings of an accused Lemming

Miksi suosin Rustia

Olen viettänyt huomattavan määrän aikaa koodaten eri ympäristöissä ja käyttänyt kaikkea järjestelmäkielistä (kuten C ja C++) moderneihin kieliin (kuten Go ja TypeScript). Jokaisella on vahvuutensa, mutta Rustista on tullut suosikkikieleni. Tässä ovat tärkeimmät syyt, miksi suosin Rustia, verrattuna kokemuksiini muista kielistä.

  1. Lausekkeisiin perustuvat puolipisteet

C-kielessä puolipiste vain päättää lauseen. Rustissa puolipisteen läsnäololla tai puuttumisella on kuitenkin semanttinen merkitys. Koska Rust on lausekesuuntautunut kieli, lohkot arvioidaan niiden viimeiseksi lausekkeeksi. Jättämällä puolipisteen pois lohkon tai funktion viimeiseltä riviltä se palauttaa kyseisen arvon implisiittisesti. Tämä poistaa return-avainsanan tarpeen melkein kaikissa funktioissa, tehden koodista siistimpää ja korostaen datan kulkua:

1fn add(a: i32, b: i32) -> i32 {
2    a + b // Ei puolipistettä, implisiittinen palautus!
3}
  1. Kaikki on lauseketta

Go-kielestä puuttuu ternäärioperaattori (kuten a ? b : c), mikä vaatii monirivisiä if/else-lauseita jopa yksinkertaisiin sijoituksiin. Rust ratkaisee tämän tyylikkäästi: kaikki on lauseketta. Rustissa et tarvitse ternäärioperaattoria, koska if/else-lohkot ja match-lausekkeet palauttavat arvoja suoraan. Tämä pitää syntaksin selkeänä ilman muuttujien turhaa etukäteisdeklaraatiota:

1let status = if authenticated { "Tervetuloa" } else { "Pääsy evätty" };
  1. Result-tyypit ja ?-operaattori

C++ nojaa vahvasti poikkeuksiin ja try/catch-lohkoihin, mikä voi tehdä suoritusvuosta vaikeasti seurattavan. Rust valitsee täysin toisenlaisen lähestymistavan monadisten Result<T, E>- ja Option<T>-tyyppiensä avulla. Poikkeusten heittämisen sijaan virheet ovat vain normaaleja arvoja, joita funktiot palauttavat. Yhdistämällä tämän ?-operaattoriin virheiden käsittely on sekä eksplisiittistä että uskomattoman siistiä ilman poikkeusten seurannan henkistä kuormaa:

1fn fetch_data() -> Result<String, Error> {
2    let response = make_request()?; // Palauttaa virheen epäonnistuessaan
3    Ok(response)
4}
  1. Todellinen staattinen tyypitys

TypeScript tarjoaa hienon kehittäjäkokemuksen, mutta se on viime kädessä vain kääre JavaScriptin ympärillä. Sen tyypit pyyhitään kääntämisvaiheessa, eli ne eivät tarjoa ajettaessa turvaa. Rust on todella staattisesti tyypitetty kieli. Sen tyypit ovat olemassa käännösaikana, niitä valvotaan tiukasti ja ne käännetään suoraan konelukukoodiksi. Kun kääntäjä takaa tietyn tyypin, voit olla 100-prosenttisen varma sen pitävyydestä ajettaessa.

Lopulta Rust tuntuu kieleltä, jossa suunnittelijat yhdistivät korkean tason kielten ergonomian ja matalan tason järjestelmäkielten hallinnan yhtenäiseksi, turvalliseksi ja ilmaisuvoimaiseksi työkalupakiksi.