Hiljuti toimunud avatud lähtekoodiga tehnoloogiate tipkohtumisel (Open Source Technology Summit — OSTS) , Intel'i juhtiv insener, rääkis sellest, et tema ettevõte on huvitatud Rust'i saavutamisest «pariteedis» endiselt domineeriva süsteemse ja madalama taseme arenduskeele C-ga. pealkirjaga «Intel ja Rust: süsteemitarkvaraprogrammeerimise tulevik» rääkis ta samuti süsteemitarkvaraprogrammeerimise ajaloost, kuidas C’st sai vaikimisi süsteemitarkvaraprogrammeerimise keel, millised võimalused Rust'il annavad sellele eelise C üle ja kuidas see suudab lähitulevikus täielikult asendada C selles valdkonnas.

Süsteemitarkvaraprogrammeerimine on tarkvara arendamine ja haldamine, mis teenib platvormina rakendatavade rakenduste loomist, tagades viimaste suhtluse protsessori, mäluga, sisendtseadmete ja võrguteenustega. Süsteemitarkvara loob spetsiaalse abstraktsiooni liideste kaudu, mis aitavad luua rakendustarkvara, süvenemata sellesse, kuidas «raud» tegelikult töötab.
Triplett määratleb süsteemitarkvaraprogrammeerimise kui «kõike, mis ei ole rakendus». See hõlmab selliseid asju nagu BIOS, püsivara, laadijad ja operatsioonisüsteemide tuumad, erinevad madala taseme sisseehitatud koodid ja ka virtuaalmasinate rakendused. Huvitav, et Triplett usub, et veebibrauser on samuti süsteemitarkvara, kuna brauser on ammu enam kui «lihtsalt programm», muutes selle iseseisvaks «platvormiks veebisaitide ja veebirakenduste jaoks».
Minevikus kirjutati enamik süsteemsetest programmidest, sealhulgas BIOS, laadijad ja püsivara, assembli keeles. 1960. aastatel alustati katsetusi kõrgetasemeliste keelte riistvara toe tagamiseks, mis viis selliste keelte nagu PL/S, BLISS, BCPL ja ALGOL 68 loomiseni.
Siis, 1970. aastatel lõi Dennis Ritchie C (C) programmeerimiskeele Unix operatsioonisüsteemi jaoks. B programmeerimiskeele alusel loodud C, mis ei toetanud isegi tüübusamist, oli täis võimsaid kõrgema taseme funktsioone, mis sobisid eriti hästi operatsioonisüsteemide ja draiverite kirjutamiseks. Mitmed UNIX-i komponendid, sealhulgas selle ydre, kirjutati lõpuks ümber C keeles. Hiljem kirjutati C keeles ka palju teisi süsteemiprogramme, sealhulgas Oracle andmebaas, suur osa Windowsi lähtekoodist ning Linux operatsioonisüsteem.
C sai selles osas tohutut toetamist. Kuid mis täpselt sundis arendajaid sellele üle minema? Triplett arvab, et arendajaid motiveerib eelmise programmeerimiskeelelt uuele üleminekuks see, et viimane peaks peamiselt pakkuma uusi funktsioone, ilma vanadest võimalustest loobumata.
Esiteks peab keel pakkuma „piisavalt muljetavaldavaid“ uusi funktsioone. „Ta ei saa olla natuke parem. Ta peab olema oluliselt parem, et õigustada inseneride vaeva ja aega, mis on vajalik üleminekuks,” selgitab ta. Assamblee keelega võrreldes oli C-l palju asju, mida ta pakkuda suutis. Ta toetas mingil määral ohutut tüübusamist, pakkus paremat ülekantavust ja efektiivsust kõrgema taseme konstruktsioonidega ning genereeris üldiselt oluliselt loetavamat koodi.
Teiseks peab keel toetama vanu võimalusi, mis tähendab, et C-le ülemineku loos pidid arendajad olema kindlad, et see on vähemalt sama funktsionaalne kui assamblee keel. Triplett selgitab: „Uus keel ei saa olla lihtsalt parem, ta peab olema ka mitte halvem“. Peale selle, et C oli kiirem ja toetas kõiki andmetüüpe, mida assamblee keel kasutada sai, oli tal ka see, mida Triplett nimetas „hädapääsuuks“, nimelt toetas ta enda sees assamblee keeles koodi lisamist.

Triplet usub, et C hakkab nüüd muutuma sarnaseks sellele, millisena assembleri keel oli palju aastaid tagasi. "C on uus assembler," ütleb ta. Praegu otsivad arendajad uut kõrgetasemelist keelt, mis ei lahendaks mitte ainult C akumuleerunud probleeme, mille parandamine ei ole enam võimalik, vaid pakuks ka uusi muljetavaldavaid võimalusi. Selline keel peab olema piisavalt veenev, et suunata arendajad selle peale üle minema, olema turvaline, pakkuma automaatset mäluhaldust ja palju muud.
"Iga keel, mis tahab olla parem kui C, peab pakkuma palju rohkem kui lihtsalt puhverülevoolu kaitset, kui ta tõeliselt tahab saada veenvaks alternatiiviks. Arendajad on huvitatud kasutusmugavusest ja tootlikkusest, koodi kirjutamisest, mis ei vaja selgitusi ja teeb rohkem tööd vähemate ridadega. Samuti tuleb lahendada turvalisuse probleemid. Kasutuslihtsus ja tootlikkus on lahutamatult seotud. Mida vähem koodi peate millegi saavutamiseks kirjutama, seda vähem on teil võimalusi, et teha turvalisuse või muude probleemidega seotud vigu," selgitab Triplet.
Rust ja C võrdlus
Juba 2006. aastal hakkas Graydon Hoare, Mozilla töötaja, kirjutama Rusti kui isiklikku projekti. 2009. aastal hakkas Mozilla Rusti arendamist sponsoreerima oma vajaduste jaoks ning laiendas meeskonda, et keele edasist arendamist toetada.
Üks põhjus, miks Mozilla uue keele suhtes huvi tundis, oli see, et Firefox oli kirjutatud rohkem kui 4 miljonis C++ koodireas ja tal oli üsna palju kriitilisi haavatavusi. Rust loodi turvalisuse ja paralleelsuse nõudmistega silmas pidades, mis teeb sellest ideaalse valiku paljude Firefoxi komponentide ümberkirjutamiseks Quantum projekti raames, mis on suunatud brauseri arhitektuuri täielikule ümberehitusse. Samuti kasutab Mozilla Rusti Servo, HTML-i renderdamise mootori arendamiseks, mis tulevikus asendab praeguse Firefoxi renderdamise mootori. Paljud teised ettevõtted on hakanud Rusti oma projektides kasutama, sealhulgas Microsoft, Google, Facebook, Amazon, Dropbox, Fastly, Chef, Baidu ja paljud teised.
Rust lahendab ühe kõige olulisema probleem keeles C. See pakub automaatset mälu haldamist, seega ei pea arendajad iga objekti jaoks rakenduses käsitsi mälu eraldama ja seejärel vabastama. Mis eristab Rusti teistest kaasaegsetest keeltest, on see, et sellel ei ole prügikogumise mehhanismi, mis automaatselt eemaldab mälast kasutamata objekte, ega ka vajalikku töökeskkonda, nagu näiteks Java Runtime Environment Java jaoks. Selle asemel on Rustil omamise, laenutamise, viidete ja eluea kontseptsioonid. "Rustis on objekti kutsumise deklareerimise süsteem, mis võimaldab määrata, kas selle omanik kasutab seda või tegu on lihtsalt laenutamisega. Kui te lihtsalt laenutate objekti, jälgib kompilaator seda ja garanteerib, et originaal jääb paika, kuni te sellele viitate. Ja samuti jälgib Rust, et objekt eemaldatakse mälust kohe pärast selle kasutamise lõpetamist, lisades vastava kutse koodi kompilatsiooni ajal ilma ajaliste lisakuludeta," räägib Triplett.
Oma töökeskkonna puudumist võib samuti pidada Rusti positiivseks omaduseks. Triplett usub, et keeli, mis töötavad selle kaudu, on keeruline kasutada süsteemsete programmide koostamiseks. Nagu ta selgitab: "Te peate enne mis tahes koodi käivitamist selle töökeskkonna initsialiseerima, te peate selle töökeskkonna funktsioonide kutsubes kasutama, ja ise töökeskkond võib teie selja taga ootamatutel hetkedel käivitada täiendavat koodi."
Rust püüab ka tagada turvalise paralleelse programmeerimise. Samad funktsioonid, mis muudavad selle mälu jaoks turvaliseks, jälgivad selliseid asju nagu see, millisele lõime kuulub milline objekt ja millised objektid võivad voogude vahel liikuda, ning millised vajavad lukustamist.
Need kõik funktsioonid muudavad Rusti piisavalt veenvaks, et arendajad saaksid valida selle uue tööriistana süsteemsete programmide kirjutamiseks. Kuid paralleelsete arvutuste osas jääb Rust veel veidi maha C-st.
Triplet on loodud spetsiaalne töögrupp, mis tegeleb Rusti vajalike funktsioonide rakendamisega, et see suudaks täielikult võrdsuda, ületada ja asendada C süsteemide programmeerimise vallas. , mis on pühendatud tema ettekandele, ütles ta, et "FFI/C Parity grupp on loomisel ja ei ole veel alustatud", kuid ta on valmis vastama igasugustele küsimustele ning avaldab tulevikus kindlasti lähituleviku plaanid Rusti arendamise kohta oma algatuste raames kõigile huvilistele.
Võib eeldada, et kõigepealt tegeleb FFI/C Parity grupp Rusti mitme lõime toe parandamisega, BFLOAT16 toe rakendamisega, uute Intel Xeon Scalable protsessorite kasutusele võetud ujuvpunktiliste numbrite esitusformaadiga, samuti Assembliga koodi lisamise stabiilsuse tagamisega.
Allikas: 3dnews.ru
