Avaa päävalikko

Rust (ohjelmointikieli)

ohjelmointikieli

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
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.39.0 ()[1], 1.40.0-beta () ja 1.41.0-alpha ()
Merkittävimmät toteutukset Rust
Vaikutteet C++
Käyttöjärjestelmä Android, FreeBSD, iOS, Linux, macOS, Windows
Verkkosivu Rust Language

Muista moderneista kielistä poiketen Rust toteuttaa muistinhallinnan turvallisuuden ajoajan sijaan kielen syntaksissa ja ohjelman kääntämisen aikana, mikä tarkoittaa lisää rajoituksia ohjelmoijalle, mutta enemmän nopeutta ohjelman ajoon, jotta tehossa ei hävittäisi perinteisille kielille. Lisäksi Rustissa on pyritty kehittämään turvallisuutta myös ohjelman säikeiden kilpailutilanteiden suhteen. Toisaalta Rust erottuu monista muista moderneista kielistä siten, että siinä on mahdollista myös halutessaan ohittaa turvallisuusmekanismit ja käyttää esimerkiksi osoitinmuuttujia vapaasti.

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

OminaisuudetMuokkaa

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.

MuistinhallintaMuokkaa

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

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 LibraryMuokkaa

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

Rust-kielen asennusMuokkaa

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ä, mukaan lukien Windows.[6]

Rustilla kirjoitettujen ohjelmien asennusMuokkaa

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.

HistoriaMuokkaa

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]

KulttuuriMuokkaa

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.

Rustin käyttöMuokkaa

Rust-koodia käyttävät muun muassa:

LähteetMuokkaa

  1. https://blog.rust-lang.org/2019/11/07/Rust-1.39.0.html. Arvo on haettu Wikidatasta.
  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 Klabnik, Steve: The History of Rust. Applicative 2016, 1.1.2016. New York: Association for Computing Machinery. doi:10.1145/2959689.2960081. (englanniksi)
  9. Serdar Yegulalp: Mozilla's Rust-based Servo browser engine inches forward InfoWorld. 3.4.2015. Viitattu 28.2.2019. (englanniksi)
  10. Go-ing to Rust: Optimizing Storage at Dropbox | QCon San Francisco 2016 going-rust-optimizing-storage-dropbox.html. 14.7.2016. Viitattu 28.2.2019. (englanniksi)
  11. Sebastian Hahn: Määritä nimeke! lists.torproject.org. Fri Mar 31 21:23:27 UTC 2017. Viitattu 28.2.2019.
  12. The Rust Project Developers: Rust Case Study: Community makes Rust an easy choice for npm 2019. Rust-lang.org. Viitattu 28.2.2019.

Aiheesta muuallaMuokkaa