Programavimas

Kas yra rūdys? Saugus, greitas ir lengvas programinės įrangos kūrimas

Greita, saugu, lengva rašyti - išsirinkite bet kurį iš dviejų. Tai jau ilgą laiką buvo programinės įrangos kūrimo būsena. Kalbos, kurios pabrėžia patogumą ir saugumą, paprastai būna lėtos (pvz., „Python“). Kalbos, kuriose pabrėžiamas našumas, paprastai būna sunkiai pritaikomos ir jomis lengva nupūsti kojas (pvz., C ir C ++).

Ar visus tris tuos atributus galima pateikti viena kalba? Dar svarbiau, ar galite priversti pasaulį su juo dirbti? „Rust“ kalba, kurią iš pradžių sukūrė Graydonas Hoare'as ir šiuo metu remia „Mozilla Research“, yra bandymas atlikti tik tuos dalykus. („Google Go“ kalba turi panašių užmojų, tačiau „Rust“ siekia kuo mažiau nuolaidžiauti atlikimui.)

Susijęs vaizdo įrašas: saugesnės programinės įrangos kūrimas naudojant „Rust“

Greitai paspartinkite naujoką „Rust“, skirtą sukurti greitą, sistemos lygio programinę įrangą. Šis dviejų minučių animacinis paaiškinimas parodo, kaip „Rust“ aplenkia nemalonius atminties ir valdymo programavimo klausimus.

Rūdys turėtų būti greitas, saugus ir pakankamai lengvai suprogramuojamas. Jis taip pat skirtas plačiai naudoti, o ne tik kaip įdomumas ar taip pat vykdomas kalbų loterijose. Yra daugybė priežasčių sukurti kalbą, kurioje saugumas yra lygiavertis greičiui ir kūrimo galiai. Galų gale yra nepaprastai daug programinės įrangos - kai kurios jos lemia ypatingos svarbos infrastruktūrą - sukurtos kalbomis, kuriose saugumas nebuvo pagrindinis rūpestis.

Rūdžių programavimo kalbos privalumai

„Rust“ prasidėjo kaip „Mozilla“ tyrimų projektas, iš dalies skirtas atnaujinti pagrindinius „Firefox“ naršyklės komponentus. Kelios pagrindinės priežastys nulėmė šį sprendimą: „Firefox“ nusipelnė geriau panaudoti šiuolaikinius daugiagyslius procesorius; o didžiulis žiniatinklio naršyklių visuotinumas reiškia, kad jas reikia saugiai naudoti.

Tačiau šių privalumų reikia visai programinei įrangai, ne tik naršyklėms, todėl „Rust“ iš naršyklės projekto tapo kalbos projektu. Rūdys užtikrina saugumą, greitį ir paprastą naudojimąsi šiomis savybėmis.

Rūdys yra greitas

„Rust code“ sudaromas pagal vietinį mašinos kodą keliose platformose. Dvejetainiai failai yra savarankiški, be vykdymo laiko, todėl sugeneruotas kodas turi veikti taip pat kaip ir palyginamasis kodas, parašytas C arba C ++.

Rūdys yra saugios atmintyje

„Rust“ nekompiliuos programų, bandančių nesaugiai naudoti atmintį. Daugiausia atminties klaidų atrandama, kai programa veikia. Rusto sintaksė ir kalbos metaforos užtikrina, kad bendros atminties problemos kitose kalbose - niekiniai ar nekabantys rodyklės, duomenų rasės ir pan. - niekada netaps jos gamyba. Kompiliatorius pažymi šias problemas ir priverčia jas išspręsti, kol programa niekada nevykdoma.

Rūdys yra mažai pridėtinės

Rūdys kontroliuoja atminties valdymą pagal griežtas taisykles. Rusto atminties valdymo sistema kalbos sintaksėje išreiškiama per metaforą, vadinamą nuosavybės teise. Bet kurią nurodytą kalbos vertę vienu metu gali valdyti arba valdyti tik viena kintamoji.

Būdą, kaip nuosavybės teisė perduodama tarp objektų, griežtai kontroliuoja kompiliatorius, todėl vykdymo metu nėra staigmenų, susijusių su atminties paskirstymo klaidomis. Nuosavybės požiūris taip pat reiškia, kad nėra šiukšlių surinktos atminties tvarkymo, pvz., Tokiomis kalbomis kaip „Go“ arba „C #“. (Tai taip pat suteikia „Rust“ dar vieną našumo impulsą.) Kiekvienas „Rust“ programos atminties taškas yra stebimas ir automatiškai atleidžiamas per nuosavybės metaforą.

Rūdys yra lankstus

Rūdys leidžia jums gyventi pavojingai, jei to reikia, iki taško. Rūdžių saugumas gali būti iš dalies sustabdytas ten, kur reikia tiesiogiai manipuliuoti atmintimi, pavyzdžiui, atsisakyti neapdoroto rodyklės à la C / C ++. Pagrindinis žodis yra iš dalies, nes Rusto atminties saugumo operacijos niekada negali būti visiškai išjungtos. Net tada beveik niekada nereikia nusimesti saugos diržų įprasto naudojimo atvejais, todėl galutinis rezultatas yra programinė įranga, kuri pagal numatytuosius nustatymus yra saugesnė.

Rūdis yra lengva naudoti

Nei viena iš „Rust“ saugos ir vientisumo funkcijų nesudaro daug, jei jos nėra naudojamos. Štai kodėl „Rust“ kūrėjai ir bendruomenė stengėsi, kad kalba būtų kuo naudingesnė ir priimtinesnė naujokams.

Viskas, ko reikia „Rust binaries“ gamybai, yra toje pačioje pakuotėje. Išoriniai kompiliatoriai, pvz., GCC, reikalingi tik tuo atveju, jei kompiliuojate kitus komponentus, nepriklausančius Rust ekosistemai (pvz., C biblioteką, kurią rengiate iš šaltinio). „Microsoft Windows“ vartotojai taip pat nėra antrarūšiai piliečiai; „Rust“ įrankių grandinė ten yra tokia pat pajėgi kaip ir „Linux“ bei „MacOS“.

Rūdys yra tarp platformų

„Rust“ veikia visose trijose pagrindinėse platformose: „Linux“, „Windows“ ir „MacOS“. Kiti yra palaikomi už tų trijų ribų. Jeigu nori sukompiliuoti, arba sukurkite dvejetainius failus kitokiai architektūrai ar platformai nei ta, kurią šiuo metu naudojate, yra įdėta šiek tiek daugiau darbo, tačiau viena iš bendrųjų „Rust“ misijų yra sumažinti tokiam darbui reikalingą sunkų kėlimą. Be to, nors „Rust“ veikia daugumoje dabartinių platformų, tai nėra jos kūrėjų tikslas, kad „Rust“ būtų kompiliuojamas absoliučiai visur - bet kokiose populiariose platformose ir visur, kur tam nereikia daryti nereikalingų kompromisų.

Rūdys turi galingas kalbos ypatybes

Nedaugelis kūrėjų nori pradėti darbą nauja kalba, jei pastebi, kad joje yra mažiau arba silpnesnių funkcijų, nei yra įpratę. Rust gimtosios kalbos ypatybės palankiai lyginamos su tokiomis kalbomis, kaip C ++: Makrokomandos, generiniai variantai, modelių derinimas ir sudėtis (naudojant „bruožus“) yra visi Rust piliečiai.

„Rust“ turi naudingą standartinę biblioteką

Viena iš didesnės „Rust“ misijos dalių yra skatinti C ir C ++ kūrėjus naudoti „Rust“ vietoj tų kalbų, kai tik įmanoma. Tačiau „C“ ir „C ++“ vartotojai tikisi turėti tinkamą standartinę biblioteką - jie nori mokėti naudotis talpyklomis, kolekcijomis ir iteratoriais, atlikti eilučių manipuliavimą, valdyti procesus ir gijas, atlikti tinklo ir failų įvestis / išvestis ir pan. „Rust“ visa tai ir dar daugiau daro savo standartinėje bibliotekoje. Kadangi „Rust“ yra sukurtas kaip daugiaplatformis, standartinėje bibliotekoje gali būti tik dalykai, kuriuos galima patikimai perkelti į platformas. Konkrečios platformos funkcijos, pvz., „Linux“ epoll, turi būti palaikomos per funkcijas trečiųjų šalių bibliotekose, tokiose kaip „libc“, „mio“ ar „tokio“.

Taip pat galima naudoti „Rust“ be standartinės bibliotekos. Viena iš dažniausių priežasčių tai padaryti yra sukurti dvejetainius failus, kurie neturi priklausomybės nuo platformos, pvz., Įterptosios sistemos ar OS branduolio.

„Rust“ turi daug trečiųjų šalių bibliotekų arba „dėžių“

Vienas kalbos naudingumo matas yra tai, kiek su ja galima nuveikti trečiųjų šalių dėka. Oficialioje „Rust“ bibliotekų saugykloje „Cargo“ (vadinamose „dėžėse“) pateikiama apie dešimt tūkstančių dėžių. Sveikas jų skaičius yra API susiejimas su įprastomis bibliotekomis ar sistemomis, todėl „Rust“ gali būti naudojama kaip perspektyvi kalbos parinktis su tomis sistemomis. Tačiau „Rust“ bendruomenė dar nepateikia išsamaus dėžių kuravimo ar reitingavimo pagal bendrą jų kokybę ir naudingumą, todėl negalite pasakyti, kas gerai, neišbandę dalykų patys arba apklausę bendruomenę.

„Rust“ turi gerą IDE palaikymą

Vėlgi, nedaugelis kūrėjų nori pasirinkti kalbą, kurios pasirinktoje IDE palaikoma mažai arba visai nėra. Štai kodėl „Rust“ neseniai pristatė „Rust“ kalbos serverį, kuris teikia tiesioginius „Rust“ kompiliatoriaus atsiliepimus IDE, pvz., „Microsoft Visual Studio Code“.

Rūdžių programavimo kalbos trūkumai

Kartu su visomis patraukliomis, galingomis ir naudingomis galimybėmis „Rust“ turi ir minusų. Kai kurios iš šių kliūčių užklumpa naujus „rustaceans“ (taip Rusto gerbėjai vadina vienas kitą) ir senas rankas.

Rūdys yra nauja

„Rust“ vis dar yra jauna kalba, savo 1.0 versiją pateikusi tik 2015 m. Taigi, nors didelė dalis pagrindinės kalbos sintaksės ir funkcionalumo buvo pažeista, daugelis kitų aplinkinių dalykų vis dar yra sklandūs.

Pavyzdžiui, asinchroninės operacijos vis dar nėra gerai parodytos kalbos sintaksėje. Vykdomas darbas siekiant įgyvendinti asinchronines operacijas naudojant asinchroninis ir laukti raktinius žodžius.

Rūdžių sunku išmokti

Jei kuris nors dalykas, susijęs su Rustu, yra pats problemiškiausias, tai kaip sunku gali būti pajusti Rusto metaforas. Nuosavybės teisė, skolinimasis ir kitas Rusto atminties valdymas yra kelionė Visi pirmą kartą. Daugelis naujokų „Rust“ programuotojų turi bendrą perėjimo ritualą, „kovojantį su skolų tikrintoju“, kur jie iš pirmų lūpų atranda, kaip kruopščiai kompiliatorius stengiasi atskirti nekintamus ir nekintamus dalykus.

Rūdys yra sudėtingas

Kai kurie sunkumai kyla dėl to, kaip Rusto metaforos suteikia daugiau žodinio kodo, palyginti su kitomis kalbomis. Pavyzdžiui, styginių sujungimas „Rust“ ne visada yra toks paprastas kaip eilutė1 + eilutė2. Vienas objektas gali būti nekintamas, o kitas - nekintamas. Rustas yra linkęs reikalauti, kad programuotojas paaiškintų, kaip elgtis su tokiais dalykais, o ne leisti kompiliatoriui atspėti.

Kitas pavyzdys: kaip Rust ir C / C ++ veikia kartu. Didžiąją laiko dalį „Rust“ naudojamas prijungti prie esamų bibliotekų, parašytų C arba C ++; keletas projektų C ir C ++ yra perrašomi nuo nulio Rust. (O kai jie yra, jie linkę būti perrašomi palaipsniui.)

„Rust“ kalbos kelių žemėlapis

„Rust“ komanda žino daugelį šių problemų ir stengiasi jas tobulinti. Pavyzdžiui, kad „Rust“ būtų lengviau dirbti su „C“ ir „C ++“, „Rust“ komanda tiria, ar išplėsti tokius projektus kaip „bindgen“, kuris automatiškai sukuria „Rust“ susiejimus su „C“ kodu. Komanda taip pat planuoja skolinimąsi ir gyvenimo trukmę padaryti lankstesnę ir lengviau suprantamą.

Vis dėlto „Rust“ pavyksta pasiekti saugią, vienu metu veikiančią ir praktišką sistemų kalbą, kaip to nedaro kitos kalbos, ir tai padaryti taip, kad papildytų tai, kaip kūrėjai jau dirba.