Mikä on Rust? Muistiturvallisten kielten nousu
Kerromme, miten muistiturvallisuudella haavoittuvuuksia vähentävä Rust toimii ja miksi se on levinnyt nopeasti järjestelmäohjelmistoihin.

Rust on avoimen lähdekoodin järjestelmäohjelmointikieli, joka toimii yhtä nopeasti kuin C ja C++, mutta takaa muistiturvallisuuden jo käännösvaiheessa. Kysymyksen ”mikä on Rust” ydin on omistajuusmalli: ilman roskienkeruuta se estää muistin ylivuodon ja vapautetun muistin käytön kaltaiset virheet ennen ohjelman ajoa. Se yleistyy vähitellen käyttöjärjestelmissä, selaimissa ja palvelinohjelmistoissa.
Mikä on Rust-ohjelmointikieli?
Rust-ohjelmointikieli syntyi Mozillan sisällä alkaneesta projektista, ja sen ensimmäinen vakaa versio julkaistiin vuonna 2015. Nykyään sitä kehittää laaja yhteisö itsenäisen Rust Foundationin alaisuudessa. Viralliset dokumentit ja asennusohjeet löytyvät sivulta rust-lang.org.
Kielen tavoite on kunnianhimoinen: yhdistää matalan tason kielten nopeus ja hallinta korkean tason kielten turvallisuuteen. Perinteisesti näiden kahden ominaisuuden välillä piti valita; Rust pyrkii tarjoamaan molemmat.
Rustia käytetään laajalla alueella komentorivityökaluista verkkopalveluihin, sulautetuista laitteista selaimessa toimiviin WebAssembly-moduuleihin. Se erottuu erityisesti paikoissa, joissa sekä turvallisuus että suorituskyky ovat kriittisiä.
Miksi muistiturvallisuus on niin tärkeää?
Kielissä kuten C ja C++ muistinhallinta on pitkälti kehittäjän vastuulla. Taulukon rajan ulkopuolelle kirjoittaminen, vapautetun muistin uudelleenkäyttö tai saman muistin vapauttaminen kahdesti voi johtaa ohjelman kaatumiseen tai siihen, että hyökkääjä pääsee suorittamaan koodia.
Tämä ongelma ei ole teoreettinen. Microsoft ja Googlen Chromium-tiimi ovat kertoneet julkisesti, että noin 70 prosenttia heidän tuotteidensa vakavista tietoturva-aukoista johtui muistiturvallisuudesta. Siksi monet julkiset toimijat ja suuret teknologiayritykset suosittelevat muistiturvallisten kielten valitsemista uusiin projekteihin.
Kielet kuten Java, C#, Go ja Python ratkaisevat ongelman suurelta osin roskienkerääjällä (garbage collector). Hintana on ajonaikainen lisäkuorma ja ajoittaiset ennalta arvaamattomat tauot. Rust tarjoaa saman turvallisuuden ilman roskienkerääjää käännösaikana.
Miten omistajuus ja lainaus toimivat?
Rustin turvallisuus perustuu kolmeen perussääntöön. Vaikka ne tuntuvat aluksi vierailta, kun ne on sisäistetty, ne antavat sinun napata monta virhettä ennen koodin ajamista.
fn uzunluk(metin: &String) -> usize {
metin.len()
}
fn main() {
let selam = String::from("Merhaba");
let n = uzunluk(&selam); // lainattu, omistajuus pysyy meillä
println!("{} karakter: {}", n, selam);
let tasindi = selam; // omistajuus siirtyi
// println!("{}", selam); // käännösvirhe: selam ei ole enää voimassa
println!("{}", tasindi);
}Omistajuus (ownership)
Jokaisella arvolla on yksi omistaja. Kun omistaja poistuu näkyvyysalueelta, muisti vapautetaan automaattisesti. Kun arvo siirretään toiselle muuttujalle, omistajuus siirtyy mukana; vanhaa muuttujaa ei voi enää käyttää.
Lainaus (borrowing)
Arvon käyttämiseksi luovuttamatta omistajuutta otetaan viittaus. Samaan aikaan voi olla joko useita vain luku -viittauksia tai yksi muokattava viittaus. Tämä sääntö estää käännösaikana datakilpailuiksi (data race) kutsutut samanaikaisuusvirheet.
Elinajat (lifetimes)
Kääntäjä varmistaa, että viittauksen osoittama data elää viittausta pidempään. Näin roikkuvan osoittimen (dangling pointer) virhetyyppi poistuu.
Rustin ja C++:n ero
Rustia ja C++:aa käytetään samankaltaisilla alueilla, ja niiden suorituskyky on yleensä samalla tasolla. Todellinen ero on siinä, kenen vastuulla turvallisuus on.
| Kriteeri | C++ | Rust |
|---|---|---|
| Muistiturvallisuus | Riippuu kehittäjän tarkkaavaisuudesta | Kääntäjä valvoo |
| Roskienkerääjä | Ei yhtään | Ei yhtään |
| Suorituskyky | Hyvin korkea | Hyvin korkea |
| Samanaikaisuusvirheet | Voivat ilmetä ajon aikana | Datakilpailut estetään käännöksessä |
| Pakettien hallinta | Useita työkaluja | Virallinen työkalu: Cargo |
| Oppimiskäyrä | Pitkä ja hajanainen | Aluksi jyrkkä, sitten johdonmukainen |
| Ekosysteemin ikä | Kymmeniä vuosia | Nuorempi, kasvaa nopeasti |
Missä Rustia käytetään?
Rust-koodin ajamisesta selaimessa kerroimme kirjoituksessa mikä on WebAssembly ja siitä, miksi pieni muistinkulutus ja nopea käynnistys ovat tärkeitä, kirjoituksessa mikä on serverless.
- Käyttöjärjestelmät: Linuxin ydin on alkanut hyväksyä Rustilla kirjoitettuja ajureita; myös joissakin Windowsin osissa käytetään Rustia.
- Selaimet: monet Firefoxin osat on kirjoitettu Rustilla.
- Verkko- ja palvelinohjelmistot: paljon liikennettä käsittelevät palvelut, välityspalvelimet ja CDN-infrastruktuurit.
- Komentorivityökalut: nopeat haku-, tiedosto- ja paketinhallintatyökalut.
- WebAssembly: selaimessa lähes natiivinopeudella toimivat moduulit.
- Sulautetut järjestelmät: turvallinen ohjelmisto rajallisten resurssien laitteissa.
- Pilvi ja palvelimeton suoritus: funktiot, jotka vaativat nopeaa käynnistysaikaa ja vähäistä muistinkäyttöä.
Rustin asennus ja ensimmäinen projekti
Rustin virallinen asennustyökalu on rustup; se asentaa kääntäjän, Cargo-paketinhallinnan ja vakiokirjaston yhdessä sekä seuraa ajantasaista vakaata versiota.
rustc --version
cargo --version
cargo new merhaba
cd merhaba
cargo runmacOS ja Linux
Aja päätteessä alla oleva komento ja seuraa ohjeita. Asennuksen jälkeen sulje pääte ja avaa se uudelleen.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shWindows
Lataa ja aja rustup-init.exe sivuston rust-lang.org asennussivulta. Asennus pyytää tarvittaessa asentamaan Visual Studio C++ -käännöstyökalut; ilman niitä linkitysvaihe (linking) epäonnistuu.
Pitäisikö Rust opetella?
Rustin eniten puhuttu haaste on oppimiskäyrä. Kääntäjä noudattaa tiukkoja sääntöjä, ja ensimmäisinä viikkoina törmäät usein virheilmoituksiin. Hyvä uutinen on, että nämä ilmoitukset ovat selittäviä ja ehdottavat usein ratkaisunkin suoraan.
Jos haluat työskennellä järjestelmäohjelmoinnin, suorituskykykriittisten palvelujen, sulautettujen ohjelmistojen tai tietoturvan parissa, Rust on vahva investointi. Jos taas haluat kehittää verkkosivustoja tai yrityssovelluksia, aloittaminen kielillä kuten JavaScript, PHP tai Python tuottaa tuloksia nopeammin; Rustin voit lisätä myöhemmin suorituskykyä vaativiin osiin.
Oppiessasi älä taistele kääntäjää vastaan vaan pidä sitä opettajana. Jokainen virheilmoitus näyttää etukäteen ongelman, johon voisit törmätä myöhemmin tuotannossa. Yhteisön foorumit ja viralliset dokumentit ovat myös hyvin avuliaita aloittelijoille.
- Virallinen kirja: The Rust Programming Language, ilmainen ja verkossa.
- Rust by Example: lyhyitä, ajettavia esimerkkejä.
- Kirjoita pieni CLI-työkalu: tiedostoa lukeva, tekstiä käsittelevä yksinkertainen ohjelma on paras harjoitus.
Muistiturvallisten kielten tulevaisuus
Turvalliset ohjelmointikielet nähdään nykyään paitsi kehittäjän valintana myös osana tietoturvapolitiikkaa. Muistiturvallisen kielen valinta uusiin kriittisiin osiin estää suuren osan tulevaisuudessa ilmenevistä haavoittuvuuksista jo alkuunsa.
Tämä ei tarkoita, että kaikki C- ja C++-koodi kirjoitettaisiin uudelleen. Realistisempi kuva on, että uudet osat kirjoitetaan turvallisilla kielillä ja ne toimivat yhdessä nykyisten järjestelmien kanssa. Se, että Rust voi helposti kytkeytyä C:hen, tekee siirtymän mahdolliseksi.
Yritysten kannalta viesti on tämä: tärkeämpää kuin se, millä kielellä käyttämäsi ohjelmisto on kirjoitettu, on se, miten turvallisuus on sijoitettu kehitysprosessiin. Me Aurora Yazılımilla valitsemme kielen tarpeen mukaan toimialakohtaisissa ohjelmistoratkaisuissa ja verkkokauppa-alustan projekteissa ja suunnittelemme turvallisuuden ja suorituskyvyn alusta alkaen. Sen, miten nopeutta mitataan ja parannetaan verkossa, kerroimme sivullamme nopeus- ja suorituskykyoptimointi.
Usein kysytyt kysymykset
01Käytetäänkö Rustia verkkokehityksessä?
Kyllä, palvelinpuolella on Rustilla kirjoitettuja verkkokehyksiä ja API-palveluja. Ekosysteemi ei kuitenkaan ole yhtä laaja kuin JavaScriptin, PHP:n tai Pythonin. Rust valitaan yleensä palveluihin, jotka vaativat korkeaa suorituskykyä, tai WebAssembly-moduuleihin.
02Korvaako Rust C++:n?
Lyhyellä aikavälillä ei; C++:lla on kirjoitettu valtava koodikanta ja kieli kehittyy edelleen. Uusissa projekteissa, erityisesti turvallisuuskriittisillä aloilla, Rust kuitenkin valitaan yhä useammin.
03Mitä unsafe tarkoittaa Rustissa?
Unsafe on avainsana, joka poistaa tietyn koodilohkon osalta käytöstä osan kääntäjän tarkistuksista. Sitä tarvitaan esimerkiksi laitteistoon pääsyssä tai C-kirjastoihin yhdistämisessä. Hyvin kirjoitetuissa projekteissa nämä lohkot pidetään pieninä ja tarkastetaan huolellisesti.
Rust yhdistää nopeuden ja turvallisuuden ja luo uuden standardin järjestelmäohjelmistoihin; se estää suuren osan muistiperäisistä haavoittuvuuksista jo ennen koodin ajamista. Jos haluat ohjelmiston, jossa turvallisuus ja suorituskyky on huomioitu alusta asti, tutustu ohjelmistoratkaisuihimme, katso verkkosivujen suunnittelupalveluamme verkkoprojektiasi varten tai ota meihin yhteyttä.


