Ohjelmointi

Aloita Rustin käyttö Windows-ohjelmoinnissa

Voisiko Microsoft siirtyä käyttämään C-, C ++ - ja C # -tietoja muihin kieliin? Microsoft Security Response Centerin (MSRC) tuoreessa blogikirjoituksessa ehdotettiin, että se voisi hyvinkin etsiä vaihtoehtoja tavoitteena vähentää koodiin liittyviä riskejä. Kuten MSRC: n pääturvallisuustekniikan päällikkö Gavin Thomas totesi, että yksi MSRC: lle ilmoitettujen Microsoft-koodin virheiden tärkeimmistä syistä on muistin vioittuminen, virheet, jotka antavat muistin korvata tai käyttävät suojattua muistia.

Muistin turvaaminen

Muistiturvallisuus on ollut merkittävä kysymys pitkään, mutta MSRC: n tekemä tilastotyö osoittaa, että asia ei ole poistumassa. Sinulla on paljon työkaluja suojatun koodin kirjoittamiseen, Microsoftin omasta Secure Development Lifecycle -sovelluksesta aina uusempien muistin kannalta turvallisten kielten, kuten C #, käyttämiseen. Mutta näillä lähestymistavoilla on kompromisseja: niiden tuottama koodi on hitaampi ja toimii korkeammalla tasolla kuin C ++.

Se ei ole ongelma asiakaskoodissa. C ++ - develoepd -käyttökokemuksen ja C #: n sisäänrakennetun käyttökokemuksen välillä ei ole havaintoeroa. Mutta järjestelmätasolla, käyttöjärjestelmien ja laiteajurien rakentamiseen käytetyllä koodilla, on suuri ero. Suorittimen jaksoilla on merkitystä, kun työskentelet järjestelmätasolla, ja kuten Thomas blogikirjoituksessaan huomauttaa, suojaamattomat kielet, kuten C ++ ja C, ovat todellakin ainoat työkalut, jotka historiallisesti toimivat tällä tasolla.

On selvää, että korkeamman tason kielten käyttämät muistiturvalliset lähestymistavat eivät toimi järjestelmätasolla. Monet ongelmista, jotka kärsivät Microsoftin epäonnistuneesta Longhorn-projektista, johtuivat yrittämästä rakentaa koko käyttöjärjestelmä .NET-alustalle. Joten miten voimme tuoda muistin turvallisuuden järjestelmän kehittämisen perustalle?

Esittelyssä Rust

Vastaus sisältää uuden sukupolven järjestelmäohjelmointikielet, kuten Go ja Rust, kielet, joilla on .Net-muisti turvallinen muotoilu C: n ja C ++: n nopeudella. Microsoft käyttää Goa jo laajasti Azuressa, koska se on kieli, jolla Kubernetes kirjoitetaan. Mutta nämä lähestymistavat eivät ole vielä tienneet Windowsiin, jossa C ++ on edelleen järjestelmien ohjelmointikuningas.

Blogiviestissään Thomas esittää argumentin Mozillan Rustin käyttämisestä turvallisena järjestelmäkielenä Windowsille. Se on mielenkiintoinen ehdotus, joka on jo saanut yhden suuren todistuskohdan sen hyväksi: Kielisuunnittelija Mozilla käyttää sitä jo uusimmissa selainjulkaisuissaan, jossa se käyttää Mozillan nykyisiä ja seuraavan sukupolven renderointimoottoreita. Muita suuria Rust-käyttäjiä ovat muun muassa JavaScript-moduulivarasto NPM, Dropbox ja Oracle. Jopa Microsoft käyttää sitä jo, Rust-koodilla joissakin Azure IoT Edge -työkaluissa.

Windows Rust -kehitysympäristön määrittäminen

Ilmeinen paikka aloittaa Rust-kehityksellä on Visual Studio Code. Laajennusten markkinapaikalta löydät useita laajennuksia, jotka asentavat Rust-kielipalvelimen ja joihin sisältyy täysi kielituki, sekä työkaluja Rust-sovellusten rakentamiseen Visual Studio -koodista. Olen käyttänyt Rust-kielitiimin virallista Rust-laajennusta. Muut työkalut tarjoavat tukea koodinpätkille kehityksen aloittamiseksi, sekä muita virheenkorjaus- ja testityökaluja. Koodisi rakentamiseen on jopa työkaluja. Rust-laajennuspaketti kannattaa asentaa osana Visual Studio Code Ruse -ympäristöäsi, koska se lisää työkaluja Rustin omien kehitystyökalujen kanssa työskentelyyn.

Sinun on ensin asennettava Rust-kääntäjä ja Cargo-paketinhallinta. Virallinen Rust-asennussivusto tunnistaa käyttämäsi Windows-version ja tarjoaa asianmukaisen latauksen. Rustin asentamiseen Windows-alijärjestelmään Linuxiin (WSL) on jopa ohjeita, jos käytät WSL: ää osana Unix-kehitystyökaluketjua. Rustup-asennusohjelman suorittaminen lataa kielikomponentit ja asettaa Windowsin PATH. Saat mahdollisuuden mukauttaa asennusta, mutta käytännössä on parasta hyväksyä oletusasetukset.

Ruosteen ja muistin turvallisuuden ymmärtäminen

Jos ohjelmoit C: n tai C ++: n, siirtyminen ruosteeseen on suhteellisen helppoa. Kielien välillä on paljon samankaltaisuutta, vaikka Rustin omistuskäsite tekee siitä muistin turvallisen. Omistajuuden avulla Rust hallitsee muuttujien laajuutta, jolloin ne ovat kelvollisia vain laajuudessa. Jos niitä ei käytetä, niitä ei ole muistissa. Jotkut muuttujat ovat kirjaimia, muuttumattomia arvoja, jotka on koodattu koodissasi. Mutta monimutkaisemmat muuttujatyypit voivat pyytää muistia, kun ne on asetettu, prosessi, joka muilla monilla kielillä edellyttää nimenomaista varaamista muistille ja vapauttamista sitten, kun muuttujaa tai objektia ei enää tarvita. Ruoste automatisoi tämän, käsittelemällä muistin käyttöä osana laajuuden hallintaa.

Rustin luonut Mozillan tiimi on miettinyt syvällisesti muistin turvallisuutta ja turvallisessa ympäristössä tapahtuvia kompromisseja. Tuloksena on sekä turvallinen että nopea kieli, jonka työkalut hallitsevat sekä muistipinoja että kasoja. Arvon määrittäminen funktiolle muuttaa sen omistajuuden ja siirtää sen laajuudesta toiseen; vastaava prosessi hallitsee arvoja, jotka palautetaan funktion kutsusta.

Omistus on monimutkainen käsite, mutta se on tärkeä. Se suojaa muistia ja antaa vain arvon omistavien toimintojen muuttaa sitä, vaikka käyttäisit viittausta muuttujaan. Koska Rust käsittelee viittausta lainaajana muuttujaa, yrittää muokata sitä aiheuttaa vain virheen, ellet julista sen muuttuvaksi.

Rustin tulevaisuus Windowsissa

On tärkeää muistaa, että Rust on vielä nuori kieli, eikä paljoakaan sitä, mitä pidät itsestäänselvyytenä Windows-kehityksessä. Suoraa integraatiota Win32: n tai muiden Windows SDK: n ytimien kanssa ei ole, etkä löydä Windows-käyttöliittymän työkalujen tukea asentamatta uusia kirjastoja. Se ei kuitenkaan ole niin suuri asia kuin luulisi: Rust, kuten Go, on järjestelmien ohjelmointikieli. Se on matalan tason työkalu, nopea ja turvallinen. Tämä tekee siitä ihanteellisen rakennuskoodille, joka manipuloi tietojasi, murskaa numeroita ja käsittelee taulukoita. Sen sijaan, että käyttäisit C ++ -rutiineja, joissa työskentelet suurella muistimäärällä, käytä Rustia, mikä vähentää muistivirheisiin liittyvää riskiä.

Jos haluat kehittää graafisen käyttöliittymän sovelluksia Rustissa, sinulla on mahdollisuus käyttää yhtä useista käyttöliittymäkirjastoista. Ehkä helpoin käyttää on Kiss-ui, joka tukee sekä Windows- että Linux-käyttöliittymäkehitystä Win32-sovellusliittymän kanssa ja tukee alustojen välistä GTK: ta. Muut kirjastot lisäävät syvempää Win32-sovellusliittymän tukea.

Vaikka Microsoft ei lopulta tue Rustia suoraan, siellä on paljon yhteisön tukea. Vaikka koko työkaluketjun kokoaminen voi silti olla tarvetta valita tarvitsemasi elementit ja käyttää työkaluja, kuten Rustup, niiden asentamiseen, Visual Studio -koodilaajennusten ja laajennuspakettien saapuminen näyttää yksinkertaistavan prosessia. Säännölliset päivitykset osoittavat, että kyseessä on hyvin elävä projekti, jossa Rust-tiimi ja joukko ulkopuolisia avustajia työskentelee.

Muistin kannalta turvallisten kielten käytön periaate on tärkeä, ja on varmasti hyvä nähdä MSRC: n kansan käsittelevän ongelmaa. Kunnes muistiturvallisen matalan tason ohjelmointikielen julkaisu on virallista, Rustille kannattaa antaa kerran. Jos Microsoft valitsee sen, olet paljon edellä.

Windowsin ulkopuolella Rust on avainkieli WebAssembly-kehityksessä, ja sen pitäisi auttaa toimittamaan paljon tehokkaampia verkkosovelluksia tulevassa Chromium-käyttöisessä Edge-julkaisussa - toinen syy antaa sille huolellinen ilme.

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