Ohjelmointi

Mikä on ruoste? Turvallinen, nopea ja helppo ohjelmistokehitys

Nopea, turvallinen, helppo kirjoittaa - valitse kaksi. Se on ollut ohjelmistokehityksen tila jo pitkään. Kielet, jotka korostavat mukavuutta ja turvallisuutta, ovat yleensä hitaita (kuten Python). Kielet, jotka korostavat suorituskykyä, ovat yleensä vaikeita työskennellä ja helposti puhaltaa jalat (kuten C ja C ++).

Voidaanko kaikki nämä kolme ominaisuutta toimittaa yhdellä kielellä? Vielä tärkeämpää, voitko saada maailman toimimaan sen kanssa? Alun perin Graydon Hoaren luoma ja Mozilla Researchin tällä hetkellä tukema Rust-kieli on yritys tehdä juuri nämä asiat. (Google Go -kielellä on samanlaisia ​​tavoitteita, mutta Rust pyrkii tekemään suorituskykyyn mahdollisimman vähän myönnytyksiä.)

Liittyvä video: Turvallisempien ohjelmistojen kehittäminen Rustin kanssa

Nopea nopeasti uudella tulokkaalla Rust, joka on suunniteltu luomaan nopeita, järjestelmätason ohjelmistoja. Tämä kahden minuutin animoitu selitin osoittaa, kuinka Rust ohittaa muistin ja hallinnan tuskalliset ohjelmointikysymykset.

Ruosteen on tarkoitus olla nopea, turvallinen ja kohtuullisen helppo ohjelmoida. Se on tarkoitettu myös käytettäväksi laajasti eikä vain päätyä uteliaisuuteen tai kielten arvontaan. Hyviä syitä on sellaisen kielen luomiseen, jossa turvallisuus istuu tasavertaisesti nopeuden ja kehitystehon kanssa. Loppujen lopuksi on olemassa valtava määrä ohjelmistoja - joista osa ajaa kriittistä infrastruktuuria - jotka on rakennettu kielillä, joissa turvallisuus ei ollut ensimmäinen huolenaihe.

Ruosteen ohjelmointikielen edut

Rust alkoi Mozilla-tutkimusprojektina, jonka tarkoituksena oli osittain täydentää Firefox-selaimen avainkomponentteja. Muutama keskeinen syy sai aikaan päätöksen: Firefox ansaitsi hyödyntää paremmin nykyaikaisia, monisydämisiä suorittimia; ja selainten pelkkä läsnäolo tarkoittaa, että niiden on oltava turvallisia käyttää.

Mutta näitä etuja tarvitsevat kaikki ohjelmistot, ei vain selaimet, minkä vuoksi Rust kehittyi kieliprojektiksi selainprojektista. Ruosteen turvallisuus, nopeus ja helppokäyttöisyys saavutetaan seuraavilla ominaisuuksilla.

Ruoste on nopeaa

Ruostekoodi kääntyy alkuperäiseksi konekoodiksi useilla alustoilla. Binaarit ovat itsenäisiä, ilman ajonaikaa, ja luodun koodin on tarkoitus toimia yhtä hyvin kuin vertailukelpoinen koodi, joka on kirjoitettu C- tai C ++ -koodilla.

Ruoste on turvallinen muistissa

Rust ei koota ohjelmia, jotka yrittävät turvata muistin käyttöä. Suurin osa muistivirheistä löydetään ohjelman ollessa käynnissä. Rustin syntaksin ja kielen metaforat varmistavat, että muilla kielillä yleiset muistiin liittyvät ongelmat - tyhjät tai riippuvat osoittimet, tietokilpailut ja niin edelleen - eivät koskaan tuota sitä tuotantoon. Kääntäjä ilmoittaa nämä ongelmat ja pakottaa ne korjaamaan ennen ohjelman koskaan suorittamista.

Ruoste on matalaa

Ruosti hallitsee muistin hallintaa tiukkojen sääntöjen avulla. Rustin muistinhallintajärjestelmä ilmaistaan ​​kielen syntaksissa kutsutun metaforan avulla omistusoikeus. Minkä tahansa annetun kielen arvon voi "omistaa" tai hallita ja käsitellä vain yksi muuttuja kerrallaan.

Tapa, jolla omistusoikeus siirretään objektien välillä, on kääntäjän tiukasti hallinnassa, joten ajon aikana ei ole yllätyksiä muistin kohdennusvirheiden muodossa. Omistusmenetelmä tarkoittaa myös sitä, ettei roskakorilla tapahtuvaa muistinhallintaa ole, kuten Go- tai C # -kielillä. (Se antaa myös Rustille uuden suorituskyvyn.) Rust-ohjelman jokainen muistipala seurataan ja vapautetaan automaattisesti omistusmetaforan kautta.

Ruoste on joustavaa

Ruosteen avulla voit elää vaarallisesti tarvittaessa. Ruosteen turvallisuudet voidaan osittain keskeyttää, jos sinun on käsiteltävä muistia suoraan, kuten raaka osoitin à la C / C ++: sta. Avainsana on osittain, koska Rustin muistin turvallisuutta ei voida koskaan poistaa käytöstä kokonaan. Silloin sinun ei tarvitse melkein koskaan irrottaa turvavöitä yleiseen käyttöön, joten lopputulos on oletuksena turvallisempi ohjelmisto.

Ruostetta on helppo käyttää

Mikään Rustin turvallisuus- ja eheysominaisuuksista ei tuota paljoa, jos niitä ei käytetä. Siksi Rustin kehittäjät ja yhteisö ovat yrittäneet tehdä kielestä mahdollisimman hyödyllisen ja tervetulleeksi uusille tulokkaille.

Kaikki mitä tarvitaan Rust-binäärien tuottamiseen, on samassa paketissa. Ulkoisia kääntäjiä, kuten GCC, tarvitaan vain, jos kokoat muita komponentteja Rust-ekosysteemin ulkopuolella (kuten C-kirjastoa, jonka koot lähteestä). Microsoft Windows -käyttäjät eivät ole myöskään toisen luokan kansalaisia; Rust-työkaluketju on siellä yhtä kykenevä kuin Linuxissa ja MacOS: issa.

Rust on monitasoinen

Rust toimii kaikilla kolmella tärkeimmällä alustalla: Linux, Windows ja MacOS. Toisia tuetaan näiden kolmen lisäksi. Jos haluat ristikokoella, tai tuota binaareja eri arkkitehtuurille tai alustalle kuin tällä hetkellä käyttämällesi, mukana on vähän enemmän työtä, mutta yksi Rustin yleisistä tehtävistä on minimoida tällaiseen työhön tarvittava raskas nosto. Vaikka Rust toimii suurimmalla osalla nykyisistä alustoista, sen luojien ei ole tarkoitus saada Rust kokoamaan ehdottomasti kaikkialla - missä tahansa alustalla, joka on suosittua, ja missä heidän ei tarvitse tehdä turhia kompromisseja.

Rustilla on tehokkaita kieliominaisuuksia

Harvat kehittäjät haluavat aloittaa työn uudella kielellä, jos heidän mielestään siinä on vähemmän tai heikompia ominaisuuksia kuin ne, joihin he ovat tottuneet. Rustin äidinkielen ominaisuudet verrataan myönteisesti C ++: n kaltaisilla kielillä: Makrot, geneeriset tiedot, kuvien sovitus ja sommittelu (ominaisuuksien kautta) ovat kaikki Rustin ensimmäisen luokan kansalaisia.

Rustilla on hyödyllinen vakiokirjasto

Yksi osa Rustin suurempaa tehtävää on kannustaa C- ja C ++ -kehittäjiä käyttämään Rustia näiden kielten sijasta aina kun mahdollista. Mutta C- ja C ++ -käyttäjillä on kunnollinen vakiokirjasto - he haluavat pystyvänsä käyttämään kontteja, kokoelmia ja iteraattoreita, suorittamaan merkkijonon manipulaatioita, hallitsemaan prosesseja ja ketjutusta, suorittamaan verkko- ja tiedosto-I / O: ta ja niin edelleen. Rust tekee kaiken tämän ja paljon muuta tavallisessa kirjastossa. Koska Rust on suunniteltu monitasoiseksi, sen vakiokirjasto voi sisältää vain asioita, jotka voidaan siirtää luotettavasti alustojen yli. Alustakohtaiset toiminnot, kuten Linuxin epoll, on tuettava kolmansien osapuolten kirjastojen, kuten libc, mio ​​tai tokio, toimintojen kautta.

Rustia on myös mahdollista käyttää ilman sen vakiokirjastoa. Yksi yleinen syy siihen on rakentaa binäärejä, joilla ei ole alustariippuvuuksia - esim. Sulautettu järjestelmä tai käyttöjärjestelmän ydin.

Rustilla on monia kolmansien osapuolten kirjastoja tai "laatikoita"

Yksi kielen hyödyllisyyden mittari on se, kuinka paljon sillä voidaan tehdä kolmansien osapuolten ansiosta. Cargo, Rust-kirjastojen virallinen arkisto (nimeltään "laatikot"), sisältää noin kymmenentuhatta laatikkoa. Terve määrä niistä on API-sidoksia yleisiin kirjastoihin tai kehyksiin, joten Rustia voidaan käyttää toimivana kielivaihtoehtona näiden kehysten kanssa. Rust-yhteisö ei kuitenkaan vielä tarjoa yksityiskohtaista laatikkoa tai luokittelua laatikoista niiden yleisen laadun ja hyödyllisyyden perusteella, joten et voi kertoa, mikä toimii, kokeilematta itse itseäsi tai äänestämättä yhteisöä.

Rustilla on hyvä IDE-tuki

Jälleen harvat kehittäjät haluavat omaksua kielen, jonka valitsemassa IDE: ssä on vain vähän tai ei ollenkaan tukea. Siksi Rust esitteli äskettäin Rust Language Server -palvelimen, joka tarjoaa suoraa palautetta Rust-kääntäjältä IDE: ille, kuten Microsoft Visual Studio Code.

Ruosteen ohjelmointikielen haitat

Kaikkien houkuttelevien, tehokkaiden ja hyödyllisten ominaisuuksiensa lisäksi Rustilla on myös haittapuolensa. Osa näistä esteistä laukaisee uudet "ruosteiset" (kuten Rust-fanit kutsuvat toisiaan) ja vanhat kädet.

Ruoste on uusi

Ruoste on edelleen nuori kieli, joka on toimittanut 1.0-version vasta vuonna 2015. Joten vaikka suuri osa ydinkielen syntaksista ja toiminnallisuudesta on heikentynyt, monet muut asiat sen ympärillä ovat edelleen sujuvia.

Esimerkiksi asynkroniset operaatiot eivät edelleenkään ole edustettuina kielen syntaksissa. Asynkronointitoimintojen toteuttaminen on käynnissä asynkronoitu ja odottaa avainsanat.

Ruostetta on vaikea oppia

Jos jokin Rustin asia on kaikkein ongelmallisin, on kuinka vaikeaa voi olla Rustin metaforojen nappaaminen. Omistus, lainanotto ja Rustin muu muistinhallinta ovat suunnitelmia kaikki ensimmäistä kertaa. Monilla aloittelijoiden Rust-ohjelmoijilla on yhteinen siirtymisrituaali, joka "taistelee lainatarkastajaa" vastaan ​​ja jossa he saavat omakohtaisesti selville kuinka huolellinen kääntäjä pitää vaihtuvien ja muuttumattomien asioiden pitämistä erillään.

Ruoste on monimutkainen

Osa vaikeuksista johtuu siitä, kuinka Rustin metaforat tuottavat tarkemman koodin muihin kieliin verrattuna. Esimerkiksi merkkijono ketjutus Rustissa ei ole aina yhtä suoraviivaista kuin merkkijono1 + merkkijono2. Yksi esine voi olla muuttuva ja toinen muuttumaton. Rust on taipuvainen vaatimaan, että ohjelmoija kertoo kuinka käsitellä tällaisia ​​asioita sen sijaan, että annettaisi kääntäjän arvailla.

Toinen esimerkki: kuinka Rust ja C / C ++ toimivat yhdessä. Suurta osaa ajasta Rustia käytetään liittämään olemassa oleviin kirjastoihin, jotka on kirjoitettu C- tai C ++ -muodolla. harvat C- ja C ++ -projektit kirjoitetaan uudestaan ​​tyhjästä Rust. (Ja kun he ovat, heillä on taipumus kirjoittaa uudelleen vähitellen.)

Rust kielikartta

Rust-tiimi on tietoinen monista näistä asioista ja pyrkii parantamaan niitä. Esimerkiksi Rustin työskentelemisen helpottamiseksi C: n ja C ++: n kanssa Rust-tiimi tutkii, laajennetaanko projekteja, kuten bindgen, joka luo automaattisesti Rust-sidokset C-koodiin. Tiimillä on myös suunnitelmia tehdä lainanotosta ja elinaikasta joustavampaa ja helpommin ymmärrettävää.

Silti Rust onnistuu saavuttamaan tavoitteensa tarjota turvallinen, samanaikainen ja käytännöllinen järjestelmäkieli tavalla, jota muut kielet eivät tee, ja tehdä se tavalla, joka täydentää kehittäjien jo toimintaa.

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