skip to Main Content

Ruosteohjelmointia

Rust on nuori ohjelmointikieli: ei aivan uudenkiiltävä, mutta ei millään tavalla vanha tai ruosteinen.

Rust sai alkunsa Mozillalla 2010-luvulla, ja se näytti kelpoisuutensa Firefoxin ytimessä. Sillä kirjoitetut osat tekivät selaimesta nopean. Ohjelmointikielestä oli hyötyä rinnakkaisten taittoalgoritmien käyttöönotossa ja näytönohjaimen hyödyntämisessä.

Rustin käyttö teki selaimesta myös vakaamman ja turvallisemman. Mozilla Hacks -kirjoituksessaan Diane Hosfelt kertoi käyneensä läpi kaikki Firefoxin taitto- ja piirtomoottorin tietoturvabugit julkaisuvuodesta 2002 alkaen — niitä oli kaikkiaan 69 kappaletta. Hän kirjoittaa, että 51 näistä bugeista ei olisi ollut mahdollisia, jos moottori olisi alunpitäen tehty Rustilla.

Rustin turvallisuus on sellaista, että ohjelmoijalle tulee luottavainen olo, että on vaikeaa tai mahdotonta saada aikaan muissa kielissä tyypillisiä virheitä. Yleensä ohjelmoinnissa muistinhallintavirheiden välttäminen on vaikeaa, ja esimerkiksi C++:ssa virheisiin on aivan liian monia mahdollisuuksia.

Mitä Rust tarjoaa?

Stack Overflow:n kehittäjäkyselyssä Rust on äänestetty rakastetuimmaksi ohjelmointikieleksi joka kerta vuodesta 2016 lähtien.

Rust vetoaa kehittäjiin tarjoamalla jotain tuttua. Kaari- ja aaltosulkujen tuttu rytmi tuo turvallisen olon monille C:n ja C++:n -sukuisten kielien osaajille.

Minulle Rustissa juuri ikävintä on kaari- ja aaltosulkeiden tulva ja muutoinkin tarpeettoman pitkäpiimäinen muoto. Kun on kerran päästy tekemään ohjelmointikieli puhtaalta pöydältä, olisi voinut Haskellista kopioida muiden hyvien ominaisuuksien lisäksi myös minimalistisen syntaksin. Haskelissa kun on varsin hyvin onnistuttu tekemään tilaa olennaiselle jättämällä ylimääräinen häly pois.

Kun onnistun pääsemään ulkoisten asioiden yli, ihastelen kielen parempia puolia. Parasta on, että Rust keskittyy nopeuteen, turvallisuuteen ja rinnakkaisuuteen. Juuri sellaisiin asioihin joilla on väliä, kun haluan rakentaa liikkuvia robotteja.

Rust tarjoaa jämäkän staattisen tyypityksen ja selkeän semantiikan. Rust ottaa vahvan kannan määrittelemätöntä toimintaa kohtaan: sitä ei hyväksytä. C++:ssa määrittelemätön toiminta luuraa aina varjoissa, josta se saattaa päästä vapaaksi huonona hetkenä. Sellainen ylläpitää jatkuvaa pientä ahdistusta.

Rinnakkaisuuden kanssa Rust on tarkka, mutta huolellinen. Kääntäjä tarkistaa, ettei koodissa vahingossa sörkitä toiselle säikeelle kuuluvaa muistia, eikä tehdä muitakaan vastaavia pikkuvirheitä. Vaikeasti selvitettävien rinnakkaisuusvirheiden mahdollisuus pienenee automaattisesti.

Kielen hienoja ominaisuuksia kehiteltäessä nopeudesta ei ole suostuttu tinkimään. Sen sijaan koodin kirjoittaja joutuu ajoittain vääntämään kääntäjän kanssa, että saa tahtonsa läpi, ja lopulta jompi kumpi taipuu. Kannattaa muistaa, että kääntäjä on tiukkapipo hyvästä syystä. Se haluaa varmistaa, ettei tuotteessa ole virheitä, jotka konekin olisi osannut välttää.

Rustin käyttö kasvaa koko ajan. Siitä tykkäävät niin harrastajat, tieteentekijät, järjestelmäkehittäjät kuin pelikoodaajatkin. Jotkut ovat jo ilmoittaneet, etteivät enää tule koodamaan C++:lla.

Marraskuussa Mozilla Foundationin suunnatessaan voimavarojaan uudelleen, Rustin ylläpito siirtyi Linux Foundationille. Uskon, että Rust saa sieltä hyvän kodin, ja jään mielenkiinnolla seuraamaan kielen kehitystä.

Lue myös:
» RustDDS – Data Distribution Service implemented in Rust


Harri Järvi
Ohjelmistoarkkitehti