Rust (ohjelmointikieli)

Kohteesta Wikipedia
Loikkaa: valikkoon, hakuun
Rust
Rust programming language black logo.svg
Paradigma moniparadigma, käännettävä, funktionaalinen, imperatiivinen
Tyypitys staattinen, vahva
Yleinen suoritusmalli käännettävä
Muistinhallinta RAII
Julkaistu 2010
Kehittäjä Graydon Hoare, Rust -projektin kehittäjät
Vakaa versio 1.20[1] (31. elokuuta 2017)
Merkittävimmät toteutukset Rust
Vaikutteet C++
Käyttöjärjestelmä Android, FreeBSD, iOS, Linux, macOS, Windows
Verkkosivu Rust Language

Rust on ohjelmointikieli, jonka on kehittänyt Mozilla Foundation.[2]

Rust on suunniteltu suorituskykyiseksi järjestelmätason ohjelmointikieleksi, joka välttäisi tyypillisten C- tai C++-ohjelmien muistinhallintaan liittyvät virhetilat. Sen syntaksi muistuttaa C-kieltä, mutta muuten eroaa siitä ominaisuuksiltaan, sisältäen muun muassa nimiavaruudet, rinnakkainajon, sulkeumat ja tyypinpäättelyn.[3]

Rust on käännettävä kieli, jota kirjoitetaan unicode-merkistöllä.

Ominaisuudet[muokkaa | muokkaa wikitekstiä]

Rust tarjoaa korkean abstraktiotason kielen ominaisuudet matalalla prosessointitasolla. Rustin päämäärinä ovat turvallisuus, nopeus ja rinnakkaisuus.[4] Rustilla voidaan kirjoittaa käyttöjärjestelmiä, laiteajureita ja se voidaan sulauttaa toisiin ohjelmiin.[4] Tärkeitä alueita rustille ovat myös pelikehitys ja webpalvelut.

Muistinhallinta[muokkaa | muokkaa wikitekstiä]

Rust ratkaisee muistinhallinnan ongelmat käyttämällä datan omistajan, lainaamisen ja turvattoman (unsafe) käsitteitä.[5] Tämä mahdollistaa automaattista roskienkeruutakin paremmat ominaisuudet: deterministisen muistivapautuksen, ei kilpailutilanteita (data race) ja iteroijien tarkistus (ei muokata ja viitata samanaikaisesti).

Muistinhallinnan käsitteistö[muokkaa | muokkaa wikitekstiä]

Rust-ohjelmien muistialue koostuu kahdesta alueesta: pino ja keko (stack, heap) – aivan kuten C-kielessäkin. Pinossa olevat muuttujat omistaa joku keossa oleva laatikko (box). Laatikoiden omistamia muuttujia, tavaroita (items), voi vaihdella funktioiden kesken jos ne ovat muuttumattomia (static). Muuttuvien muuttujien (avainsana mut) jakaminen on mahdollista lainaamalla niitä funktioilta tai säikeiltä toisille (borrowing).[5] Nämä ratkaisut mahdollistavat turvallisen rinnakkaisajon ja estävät segmentaatiovirheet, jotka C-kielessä johtuvat luvattomien muistialueiden käsittelystä.

Turvattoman (unsafe) muistihallinnan kautta rust-ohjelmat voivat kommunikoida toisten järjestelmäprosessien ja eri kielellä kirjoitettujen ohjelmien kanssa ilman ristiriitoja, ja tarvittaessa rikkoa omistukseen liittyviä sääntöjä.

Rust Standard Library[muokkaa | muokkaa wikitekstiä]

RSL sisältää tärkeimmät ominaisuudet ohjelmointia varten. Moduulit sisältävät kirjastoja muistialueiden, primitiivityyppien, kokoelmien ja virheiden käsittelyyn, iterointiin, IO-operaatioihin, säikeistykseen ja prosessien hallintaan, sekä joukon makroja.[4]

Ympäristö[muokkaa | muokkaa wikitekstiä]

Rust-kielen asennus[muokkaa | muokkaa wikitekstiä]

Rust-projekti käyttää rustin asentamiseen rustup-työkalua, joka asentaa kohdeympäristöön virallisia kanavia pitkin julkaistun rust-version. Se toimii kaikissa rust-kielen tukemissa käyttöjärjestelmissä, mukaanlukien Windows.[6]

Rustilla kirjoitettujen ohjelmien asennus[muokkaa | muokkaa wikitekstiä]

Rust käyttää kirjastojen ja valmiiden rust-ohjelmien hallintaan Cargo-paketinhallintaa, joka perustuu Rubyn Bundler-paketinhallintaan. Cargo asentaa crate-ohjelmistopaketit crates.io-verkkopalvelusta.[7] Cargo toimii myös työvälineenä rust-ohjelmien rakentamiseen, korvaten historiallisen maken.

Historia[muokkaa | muokkaa wikitekstiä]

Ohjelmointikieli-insinööri Graydon Hoare aloitti rustin kehittämisen vuonna 2006. Hoare esitteli rustia työnantajalleen Mozilla-säätiössä, jonka jälkeen Mozilla perusti tiimin toteuttamaan rustilla tehdyn selainmoottorin, Servon.[3]

Steve Klabnik tunnistaa rustin historiassa neljä aikakautta: henkilökohtainen (2006–2010), Graydonin vuodet (2010–2012), tyyppijärjestelmävuodet (2012–2014) ja julkaisuaika (2015 – toukokuu 2016).[8] Kieltä kehitettäessä lähestymistapa on Klabnikin mukaan ollut empiirinen iteraatio, jossa implementoitujen ominaisuuksien toimivuus kokeillaan ennen niiden hyväksymistä.

Rust 1.0.0 julkaistiin 15. toukokuuta 2015. Julkaisuvuonna rustc-kääntäjän toteutuksessa oli 1410 osallistujaa.[8] Hoare käytti rustin toteuttamiseen aluksi OCamlilla kirjoitettua tulkkia. Nykyisin rust on kirjoitettu rustilla.[8]

Kulttuuri[muokkaa | muokkaa wikitekstiä]

Klabnikin mukaan projektissa pidetty tärkeänä itse kielen ominaisuuksien lisäksi ekosysteemiä, työkaluohjelmia, vakautta ja yhteisöä.[8] Rust-yhteisössä tärkeitä ovat myös käytöskoodi, inhimillinen käytös ja turhan työn automaatio. Rust-projektin koodirepositorio tervehtii automaattisesti uusia toteuttajia, ja muutokset koodikantaan valitaan formalisoidun automaation avulla, jotta vältytään sosiaalisilta ristiriitatilanteilta.

Rust-koodia käyttävät muun muassa Firefox-selain versiosta 45 lähtien, Dropbox. Skylight.io-rubygemselvennä sisältää rustin ja sen on raportoitu kaatuneen vain kahdesti neljän vuoden aikana.[8]

Lähteet[muokkaa | muokkaa wikitekstiä]

  1. Announcing Rust 1.20 – The Rust Programming Language Blog 31.8.2017. Viitattu 9.9.2017.
  2. The Rust Language Lambda The Ultimate. 8.7.2010. Viitattu 4.9.2016. (englanniksi)
  3. a b Avram, Abel: Interview on Rust, a Systems Programming Language Developed by Mozilla InfoQ. 3.8.2012. C4Media Inc. Viitattu 4.9.2016. (englanniksi)
  4. a b c The Rust Programming Language The Rust Project Developers. Viitattu 22.10.2016. (englanniksi)
  5. a b The Rust Reference – 10 Memory model 2011. The Rust Project Developers. Viitattu 22.10.2016. (englanniksi)
  6. Rustup: The Rust Toolchain Installer Rustup. GitHub. Viitattu 9.9.2017. (englanniksi)
  7. Cargo, Rust’s Package Manager Crates. Viitattu 22.10.2016. (englanniksi)
  8. a b c d e Klabnik, Steve: The History of Rust. Applicative 2016, 1.1.2016. New York: Association for Computing Machinery. doi:10.1145/2959689.2960081. (englanniksi)

Aiheesta muualla[muokkaa | muokkaa wikitekstiä]