Programiranje

Začnite z Rustom v programiranju za Windows

Bi Microsoft lahko preusmeril uporabo C, C ++ in C # v druge jezike? Nedavna objava v spletnem dnevniku Microsoftovega centra za varnostni odziv (MSRC) je nakazala, da morda išče alternativne rešitve z namenom zmanjšanja tveganj za svojo kodo. Kot je Gavin Thomas, glavni vodja varnostnega inženiringa pri MSRC, ugotovil, da je eden glavnih vzrokov za napake v Microsoftovi kodi, o katerih se poroča MSRC, pokvarjenost pomnilnika, napake, ki omogočajo prepisovanje pomnilnika ali dostop do zaščitenega pomnilnika.

Varovanje spomina

Varnost spomina je že dolgo pomembno vprašanje, vendar statistično delo MSRC kaže, da težava ne izginja. Na voljo imate veliko orodij za pomoč pri pisanju varne kode, od Microsoftovega lastnega življenjskega cikla varnega razvoja do uporabe novejših jezikov, varnih za pomnilnik, kot je C #. Toda ti pristopi imajo svoje kompromise: koda, ki jo proizvajajo, je počasnejša in deluje na višji ravni kot C ++.

To ni problem za kodo, ki se sooča s strankami. Med uporabniško izkušnjo C ++ - develoepd in vgrajeno v C # ni zaznavne razlike. Toda na sistemski ravni, koda, ki se uporablja za izdelavo operacijskih sistemov in gonilnikov naprav, je velika razlika. Procesorski cikli so pomembni, ko delate na sistemski ravni, in kot poudarja Thomas v svojem zapisu v blogu, so nezaščiteni jeziki, kot sta C ++ in C, resnično edina orodja, ki v preteklosti delujejo na tej ravni.

Jasno je, da pomnilniško varni pristopi, ki jih uporabljajo jeziki na višji ravni, ne delujejo na sistemski ravni. Številne težave, ki so pestile Microsoftov neuspešen projekt Longhorn, so nastale zaradi poskusov izdelave celotnega OS na platformi .NET. Torej, kako lahko varnost spomina postavimo na temelje razvoja sistema?

Predstavljamo Rust

Odgovor prihaja z novo generacijo sistemskih programskih jezikov, kot sta Go in Rust, jeziki, ki imajo v spominu varno zasnovo .Net s hitrostjo C in C ++. Microsoft že veliko uporablja Go v Azureju, ker je to jezik, v katerem je zapisan Kubernetes. Toda ti pristopi še niso prišli do sistema Windows, kjer je C ++ še vedno kralj sistemskega programiranja.

Thomas v svojem zapisu na blogu utemeljuje uporabo Mozilline Rust kot varnega sistemskega jezika za Windows. To je zanimiv predlog, ki je že dobil en velik dokaz v svojo korist: oblikovalec jezikov Mozilla ga že uporablja v svojih najnovejših izdajah spletnega brskalnika, kjer poganja trenutne in naslednje generacije motorjev za upodabljanje Mozille. Drugi veliki uporabniki Rusta vključujejo skladišče modulov JavaScript NPM, Dropbox in Oracle. Celo Microsoft ga že uporablja s kodo Rust v nekaterih orodjih Azure IoT Edge.

Nastavitev razvojnega okolja za Windows Rust

Očitno mesto za začetek razvoja Rusta je Visual Studio Code. Na trgu Extensions lahko najdete več razširitev, ki namestijo jezikovni strežnik Rust in imajo popolno jezikovno podporo ter orodja za izdelavo aplikacij Rust iz kode Visual Studio. Uporabljam uradno razširitev Rust jezikovne ekipe Rust. Druga orodja nudijo podporo za delčke kode za razvoj zagon, pa tudi dodatna orodja za odpravljanje napak in preizkušanje. Obstajajo celo orodja za izdelavo dokumentacije za vašo kodo. Vredno je namestiti paket razširitev Rust kot del vašega okolja Visual Studio Code Ruse, saj to dodaja dodatno orodje za delo z lastnimi razvojnimi orodji Rusta.

Najprej morate namestiti prevajalnik Rust in upravitelja paketov Cargo. Uradno spletno mesto za namestitev Rusta bo zaznalo različico sistema Windows, ki jo uporabljate, in zagotovilo ustrezen prenos. Obstajajo celo navodila za namestitev Rusta na podsistem Windows za Linux (WSL), če uporabljate WSL kot del verige razvojnih orodij Unix. Zagon namestitvenega programa Rustup prenese jezikovne komponente in nastavi sistem Windows POT. Dobite možnost prilagajanja namestitve, vendar je v praksi najbolje sprejeti privzete nastavitve.

Razumevanje varnosti rje in spomina

Če ste programirali C ali C ++, je prehod na Rust razmeroma enostaven. Med jeziki je veliko podobnosti, čeprav je Rustov koncept lastništva tisto, zaradi česar je pomnilnik varen. Lastništvo omogoča Rustu, da upravlja obseg spremenljivk, tako da so lahko veljavne le, če so v obsegu. Če se ne uporabljajo, niso v spominu. Nekatere spremenljivke so dobesedne, nespremenljive vrednosti so trdo kodirane v vašo kodo. Toda bolj zapletene vrste spremenljivk lahko zahtevajo pomnilnik, ko so nastavljeni, postopek, ki v drugih mnogih jezikih zahteva, da pomnilnik izrecno dodelite in ga nato sprostite, ko spremenljivka ali predmet ni več potreben. Rust to avtomatizira, pri tem pa porabo pomnilnika obravnava kot del upravljanja obsega.

Skupina Mozille, ki je ustvarila Rust, je dobro razmislila o varnosti spomina in o kompromisih, ki se lahko zgodijo v varnem okolju. Rezultat je jezik, ki je hkrati varen in hiter, z orodji za upravljanje tako nizov pomnilnika kot kopičenja. Dodelitev vrednosti funkciji spremeni lastništvo in jo premakne iz enega obsega v drugega; podoben postopek upravlja vrednosti, ki se vrnejo iz klica funkcije.

Lastništvo je zapleten pojem, vendar je pomemben. Ščiti pomnilnik in omogoča, da ga spremenijo samo funkcije, ki imajo vrednost, tudi kadar uporabljate sklic na spremenljivko. Ker Rust referenco obravnava kot izposojo spremenljivke, bo poskus, da jo spremenite, ustvaril samo napako, razen če jo razglasite za spremenljivo.

Prihodnost Rusta v sistemu Windows

Pomembno je vedeti, da je Rust še vedno mlad jezik in veliko tega, kar se vam zdi samoumevno pri razvoju sistema Windows, ni. Ni neposredne integracije z Win32 ali drugimi jedri za Windows SDK in brez namestitve dodatnih knjižnic ne boste našli podpore za orodja GUI za Windows. Vendar to ni toliko težava, kot si morda mislite: Rust je, tako kot Go, sistemski programski jezik. Je orodje nizke ravni, hitro in varno. Zaradi tega je idealen za gradnjo kode, ki manipulira z vašimi podatki, drobljenjem številk in obdelavo nizov. Namesto da uporabljate rutine C ++, kjer delate z veliko količino pomnilnika, raje uporabite Rust in zmanjšajte tveganje, povezano s poškodbami pomnilnika.

Če želite v Rustu razviti aplikacije GUI, lahko uporabite eno od več knjižnic uporabniškega vmesnika. Morda je najpreprostejši za uporabo Kiss-ui, ki podpira razvoj GUI-jev za Windows in Linux, z dostopom do API-ja Win32 in podporo za platformo GTK. Druge knjižnice dodajajo globljo podporo za API Win32.

Tudi če Microsoft na koncu ne podpre Rusta, je na voljo veliko podpore skupnosti. Medtem ko je pri sestavljanju celotne verige orodij morda še vedno treba izbrati različne elemente, ki jih potrebujete, in za njihovo namestitev uporabiti orodja, kot je Rustup, se zdi, da je prihod razširitev in paketov razširitev Visual Studio Code poenostavljen postopek. Redne posodobitve kažejo, da gre v resnici za projekt v živo, pri katerem dela ekipa Rusta in množica neodvisnih sodelavcev.

Temeljno načelo uporabe jezikov, varnih za pomnilnik, je pomembno in zagotovo je dobro videti ljudi v MSRC, ki obravnavajo težavo. Dokler ne bo uradno izdana pomnilniško varnega programskega jezika za nizke ravni, je vsekakor vredno Rustu enkrat ponoviti. Če se bo Microsoft odločil za to, boste precej pred igro.

Zunaj sistema Windows je Rust ključni jezik za razvoj WebAssembly in bi moral pomagati pri zagotavljanju veliko zmogljivejših spletnih aplikacij v prihajajoči izdaji Edge s Chromium-om, kar je še en razlog za natančen pogled.

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