Vodič za hrđu: započnite s jezikom Rust

Tijekom posljednjih nekoliko godina Rust je od znatiželje nastale u laboratoriju zaposlenika Mozille prešao u snažnog kandidata za pisanje sljedeće generacije izvornih aplikacija i golih metala. Ali taj napredak dolazi od tvrtke Rust koja nudi vlastiti sustav upravljanja lancem alata i komponenata - zajedno sa svojim vlastitim značajkama i hirovima.

Ovaj članak govori o osnovama postavljanja radnog okruženja u Rustu, konfiguriranju IDE-a i iskorištavanju skupa alata koje Rust pruža za razvoj aplikacija.

Povezani video: Razvoj sigurnijeg softvera s Rustom

Brzo ubrzajte na novoj Rust, dizajniranoj za stvaranje brzog softvera na razini sustava. Ovaj dvominutni animirani objašnjavač pokazuje kako Rust zaobilazi zabrinjavajuća programska pitanja memorije i upravljanja.

Shvatite Rust za noćna, beta i stabilna izdanja

Rustov lanac alata sastoji se prvenstveno od kompajlera Rust rustc, zajedno s alatima za upravljanje Rust instalacijom. Budući da je Rust u stalnom razvoju, lanac alata Rust osmišljen je tako da ga je lako ažurirati.

Softverski projekti često se pružaju putem više kanala za odvajanje stabilne i beta verzije koda. Rustov lanac alata djeluje na isti način, nudeći tri kanala za svoj lanac alata:

  • Stabilno: Glavna izdanja u točkama koja se pojavljuju svakih šest tjedana.
  • Beta: Kandidati za sljedeće glavno izdanje, koje se pojavljuje češće.
  • Svakodnevno: Najneposrednija izrada, s pristupom vrhunskim značajkama, ali bez jamstava njihove stabilnosti.

Kao što je istaknuo programer Karol Kuczmarski, o noćnom kanalu Rust najbolje je razmišljati kao o svom jeziku. Neke značajke Rust-a, poput kompajliranja na WebAssembly, dostupne su samo u noćnom kanalu i mogu se aktivirati samo posebnim smjernicama kompajlera. Drugim riječima, neće se ni kompajlirati na beta ili stabilnim kanalima. 

To je prema dizajnu, jer ne postoji jamstvo da će noćne značajke biti podržane bilo gdje drugdje. Međutim, mnoge od tih značajki na kraju izlaze iz noćnog kanala i prelaze u beta i stabilna izdanja. (Na primjer, kompajliranje u WebAssembly radi stabilno od Rust 1.30.)

Ukratko:

  1. Koristite stabilnu za stvarni proizvodni rad.
  2. Upotrijebite beta da biste testirali trenutni softver na nadolazeće verzije kako biste vidjeli može li se nešto pokvariti u nadogradnji.
  3. Koristite noću samo za eksperimente u pijesku s najnovijim značajkama Rusta.

Odaberite OS za razvoj Rust-a

Rust podržava sve tri glavne platforme - Windows, Linux i MacOS - u 32- i 64-bitnim inkarnacijama, sa službenim binarnim datotekama za svaku. Mnoštvo drugih platformi također ima službene binarne datoteke, ali nemaju istu razinu automatiziranog testiranja. Ove drugorazredne platforme uključuju ARMv6 i ARMv7 za iOS, Android i Linux; MIPS Linux i MIPS64 Linux; 32-bitna izdanja x86 iOS, Windows i Linux; i WebAssembly. Druge platforme, poput Windows XP ili eksperimentalni HaikuOS, podržane su neslužbenim verzijama.

Rustov razvojni tim izjavio je da nije jedna od Rustovih misija biti što je moguće prenosiviji. Na primjer, iako je Rust dostupan na mnogim ARM arhitekturama, nije zajamčeno da će Rust biti službeno podržan na hardverskim platformama nižeg ranga.

Međutim, trebala bi postojati podržana Rust gradnja dostupna za veliku većinu uobičajenih, uobičajenih slučajeva korištenja - naime 32- i 64-bitni Windows, Linux i MacOS.

Ako planirate razvijati Rust na sustavu Windows, imajte na umu svoje lance alata. Rust podržava dva lanca alata u sustavu Windows:

  • Izvorni Microsoft Visual C (MSVC) ABI
  • Gnu ABI koji koristi GCC povezivač.

Budući da gotovo sav softver C / C ++ izgrađen u sustavu Windows ionako koristi MSVC, veliku ćete većinu vremena htjeti koristiti lanac MSVC alata. Ako vam ikad zatreba GCC, to će najvjerojatnije biti za interakciju s bibliotekama trećih strana izgrađenim u sustavu Windows s GCC-om.

Dobra vijest je da Rustov sustav upravljanja lancem alata omogućuje držanje instaliranih i MSVC i GCC lanaca alata, a omogućuje vam i prebacivanje između njih, od projekta do projekta.

Jedno od ciljeva kompilacije Rusta je WebAssembly, što znači da možete pisati u Rustu i implementirati u web preglednik. WebAssembly je i dalje grub oko rubova, a takva je i Rustova podrška za njega. Ali ako ste ambiciozni i želite neuredne ruke, pročitajte knjigu koju su sastavili programeri Rust i WebAssembly koja detaljno opisuje postupak sastavljanja WebAssemblya u Rust. Knjiga uključuje vodič za jednostavan projekt, provedbu Conwayeve igre života, napisan na Rustu i raspoređen kao WebAssembly.

Započnite postavljanje Rust-a sa rustup

Rust nudi cjeloviti instalacijski sustav i sustav za održavanje lanca alata tzv rustup. Preuzmite rustupi pokrenite; dobit će najnovije verzije lanca alata Rust i instalirati ih za vas.

Najkritičniji alati koje održavaju rustupsu:

  • rustupsebe. Kad god rustupse objave nove verzije ili drugi alati, možete jednostavno pokrenuti rustup updatei sve automatski ažurirati.
  • rustc, kompajler Rust.
  • Cargo, Rustov paket i upravitelj radnog prostora.

Prema zadanim postavkama rustupinstalira Rust sa stabilnog kanala. Ako želite koristiti beta ili noćne verzije, morate instalirati te kanale (na primjer,  rustup install nightly) i postaviti Rust da ih upotrebljava prema zadanim postavkama ( rustup default nightly). Također možete ručno odrediti koji ćete kanal koristiti prilikom sastavljanja aplikacije Rust, tako da ne morate postavljati i resetirati zadane vrijednosti svaki put kad se premještate između projekata.

Također možete koristiti  rustup za instaliranje i održavanje prilagođenih lanaca alata. Obično ih koriste neslužbene, neovisne verzije Rusta za nepodržane platforme, jer one obično zahtijevaju vlastite povezivače ili druge alate specifične za platformu.

Konfigurirajte svoj IDE za Rust

Iako je Rust relativno nov jezik, već je dobio snažnu podršku mnogih uobičajenih IDE-a. Programer Manuel Hoffman održava projekt praćenja stanja takve podrške na web mjestu areweideyet.com.

Omogućavanje da Rust dobro radi s IDE-ima izričiti je cilj njegovog razvojnog tima, putem značajke nazvane Rust Language Server (RLS). RLS pruža povratne informacije o dotičnom kodu uživo od Rustova vlastitog prevoditelja, nego od parsera treće strane.

Evo IDE-a koji podržavaju Rust:

  • Microsoftov Visual Studio Code ima proširenje za podršku Rust jeziku koje je kreirao Rustov tim za razvojne alate. Ova razina integracije čini ga jednim od najbolje podržanih IDE-a za Rust. 
  • Korisnici Eclipsea mogu preuzeti pretpakirano izdanje Eclipsea za razvoj Rust ili koristiti samostalni dodatak za koroziju za Eclipse Photon. (Raniji paket, RustDT, više se ne održava.)
  • Ako ste ljubitelj Emacsa ili Vima, drugi programeri poput vas napisali su dodatke specifične za Rust za oba urednika. Emacs ima način rada specifičan za Rust, a Vim dodatak koji omogućuje isticanje i formatiranje sintakse. Podrška za RLS dostupna je i za Emacs i za Vim, ali mora se dodati i konfigurirati ručno.
  • Korisnici IntelliJ Idea i Atom mogu dodati dodatke kako bi zaokružili podršku za Rust.
  • Uzvišeni tekst odmah ima podršku za sintaksu Rust, a dodaci pružaju dublju podršku za druge značajke.
  • Projekt za stvaranje jednostavnog IDE-a posebno za Rust, SolidOak, bio je u izradi neko vrijeme, ali je u međuvremenu zastao. Najbolje je da se odlučite za jedan od postojećih IDE-a koji već ima podršku.

Napravite svoj prvi projekt Rust

Projekti hrđe trebaju imati dosljednu strukturu direktorija, a kod i metapodaci projekata pohranjeni su u njima na određene načine. Kôd se pohranjuje u srcpoddirektorij, a detalji o projektu pohranjuju se u dvije datoteke u osnovnom direktoriju  Cargo.tomlprojekta (osnovne informacije o projektu) i Cargo.lock(automatski generirani popis ovisnosti). Tu strukturu direktorija i metapodatke možete stvoriti ručno, ali lakše je samo koristiti Rustove vlastite alate za obavljanje posla.

Savjet:  Mrežni vodič za učenje Rusta pomoću primjera Rust nudi interaktivne uzorke koda koji se mogu uređivati ​​i pokretati izravno u pregledniku. Dotiče se gotovo svih glavnih koncepata Rust-a, iako su neki od ključnih pojmova, poput posuđivanja i životnih vijekova, predstavljeni relativno kasno u raspravi.

Alat Rust's Cargo upravlja projektima Rust i knjižnicama ili "sanducima" koje oni koriste. Upišite novi projekt Rust imenovan my_projectu vlastitom direktoriju cargo new my_project. (Za programere C # koji rade s .Net Core, razmislite o dotnet newnaredbi.) Novi se projekt pojavljuje u poddirektorijumu s tim imenom, zajedno s osnovnim projektnim manifestom - Cargo.tomldatotekom - i zaglavljem izvornog koda projekta, u srcpoddirektoriju.

Kada kreirate novi projekt,  main.rsdatoteka se automatski kreira u srcdirektoriju projekta. Ova datoteka sadrži osnovnu aplikaciju "hello world", tako da možete odmah testirati svoj alatni alat Rust sastavljanjem i pokretanjem.

Izvorni kod za aplikaciju "hello world":

fn main() {

    println!(“Hello World!”);

}

Da biste ga izgradili i pokrenuli, unesite korijen direktorija projekta i upišite cargo run. Imajte na umu da prema zadanim postavkama Cargo izrađuje projekte u načinu uklanjanja pogrešaka. Za pokretanje u načinu oslobađanja koristite cargo run --release. Binarne datoteke grade se u target/debugili target/releasepoddirektoriju projekta, ovisno o tome koji profil kompilacije koristite.

Radite s sanducima za hrđu

Upravljanje paketima ključni je dio svakog modernog programskog okruženja. U tu svrhu Rust nudi "sanduke", to su biblioteke trećih strana, pakirane za distribuciju s Rustovim alatima. Sanduke možete pronaći u službenom registru paketa Rust, Crates.io.

Ako vaš projekt ovisi o određenom sanduku, morate ga navesti uređivanjem Cargo.tomldatoteke projekta . Standardni način za to je ručno, odnosno jednostavnim uređivanjem Cargo.tomlizravno pomoću uređivača teksta. Sljedeći put kad se projekt obnovi, Rust automatski dobiva sve potrebne ovisnosti.

Savjet: Dva alata cargo-editi cargo-edit-locallymogu ažurirati ovisnosti iz naredbenog retka, iako su to neslužbeni projekti treće strane.

Kada izradite projekt Rust koji ovisi o vanjskim sanducima, Cargo ih prema zadanim postavkama traži na Crates.io; ne trebate ih dobivati ​​ručno. Također se na sanduke u svom projektu možete pozivati ​​prema URL-u, a ne prema nazivu sanduka, u slučaju da vam treba sanduk koji nije hostiran u registru, na primjer nešto iz privatnog spremišta.

Imajte na umu da su neki sanduci će samo instalirati i graditi na hrđu u noći kanala, jer se koriste eksperimentalne značajke koje nisu dostupne u drugim kanalima. Ako ste na kanalu za izdavanje i pokušate instalirati takav sanduk, nećete dobiti nikakvo upozorenje dok sama kompilacija ne zakaže. Dokumentacija u sanduku obično spominje zahtijeva li noćni kanal ili ne, zato pročitajte prije nego što uključite, a kamoli sastavite.

Sanduci se mogu isporučiti s binarnim datotekama. Neki su alati naredbenog retka koji se koriste u razvoju Rust-a; drugi su alati opće namjene (poput  ripgrep). Da biste instalirali jedan od ovih sanduka, samo upišite cargo install . Ovo nije jedini način distribucije binarnih datoteka stvorenih pomoću Rust-a, ali programeri Rust-a prikladan su način da ih dobiju kao dio tijeka rada koji uključuje Rustove alate.

Cross-compile Rust na drugu platformu

Budući da Rust podržava više lanaca alata, čak i u istoj instalaciji Rusta, možete kompilirati Rust programe u ciljani OS i okruženje koje se razlikuje od onog na koje kompilirate.

Za takvo međusobno kompiliranje potreban je lanac alata na platformi na kojem radite koji odgovara ciljanoj platformi. Ponekad, kao i kod unakrsnog prevođenja na Linux u sustavu Windows ili obrnuto, to uključuje malo više od posjedovanja GCC povezivača. Ali drugi put je složenije. Na primjer, za međusobno kompiliranje na MacOS trebaju vam Xcode IDE knjižnice da biste dovršili posao - cctools (Appleov ekvivalent binutila) i MacOS SDK.

Alati treće strane nude nekoliko načina za rješavanje ovih poteškoća:

  • Jedan od takvih alata je Trust, predložak Travis CI i AppVeyor koji može automatski objaviti binarna izdanja projekta Rust. Može se graditi za Linux, Windows i MacOS, iako zahtijeva upotrebu usluga Travis CI i AppVeyor i zahtijeva da vaš projekt bude hostiran na GitHubu.
  • Drugi projekt, Cross, izravno se izvodi na 64-bitnom x86 Linux hostu, ali pruža ono što njegov tvorac opisuje kao "nulti postavljanje" unakrsnog kompiliranja na široku paletu ciljeva, uključujući 64-bitni Windows i MIPS.
  • Crossbuild projekt pruža multi-arhitekturnu Dockerovu sliku koja se može koristiti za unakrsnu izgradnju između sve tri glavne platforme.