Hiljuti toimunud avatud lähtekoodiga tehnoloogia tippkohtumisel (Open Source Technology Summit — OSTS) , Intel'i juhtiv insener, rääkis sellest, et tema ettevõte on huvitatud Rusti saavutamisest peagi «pariteedi» seadmises alles veel domineeriva süsteemse ja madala taseme arendamise keele C-ga. pealkirjaga «Intel ja Rust: süsteemse programmeerimise tulevik» rääkis ta ka süsteemse programmeerimise ajaloost, sellest, kuidas C sai «vaikimisi» süsteemse programmeerimise keel, millised võimalused Rustil on talle eelise andmiseks C ees ja kuidas see suudab tulevikus täielikult C asendada selles programmeerimise valdkonnas.

Süsteemi programmeerimine on tarkvara arendamine ja haldamine, mis teenib platvormina rakenduste loomisel, võimaldades viimaste suhtlemist protsessori, mäluga, sisendi-väljundi seadmete ja võrgutarvikutega. Süsteemne tarkvara loob spetsiaalse abstraktsiooni liideste kujul, mis aitavad rakendustarkvara luua, süvenemata detailselt selles, kuidas «rauda» töötab.
Isegi Triplet määratleb süsteemi programmeerimise kui «kõik, mis ei ole rakendus». See hõlmab selliseid asju nagu BIOS, sisufirmad, laadijad ja operatsioonisüsteemide tuumad, erinevaid tüüpe sisseehitatud madalama taseme koodi ning virtuaalmasinate teostusi. Huvi pärast peab Triplet veebibrauserit ka süsteemseks tarkvaraks, kuna brauser on ammu muutunud suuremaks kui «lihtsalt programm», muutudes iseseisvaks «platvormiks veebilehtedele ja veebirakendustele».
Ajal oli enamus süsteemiprogrammidest, sealhulgas BIOS, laadijad ja püsivara, kirjutatud assembleri keeles. 1960. aastatel alustati eksperimentidega, et pakkuda riistvaratoetust kõrgema taseme keeltele, mis viis selliste keelte nagu PL/S, BLISS, BCPL ja ALGOL 68 loomisele.
Seejärel, 1970. aastatel, lõi Dennis Ritchie C programmeerimiskeele Unix operatsioonisüsteemi jaoks. B programmeerimiskeele alusel loodud C, mis ei toetanud isegi tüpiseerimist, oli täidetud võimsate kõrgema taseme funktsioonidega, mis olid parimad operatsioonisüsteemide ja draiverite kirjutamiseks. Mitmed UNIX komponendid, sealhulgas selle tuum, kirjutati lõpuks ümber C keeles. Hiljem kirjutati paljusid teisi süsteemiprogramme, sealhulgas Oracle andmebaasi, suurem osa Windowsi lähtekoodist ja Linuxi operatsioonisüsteem, samuti C keeles.
C on saanud selles osas suurt tuge. Kuid mis täpselt sundis arendajaid sellele üle minema? Triplett arvab, et arendajate motiveerimiseks tuleb programmistikku liikumiseks pakkuda uusi funktsioone, ilma et vanad võimalused kaduksid.
Esiteks peab keel pakkuma "üllatavalt muljetavaldavaid" uusi funktsioone. "See ei saa olla lihtsalt veidi parem. See peab olema oluliselt parem, et õigustada inseneride vaeva ja aega, mis on vajalik üleminekuks," selgitab ta. Võrreldes assembleriga pakkus C palju asju — see toetas teatud määral turvalist tüüpimist, pakkus paremat üleviimist ja tootlikkust kõrgema taseme konstruktsioonidega, samuti genereeris tervikuna palju arusaadavamat koodi.
Teiseks peab keel pakkuma vanade funktsionaalsuste tuge, mis tähendab, et C-keele ülemineku puhul pidid arendajad olema kindlad, et see on funktsionaalsuselt vähemalt samal tasemel kui assembleri keel. Triplett selgitab: „Uus keel ei saa olla lihtsalt parem, see peab olema ka mitte halvem.“ Lisaks sellele, et C oli kiire ja toetas kõiki andmetüüpe, mida assembleri keel suutis kasutada, sisaldas see ka seda, mida Triplett nimetas „hädaava”, toetamata enda sees assembleri koodi sisestamist.

Triplett arvab, et C muutub nüüdseks sarnaseks sellele, millega assembleri keel oli aastat tagasi. „C on uus assembler,“ ütleb ta. Nüüd otsivad arendajad uut kõrgema taseme keelt, mis mitte ainult ei lahenda C-s kogunenud probleeme, mis on juba lahendamatud, vaid pakub ka uusi muljetavaldavaid võimalusi. Selline keel peab olema piisavalt veenev, et julgustada arendajaid selle kasutusele võtma, olema ohutu, pakkuma automaatset mäluhaldust ja palju muud.
„Iga keel, mis tahab olla parem kui C, peab pakkuma palju rohkem kui lihtsalt puuferi ülevoolu kaitset, kui ta tõeliselt tahab saada veenval alternatiiviks. Arendajad on huvitatud kasutusmugavusest ja jõudlusest, koodi kirjutamisest, mis ei vaja selgitusi ja teeb rohkem tööd vähemate ridadega. Samuti tuleb lahendada turbeprobleemid. Kasutuse lihtsus ja jõudlus on lahutamatult seotud. Mida vähem koodi peate millegi saavutamiseks kirjutama, seda vähem on teil võimalusi turbeprobleemide tekkimiseks,“ selgitab Triplett.
Rust ja C võrdlus
Juba 2006. aastal alustas Graydon Hoare, Mozilla töötaja, Rusti kirjutamist isikliku projektina. 2009. aastal hakkas Mozilla Rusti arendamist oma vajaduste jaoks toetama ja laiendas meeskonda keele edasise arendamise jaoks.
Üks põhjusi, miks Mozilla uue keele vastu huvi tunneb, on see, et Firefoxi kood koosneb rohkem kui 4 miljonist C++ koodireast ning seal on palju kriitilisi haavatavusi. Rust loodi turvalisuse ja paralleelsuse nõudeid silmas pidades, muutes selle ideaalseks valikuks paljude Firefoxi komponentide ümberkirjutamiseks Quantum projekti raames, mille eesmärk on täielik brauseri arhitektuuri ümberehitus. Mozilla kasutab Rusti ka Servo arendamisel, HTML renderdamise mootoris, mis tulevikus asendab Firefoxi praeguse renderdamise mootori. Paljud muud ettevõtted, sealhulgas Microsoft, Google, Facebook, Amazon, Dropbox, Fastly, Chef, Baidu ja paljud teised, on hakanud Rusti oma projektides kasutama.
Rust lahendab ühe kõige olulisema C-keele probleemi. See pakub automaatset mälu haldamist, mistõttu arendajad ei pea iga objekti jaoks mäluruumi käsitsi eraldama ja seejärel vabastama. Mis eristab Rusti teistest kaasaegsetest keeltest, on see, et sellel ei ole prügikoristajat, mis automaatselt eemaldab mälust kasutamata objekte, ega ka täiendavat käituskeskkonda, nagu Java Runtime Environment Java jaoks. Selle asemel tugineb Rust omamise, laenamise, viidete ja eluea kontseptsioonidele. "Rustis on objekti kutsesüsteem, mis võimaldab määrata, kas objektit kasutab selle omanik või kas see on lihtsalt laenatud. Kui laenate objekti, jälgib compilaator seda ja garanteerib, et originaal jääb alles, kuni viitate sellele. Samuti hoolitseb Rust selle eest, et objekt eemaldataks mälust kohe pärast selle kasutamise lõppu, lisades vastava kutse koodi kompileerimise ajal ilma täiendava ajakuluta," ütleb Triplett.
Omaniku töö keskkonna puudumist saab pidada ka Rusti positiivseks omaduseks. Triplet usub, et keeled, mis töötavad selle kaudu, on süsteemse programmeerimise tööriistana keerulised. Nagu ta selgitab: „Te peate selles keskkonnas koodi käivitamiseks algatama, peate funktsioonide kutsumiseks kasutama seda keskkonda, ja see keskkond võib teie selja taga ootamatutel hetkedel täiendavat koodi käivitada.“
Samuti püüab Rust tagada ohutu paralleelse programmeerimise. Samad omadused, mis muudavad selle mälu jaoks ohutuks, jälgivad selliseid asju nagu see, milline objekt kuulub kummaleki lõime ja millised objektid võivad lõimede vahel liikuda ning millised vajavad lukustamist.
Kõik need omadused teevad Rustist piisavalt veenva, et arendajad valiksid selle uue süsteemse programmeerimise tööriistana. Kuid paralleelselt arvutamise seisukohalt jääb Rust veel C-le veidi alla.
Triplet kavatseb luua spetsiaalse töörühma, mis tegeleb Rusti vajalike funktsioonide rakendamisega, et see saaks täielikult tasanduda, ületada ja asendada C süsteemide programmeerimise valdkonnas. , mis on pühendatud tema ettekandele, teatas ta, et „FFI/C Parity grupp on loomise protsessis ja ei ole veel tööd alustada saanud”, kuid ta on valmis vastama igasugustele küsimustele ning tulevikus garanteerib, et avaldab lähituleviku plaane Rusti arendamiseks oma algatuse raames kõikidele huvilistele.
Võib eeldada, et kõigepealt keskendub FFI/C Parity grupp Rustis mitme töötluse toe parandamisele, BFLOAT16 toe rakendamisele, mis on uutes Intel Xeon Scalable protsessorites esinev ujuva koma sõnumite vorming, ning ka assembleri koodi sisestamise stabiliseerimisele.
Allikas: 3dnews.ru
