Programavimas

Pradėkite naudoti „Rust“ programuodami „Windows“

Ar „Microsoft“ galėtų pereiti nuo C, C ++ ir C # naudojimo į kitas kalbas? Neseniai paskelbtame „Microsoft Security Response Center“ (MSRC) tinklaraščio įraše buvo teigiama, kad ji gali ieškoti alternatyvų, siekdama sumažinti riziką savo kodui. Kaip pastebėjo pagrindinis MSRC saugumo inžinerijos vadovas Gavinas Thomasas, viena pagrindinių MSRC praneštų „Microsoft“ kodo klaidų priežasčių yra atminties sugadinimas, klaidos, leidžiančios perrašyti atmintį arba pasiekti saugomą atmintį.

Saugoma atmintis

Atminties saugumas ilgą laiką buvo svarbi problema, tačiau statistinis MSRC atliktas darbas rodo, kad problema niekur nedingsta. Turite daugybę įrankių, padedančių rašyti saugų kodą, pradedant paties „Microsoft“ saugaus kūrimo gyvavimo ciklu ir baigiant naujesnių, atmintyje saugių kalbų, tokių kaip C #, naudojimu. Tačiau šie metodai turi savo kompromisus: jų sukurtas kodas yra lėtesnis ir veikia aukštesniu lygiu nei C ++.

Tai nėra problema kliento nukreiptame kode. Nėra suvokimo skirtumo tarp „C ++ - develoepd“ vartotojo patirties ir „C #“ įdiegtos. Tačiau sistemos lygis, kodas, naudojamas operacinėms sistemoms ir įrenginių tvarkyklėms kurti, yra didelis skirtumas. Procesoriaus ciklai yra svarbūs, kai dirbate sistemos lygiu, ir, kaip Thomas savo tinklaraščio įraše pabrėžia, neapsaugotos kalbos, tokios kaip C ++ ir C, yra vieninteliai įrankiai, kurie istoriškai veikia tokiu lygiu.

Akivaizdu, kad atmintyje saugūs metodai, kuriuos naudoja aukštesnio lygio kalbos, neveikia sistemos lygiu. Daugelis problemų, kurios kankino „Microsoft“ abortuojantį „Longhorn“ projektą, kilo bandant sukurti visą OS .NET platformoje. Taigi, kaip mes galime suteikti atminties saugumą sistemos kūrimo pagrindams?

Pristatome Rust

Atsakymą pateikia naujos kartos sisteminės programavimo kalbos, pvz., „Go“ ir „Rust“, kalbos, kurių „Net“ dizainas yra atmintyje saugus ir kurių greitis yra C ir C ++. „Microsoft“ jau plačiai naudoja „Go“ „Azure“, nes tai yra kalba, kuria parašyta „Kubernetes“. Tačiau šie metodai dar nepasiekė „Windows“, kur C ++ vis dar yra sistemų programavimo karalius.

Savo tinklaraščio įraše Thomas pateikia argumentą, kaip naudoti „Mozilla“ „Rust“ kaip saugią „Windows“ sistemos kalbą. Tai įdomus pasiūlymas, kuris jau gavo vieną didelį įrodymą savo naudai: Kalbos dizaineris „Mozilla“ jau naudoja jį naujausiuose žiniatinklio naršyklės leidiniuose, kur valdo dabartinius ir naujos kartos „Mozilla“ atvaizdavimo variklius. Kiti dideli „Rust“ vartotojai yra „JavaScript“ modulio saugykla NPM, „Dropbox“ ir „Oracle“. Net „Microsoft“ jį jau naudoja, kai kuriuose „Azure IoT Edge“ įrankiuose yra „Rust“ kodas.

„Windows Rust“ kūrimo aplinkos nustatymas

Akivaizdi vieta pradėti nuo „Rust“ kūrimo yra „Visual Studio Code“. Savo plėtinių rinkoje galite rasti keletą plėtinių, kuriuose įdiegiamas „Rust“ kalbos serveris ir teikiama visa kalba palaikoma pagalba, taip pat įrankių, kaip kurti „Rust“ programas iš „Visual Studio Code“. Naudojau oficialų „Rust“ kalbos komandos „Rust“ plėtinį. Kiti įrankiai palaiko kodo fragmentus, kad būtų galima pradėti kurti, taip pat papildomus derinimo ir bandymo įrankius. Yra net įrankiai, skirti kurti jūsų kodo dokumentaciją. Verta įdiegti „Rust“ plėtinio paketą kaip „Visual Studio Code Ruse“ aplinkos dalį, nes tai prideda papildomų įrankių darbui su paties „Rust“ kūrimo įrankiais.

Pirmiausia turite įdiegti „Rust“ kompiliatorių ir „Cargo“ paketų tvarkyklę. Oficiali „Rust“ diegimo svetainė aptiks jūsų naudojamą „Windows“ versiją ir pateiks atitinkamą atsisiuntimą. Yra net instrukcijos, kaip įdiegti „Rust“ „Windows“ posistemėje, skirtoje „Linux“ (WSL), jei naudojate „WSL“ kaip „Unix“ kūrimo įrankių grandinės dalį. Paleidę „Rustup“ diegimo programą atsisiųsite kalbos komponentus ir nustatysite „Windows“ KELIS. Jūs gaunate galimybę pritaikyti diegimą, tačiau praktiškai geriausia sutikti su numatytaisiais.

Supratimas apie rūdis ir atminties saugumą

Jei užprogramavote C arba C ++, perėjimas prie „Rust“ yra gana lengvas. Kalbos yra labai panašios, nors būtent Rusto nuosavybės samprata ją saugo atmintyje. Nuosavybės teisė leidžia „Rust“ valdyti kintamųjų sritį, leidžiant jiems galioti tik esant apimčiai. Jei jie nenaudojami, jie nėra atmintyje. Kai kurie kintamieji yra tiesioginiai, nekintamos vertės, koduojamos jūsų kode. Tačiau sudėtingesni kintamųjų tipai gali reikalauti atminties, kai jie yra nustatyti, o procesas, reikalaujantis daugelio kitų kalbų, reikalauja aiškiai paskirstyti atmintį ir tada ją atlaisvinti, kai kintamasis ar objektas nebereikalingi. „Rust“ tai automatizuoja, valdydama atminties naudojimą kaip jos apimties valdymo dalį.

„Rust“ sukūrusi „Mozilla“ komanda labai apgalvojo atminties saugumą ir kompromisus, kurie gali įvykti saugioje aplinkoje. Rezultatas yra saugi ir greita kalba su įrankiais, kurie valdo ir atminties kaupus, ir kaupinius. Priskyrus vertę funkcijai, pasikeičia jos nuosavybės teisė, perkėlus ją iš vienos srities į kitą; panašus procesas valdo reikšmes, kurios grąžinamos iš funkcijos iškvietimo.

Nuosavybė yra sudėtinga sąvoka, tačiau ji yra svarbi. Tai apsaugo atmintį ir leidžia ją pakeisti tik funkcijoms, kurioms priklauso vertė, net jei naudojate nuorodą į kintamąjį. Kadangi „Rust“ laiko nuorodą kaip skolinančią kintamąjį, bandymas ją modifikuoti sukurs tik klaidą, nebent jūs ją paskelbsite kintama.

„Rust“ ateitis sistemoje „Windows“

Svarbu prisiminti, kad „Rust“ vis dar yra jauna kalba, o daugelio dalykų, kuriuos laikote savaime suprantamu dalyku „Windows“ kūrime, nėra. Nėra tiesioginės integracijos su „Win32“ ar kitais pagrindiniais „Windows SDK“, taip pat nerasite jokio „Windows“ GUI įrankių palaikymo neįdiegę papildomų bibliotekų. Tačiau tai nėra tiek daug klausimų, kaip galėtumėte pagalvoti: „Rust“, kaip ir „Go“, yra sistemų programavimo kalba. Tai žemo lygio įrankis, greitas ir saugus. Todėl jis idealiai tinka kuriant kodą, kuris manipuliuoja jūsų duomenimis, sugadina skaičius ir apdoroja masyvus. Užuot naudoję C ++ įprastas programas, kai dirbate su dideliu atminties kiekiu, naudokite „Rust“, kad sumažintumėte su atminties sugadinimu susijusią riziką.

Jei norite sukurti „GUI“ programas „Rust“, galite naudoti vieną iš kelių vartotojo sąsajų bibliotekų. Bene lengviausia naudoti „Kiss-ui“, palaikantį tiek „Windows“, tiek „Linux“ GUI kūrimą, su „Win32 API“ prieiga ir palaikymu tarp platformos veikiančiai GTK. Kitos bibliotekos prideda gilesnį „Win32“ API palaikymą.

Net jei „Microsoft“ nesibaigia tiesiogiai palaikanti „Rust“, bendruomenės palaikymas yra gausus. Nors surinkus visą įrankių grandinę vis tiek gali reikėti pasirinkti įvairius jums reikalingus elementus ir naudoti tokius įrankius kaip „Rustup“ jiems įdiegti, atrodo, kad „Visual Studio Code“ plėtinių ir plėtinių paketų pristatymas supaprastina procesą. Reguliarūs atnaujinimai rodo, kad tai labai gyvas projektas, kuriame dirba „Rust“ komanda ir daugybė trečiųjų šalių bendradarbių.

Pagrindinis atmintyje saugių kalbų vartojimo principas yra svarbus, ir tikrai gera matyti, kaip MSRC žmonės sprendžia šią problemą. Kol oficialiai neišleidžiama atmintyje saugi žemo lygio sistemų programavimo kalba, tikrai verta vieną kartą suteikti „Rust“. Jei „Microsoft“ tai pasirinks, būsite gerokai priekyje žaidimo.

Už „Windows“ ribų „Rust“ yra pagrindinė „WebAssembly“ kūrimo kalba, kuri turėtų padėti pristatyti daug galingesnes žiniatinklio programas būsimame „Chromium“ valdomame „Edge“ leidime - dar viena priežastis, dėl kurios jis turi būti atidus.

$config[zx-auto] not found$config[zx-overlay] not found