Programmering

Hvad er rust? Sikker, hurtig og nem softwareudvikling

Hurtig, sikker, let at skrive - vælg to. Det har været tilstanden med softwareudvikling i lang tid nu. Sprog, der understreger bekvemmelighed og sikkerhed, er ofte langsomme (som Python). Sprog, der understreger ydeevne, har tendens til at være vanskelige at arbejde med og let at sprænge dine fødder med (som C og C ++).

Kan alle disse tre attributter leveres på et enkelt sprog? Mere vigtigt, kan du få verden til at arbejde med det? Rust-sproget, oprindeligt oprettet af Graydon Hoare og i øjeblikket sponsoreret af Mozilla Research, er et forsøg på at gøre netop disse ting. (Google Go-sproget har lignende ambitioner, men Rust har til formål at give så få indrømmelser til ydeevne som muligt.)

Relateret video: Udvikling af sikrere software med Rust

Kom hurtigt i gang med nybegynder Rust, der er designet til at oprette hurtig software på systemniveau. Denne animerede forklarer på to minutter viser, hvordan Rust omgår de irriterende programmeringsproblemer med hukommelse og styring.

Rust er beregnet til at være hurtig, sikker og med rimelighed let at programmere i. Den er også beregnet til at blive brugt bredt og ikke bare ende som en nysgerrighed eller en også kørt i sprogkonkurrencen. Der er mange gode grunde til at skabe et sprog, hvor sikkerhed sidder på lige fod med hastighed og udviklingskraft. Når alt kommer til alt er der en enorm mængde software - hvoraf nogle driver kritisk infrastruktur - bygget med sprog, hvor sikkerhed ikke var det første problem.

Rust programmeringssprog fordele

Rust startede som et Mozilla-forskningsprojekt, der delvis skulle genimplementere nøglekomponenter i Firefox-browseren. Nogle få vigtige årsager kørte denne beslutning: Firefox fortjente at gøre bedre brug af moderne processorer med flere kerner; og den rene allestedsnærværende webbrowsere betyder, at de skal være sikre at bruge.

Men disse fordele er nødvendige af al software, ikke kun browsere, hvorfor Rust udviklede sig til et sprogprojekt fra et browserprojekt. Rust opnår sin sikkerhed, hastighed og brugervenlighed gennem følgende egenskaber.

Rust er hurtig

Rustkode kompileres til indbygget maskinkode på tværs af flere platforme. Binære filer er selvstændige uden kørselstid, og den genererede kode er beregnet til at udføre såvel som sammenlignelig kode skrevet i C eller C ++.

Rust er hukommelsessikkert

Rust kompilerer ikke programmer, der forsøger usikker hukommelsesforbrug. De fleste hukommelsesfejl opdages, når et program kører. Rusts syntaks og sprogmetaforer sikrer, at almindelige hukommelsesrelaterede problemer på andre sprog - nul eller hængende markører, dataløb osv. - aldrig gør det til produktion. Kompilatoren markerer disse problemer og tvinger dem til at blive rettet, inden programmet nogensinde kører.

Rust er lavt overhead

Rust styrer hukommelsesstyring via strenge regler. Rusts hukommelsesstyringssystem udtrykkes i sprogets syntaks gennem en kaldet metafor ejendomsret. Enhver given værdi på sproget kan "ejes" eller holdes og manipuleres kun af en enkelt variabel ad gangen.

Måden, hvorpå ejerskab overføres mellem objekter, styres strengt af compileren, så der er ingen overraskelser ved kørsel i form af hukommelsesallokeringsfejl. Ejerskabsmetoden betyder også, at der ikke er nogen affaldsindsamlet hukommelsesadministration, som på sprog som Go eller C #. (Det giver også Rust endnu et præstationsforøg.) Hver bit hukommelse i et Rust-program spores og frigives automatisk gennem ejerskabsmetaforen.

Rust er fleksibel

Rust lader dig leve farligt, hvis du har brug for det, til et punkt. Rusts sikkerhedsforhold kan delvist suspenderes, hvor du har brug for at manipulere hukommelsen direkte, f.eks. Ved at henvise en rå pointer à la C / C ++. Nøgleordet er til dels, fordi Rusts hukommelsessikkerhedsoperationer aldrig kan deaktiveres fuldstændigt. Selv da behøver du næsten aldrig at tage sikkerhedsselen af ​​til almindelige brugssager, så slutresultatet er software, der er sikrere som standard.

Rust er let at bruge

Ingen af ​​Rusts sikkerheds- og integritetsfunktioner tilføjer for meget, hvis de ikke bruges. Derfor har Rusts udviklere og samfund forsøgt at gøre sproget så nyttigt og indbydende som muligt for nyankomne.

Alt, hvad der er nødvendigt for at producere Rust-binære filer, kommer i samme pakke. Eksterne kompilatorer, som f.eks. GCC, er kun nødvendige, hvis du kompilerer andre komponenter uden for Rust-økosystemet (f.eks. Et C-bibliotek, som du kompilerer fra kilden). Microsoft Windows-brugere er heller ikke andenklasses borgere; Rust-værktøjskæden er lige så dygtig der som den er på Linux og MacOS.

Rust er på tværs af platforme

Rust fungerer på alle tre store platforme: Linux, Windows og MacOS. Andre understøttes ud over disse tre. Hvis du vil krydskompilere, eller producere binære filer til en anden arkitektur eller platform end den, du kører i øjeblikket, er lidt mere arbejde involveret, men en af ​​Rusts generelle missioner er at minimere den mængde tunge løft, der er nødvendig for sådant arbejde. Selvom Rust fungerer på de fleste nuværende platforme, er det heller ikke dets skabers mål at få Rust til at kompilere absolut overalt - bare på hvilke platforme der er populære, og hvor de ikke behøver at indgå unødvendige kompromiser for at gøre det.

Rust har stærke sprogfunktioner

Få udviklere vil begynde at arbejde på et nyt sprog, hvis de finder, at det har færre eller svagere funktioner end dem, de er vant til. Rusts modersmålsfunktioner sammenlignes gunstigt med, hvad sprog som C ++ har: Makroer, generiske, mønstermatchning og komposition (via "træk") er alle førsteklasses borgere i Rust.

Rust har et nyttigt standardbibliotek

En del af Rusts større mission er at tilskynde C- og C ++ -udviklere til at bruge Rust i stedet for disse sprog, når det er muligt. Men C- og C ++ -brugere forventer at have et anstændigt standardbibliotek - de vil være i stand til at bruge containere, samlinger og iteratorer, udføre strengmanipulationer, administrere processer og threading, udføre netværk og fil I / O osv. Rust gør alt det og mere i sit standardbibliotek. Da Rust er designet til at være platformeoverskridende, kan dets standardbibliotek kun indeholde ting, der pålideligt kan overføres på tværs af platforme. Platformsspecifikke funktioner som Linux's epoll skal understøttes via funktioner i tredjepartsbiblioteker som libc, mio ​​eller tokio.

Det er også muligt at bruge Rust uden dets standardbibliotek. En almindelig grund til at gøre det er at oprette binære filer, der ikke er afhængige af platform - f.eks. Et indlejret system eller en OS-kerne.

Rust har mange tredjepartsbiblioteker eller "kasser"

Et mål for et sprogs nytte er, hvor meget der kan gøres med det takket være tredjeparter. Cargo, det officielle arkiv for Rust-biblioteker (kaldet "kasser") lister op omkring ti tusind kasser. Et sundt antal af dem er API-bindinger til almindelige biblioteker eller rammer, så Rust kan bruges som en levedygtig sprogmulighed med disse rammer. Rust-samfundet leverer dog endnu ikke detaljeret kurering eller rangordning af kasser baseret på deres overordnede kvalitet og anvendelighed, så du kan ikke fortælle, hvad der fungerer godt uden at prøve tingene selv eller afstemme samfundet.

Rust har god IDE-support

Igen, få udviklere ønsker at omfavne et sprog med ringe eller ingen støtte i IDE efter eget valg. Derfor introducerede Rust for nylig Rust Language Server, som giver live feedback fra Rust-kompilatoren til IDE'er som Microsoft Visual Studio Code.

Rust programmeringssprog ulemper

Sammen med alle sine attraktive, kraftfulde og nyttige muligheder har Rust sine ulemper. Nogle af disse forhindringer giver nye "rustaceans" (som Rust-fans kalder hinanden) og gamle hænder.

Rust er nyt

Rust er stadig et ungt sprog, der kun har leveret sin 1.0-version i 2015. Selvom meget af kernesprogets syntaks og funktionalitet er blevet hamret, er mange andre ting omkring det stadig flydende.

Asynkrone operationer er for eksempel stadig ikke repræsenteret godt i sprogets syntaks. Der arbejdes med at implementere asynkroniseringsoperationer via asynkronisering og vente nøgleord.

Rust er svært at lære

Hvis noget ved Rust er mest problematisk, er det hvor svært det kan være at grok Rust's metaforer. Ejerskab, låntagning og Rusts anden hukommelsesstyring er en tur alle sammen første gang. Mange nybegynder-rust-programmerere har en fælles overgangsritual, "at bekæmpe lånetjekken", hvor de opdager på første hånd, hvor omhyggelig kompilatoren handler om at holde ændrede og uforanderlige ting adskilt.

Rust er kompleks

Noget af vanskelighederne kommer fra, hvordan Rusts metaforer giver mere detaljeret kode sammenlignet med andre sprog. For eksempel er strengkombination i Rust ikke altid så ligetil som streng1 + streng2. Den ene genstand kan være foranderlig og den anden uforanderlig. Rust er tilbøjelig til at insistere på, at programmøren stave ud, hvordan man håndterer sådanne ting, snarere end at lade kompilatoren gætte.

Et andet eksempel: hvordan Rust og C / C ++ arbejder sammen. Meget af tiden bruges Rust til at slutte til eksisterende biblioteker skrevet i C eller C ++; få projekter i C og C ++ omskrives fra bunden i Rust. (Og når de er, har de en tendens til at blive omskrevet trinvist.)

Vejkortet Rust-sprog

Rust-teamet er opmærksom på mange af disse problemer og arbejder på at forbedre dem. For eksempel for at gøre Rust lettere at arbejde med C og C ++ undersøger Rust-teamet, om der skal udvides projekter som bindgen, som automatisk genererer Rust-bindinger til C-kode. Holdet har også planer om at gøre låntagning og levetid mere fleksible og lettere at forstå.

Rust lykkes stadig med sit mål at give et sikkert, samtidig og praktisk systemsprog på måder, som andre sprog ikke gør, og at gøre det på måder, der supplerer, hvordan udviklere allerede arbejder.