Započnite s Rustom u programiranju za Windows

Može li se Microsoft prebaciti sa svoje upotrebe C, C ++ i C # na druge jezike? Nedavni post na blogu iz Microsoftovog centra za sigurnosni odgovor (MSRC) sugerirao je da bi mogao tražiti alternative s ciljem smanjenja rizika za svoj kôd. Kao što je Gavin Thomas, glavni menadžer sigurnosnog inženjeringa u MSRC-u, primijetio da je jedan od glavnih uzroka grešaka u Microsoftovom kodu prijavljenih MSRC-u oštećenje memorije, greške koje omogućuju prepisivanje memorije ili pristup onome što bi trebalo biti zaštićeno.

Čuvanje memorije

Sigurnost memorije važan je problem već dugo vremena, ali statistički rad MSRC-a pokazuje da problem ne nestaje. Imate puno alata za pomoć u pisanju sigurnog koda, od Microsoftovog vlastitog životnog ciklusa sigurnog razvoja do korištenja novijih jezika koji su sigurni za memoriju poput C #. Ali ti pristupi imaju svojih kompromisa: kôd koji proizvode je sporiji i radi na višoj razini od C ++.

To nije problem za kôd usmjeren na kupca. Ne postoji perceptivna razlika između korisničkog iskustva C ++ - develoepd i ugrađenog u C #. Ali na razini sustava, kod koji se koristi za izgradnju operativnih sustava i upravljačkih programa uređaja, postoji velika razlika. Procesorski ciklusi bitni su kada radite na sistemskoj razini, a kao što Thomas ističe u svom blogu, nezaštićeni jezici poput C ++ i C zaista su jedini alati koji u povijesti rade na toj razini.

Jasno je da pristupi zaštićeni memorijom koje koriste jezici više razine ne rade na razini sustava. Mnogo problema koji su mučili Microsoftov neuspješni projekt Longhorn nastali su pokušajem izgradnje cijelog OS-a na .NET platformi. Pa kako možemo sigurnost sigurnosti usmjeriti u temelje razvoja sustava?

Predstavljamo Rust

Odgovor dolazi s novom generacijom programskih jezika poput Go i Rust, jezicima koji imaju memorijski siguran dizajn .Net-a brzinom C i C ++. Microsoft već uvelike koristi Go u Azureu, jer je to jezik na kojem je napisan Kubernetes. No, ovi pristupi još nisu ušli u sustav Windows, gdje je C ++ još uvijek kralj sistemskog programiranja.

U svom postu na blogu, Thomas iznosi argument za korištenje Mozilline Rust kao sigurnog sistemskog jezika za Windows. Zanimljiv je prijedlog, i to onaj koji je već dobio jedan veliki dokaz u svoju korist: dizajner jezika Mozilla već ga koristi u svojim najnovijim izdanjima web preglednika, gdje pokreće Mozillinu trenutnu i novu generaciju mehanizama za prikazivanje. Ostali veliki korisnici Rusta uključuju spremište JavaScript modula NPM, Dropbox i Oracle. Čak ga i Microsoft već koristi, s Rust kodom u nekim od svojih alata Azure IoT Edge.

Postavljanje razvojnog okruženja za Windows Rust

Očito mjesto za početak razvoja Rust-a je Visual Studio Code. Na njegovom tržištu proširenja možete pronaći nekoliko proširenja koja instaliraju Rust Language Server i koja imaju punu jezičnu podršku, kao i alate za izgradnju vaših aplikacija Rust iz Visual Studio Code. Koristim službeno proširenje Rust jezičnog tima Rust. Ostali alati pružaju podršku za isječke koda za razvoj kickstart-a, kao i dodatne alate za ispravljanje pogrešaka i testiranje. Postoje čak i alati za izradu dokumentacije za vaš kôd. Vrijedno je instalirati paket proširenja Rust kao dio vašeg okruženja Visual Studio Code Ruse, jer to dodaje dodatni alat za rad s vlastitim razvojnim alatima Rusta.

Prvo trebate instalirati kompajler Rust i upravitelj paketa Cargo. Službeno web mjesto za instalaciju Rusta otkrit će verziju sustava Windows koju koristite i pružiti odgovarajuće preuzimanje. Postoje čak i upute za instalaciju Rusta na Windows podsustav za Linux (WSL), ako WSL koristite kao dio lanca razvojnih alata Unixa. Pokretanje instalacijskog programa Rustup preuzima jezične komponente i postavlja Windows PATH . Dobivate mogućnost prilagodbe instalacije, ali u praksi je najbolje prihvatiti zadane postavke.

Razumijevanje zaštite od hrđe i memorije

Ako ste programirali C ili C ++, prijelaz na Rust relativno je jednostavan. Postoji mnogo sličnosti između jezika, premda je Rustov koncept vlasništva taj koji ga čini memorijski sigurnim. Vlasništvo omogućuje Rustu da upravlja opsegom varijabli, omogućujući im da budu valjane samo dok su u opsegu. Ako se ne koriste, nisu u sjećanju. Neke su varijable literalne, nepromjenjive vrijednosti tvrdo kodirane u vaš kôd. Ali složeniji tipovi varijabli mogu zahtijevati memoriju kad su postavljene, proces koji na drugim mnogim jezicima zahtijeva da eksplicitno dodijelite memoriju i oslobodite je kad varijabla ili objekt više nisu potrebni. Rust to automatizira, rukujući upotrebom memorije kao dijelom upravljanja opsegom.

Tim u Mozilli koji je stvorio Rust duboko je razmišljao o sigurnosti pamćenja i kompromisima koji se mogu dogoditi u sigurnom okruženju. Rezultat je jezik koji je i siguran i brz, s alatima koji upravljaju i hrpama memorije i hrpama. Dodjeljivanje vrijednosti funkciji mijenja njezino vlasništvo, premještajući je iz jednog opsega u drugi; sličan postupak upravlja vrijednostima koje se vraćaju iz poziva funkcije.

Vlasništvo je složen koncept, ali važan. Štiti memoriju i dopušta da je mijenjaju samo funkcije koje posjeduju vrijednost, čak i kada koristite referencu na varijablu. Budući da Rust referencu tretira kao posuđivanje varijable, pokušaj njezine izmjene generirat će samo pogrešku, osim ako je ne proglasite promjenjivom.

Budućnost Rusta u sustavu Windows

Važno je imati na umu da je Rust još uvijek mlad jezik i da ono što uzimate zdravo za gotovo u razvoju Windows-a nema. Ne postoji izravna integracija s Win32 ili drugim osnovnim Windows SDK-ovima i nećete pronaći podršku za Windows GUI alate bez instaliranja dodatnih knjižnica. Međutim, to nije toliko važno koliko biste mogli pomisliti: Rust je, poput Goa, sistemski programski jezik. To je alat na niskoj razini, brz i siguran. To ga čini idealnim za izgradnju koda koji manipulira vašim podacima, drobljenjem brojeva i obradom nizova. Umjesto da upotrebljavate C ++ rutine gdje radite s velikim količinama memorije, umjesto toga upotrijebite Rust, smanjujući rizik povezan s oštećenjem memorije.

Ako želite razvijati GUI aplikacije u Rustu, imate mogućnost korištenja jedne od nekoliko UI knjižnica. Možda je najjednostavniji za korištenje Kiss-ui, koji podržava razvoj Windows GUI-a i Linux-a, s pristupom Win32 API-ju, kao i podršku za višeplatformni GTK. Ostale knjižnice dodaju dublju podršku za Win32 API.

Čak i ako Microsoft na kraju ne podrži izravno Rusta, ima puno podrške zajednice. Iako je sastavljanje cjelovitog lanca alata još uvijek stvar odabira različitih elemenata koji su vam potrebni i korištenja alata poput Rustupa za njihovu instalaciju, dolazak proširenja i paketa proširenja Visual Studio Code čini se kako bi pojednostavio postupak. Redovita ažuriranja pokazuju da je ovo projekt uživo, na kojem rade Rust tim i mnoštvo nezavisnih suradnika.

Temeljno načelo upotrebe jezika koji su zaštićeni memorijom važan je i svakako je dobro vidjeti ljude koji rade na MSRC-u kako rješavaju problem. Sve dok ne bude službeno objavljeno memorijski sigurno programsko jeziko niske razine, zasigurno se isplati još jednom dati Rustu. Ako je Microsoft odluči, bit ćete daleko ispred igre.

Izvan Windows-a, Rust je ključni jezik za razvoj WebAssembly-a i trebao bi pomoći u isporuci mnogo snažnijih web-aplikacija u nadolazećem izdanju Edgea na Chromium-u - još jedan razlog za pažljiv pogled.