Limbajul de programare Rust: utilitare, documentație, ideologie și sintaxă. Care este starea actuală a limbii Rust? Limbajul de programare Rust

Până acum ați observat că sintaxa limbajului de programare în cauză este foarte asemănătoare cu sintaxa limbajelor precum C/C++, deoarece în ambele cazuri sunt folosite două bare oblice pentru a evidenția comentariile, blocurile de cod sunt înconjurate de acolade. , iar argumentele funcției sunt înconjurate de paranteze. De asemenea, amintiți-vă că cuvântul cheie fn este folosit pentru a declara funcții și fiecare program trebuie să aibă o funcție main(). Semnul exclamării după numele funcției println în acest caz indică faptul că este utilizată o macrocomandă (în esență, un înveliș convenabil în jurul funcției de imprimare din biblioteca Rust runtime).

Pentru a compila programul, rulați pur și simplu comanda:

Rustc salut.rs

Ca urmare, în directorul cu fișierul cod sursa Programul ar trebui să producă un fișier binar numit hello, pentru a-l executa, trebuie doar să rulați comanda./hello. Dar dacă ești atent la dimensiunea acestui fișier, vei fi oarecum șocat: va depăși 800 KB. Și toate acestea sunt necesare pentru ca un program atât de simplu să funcționeze? Ei bine, implicit, compilatorul Rust conectează static majoritatea bibliotecilor de execuție cu programul, astfel încât să puteți copia binarul pe un sistem care nu are instalate bibliotecile de execuție Rust și să-l rulați fără probleme. Cu toate acestea, puteți spune și compilatorului să efectueze optimizări și legături dinamice:

Rustc -O C prefer-dinamic salut.rs

Acum veți obține un fișier binar de o dimensiune mai acceptabilă, egală cu 8 KB, dar dacă utilizați utilitarul ldd, veți constata că pentru ca programul să funcționeze corect, biblioteca libstd-dynamic trebuie să fie prezentă pe sistem.<версия>.asa de .

Sintaxa limbajului de programare

Acum că putem compila și rula programe în Rust, îmi propun să înțelegem sintaxa acestui limbaj de programare și să evidențiem diferențele sale față de sintaxa limbajelor de programare, cum ar fi C, C++ și altele similare:

Fn dublator (x: i32) -> i32 ( x * 2 ) fn principal () ( fie a: i32 = 5; fie b; b = dublator(a); println!("a ori 2 ()", b) ; potriviți b ( 1 ... 10 => println!("De la 1 la 10"), _ => println!("Un alt număr"), ) )

Dacă sunteți obișnuit să lucrați cu limbaje C/C++, ați putea crede că acest cod este oarecum ciudat, dar este destul de logic. Să începem cu funcția main(): pe prima linie a lui să declarăm o variabilă întreagă de 32 de biți a și să îi atribuim o valoare inițială de 5. Am putea sări peste specificarea tipului variabilei (i32 este tipul variabilei standard) și, de asemenea, nu îi atribuie o valoare inițială și, în acest caz, ar conține o valoare zero. Rețineți că, dacă declarați o variabilă și îi atribuiți o anumită valoare în același mod ca variabila a din exemplu, nu veți putea modifica valoarea acesteia mai târziu, așa că va fi generat un mesaj de eroare la compilarea următorului fragment de cod:

Fie a: i32 = 5; a = 10;

În mod implicit, variabilele din Rust sunt imuabile, ceea ce înseamnă că valorile lor nu se pot schimba după inițializare. Trebuie să declarați în mod explicit variabilele mutabile într-un mod similar:

Fie mut a: i32 = 5;

De ce este nevoie de asta? Aceasta este muncă în plus, nu-i așa? Ei bine, în esență, acest lucru este adevărat, dar, pe de altă parte, această caracteristică limbajul de programare ajută la dezvoltarea de programe securizate. Ar trebui să faceți doar variabilele mutabile ale căror valori trebuie să fie modificate. Rust te obligă să fii cât mai pronunțat pentru a descrie cât mai precis posibil cum funcționează programul: linia de mai sus declară o variabilă întreg cu semn a de exact 32 de biți în dimensiune, cu posibilitatea de a-și schimba valoarea în viitor.

Apoi, numim funcția noastră dublatoare cu variabila a ca argument și stocăm valoarea returnată în variabila b. Atenție la declarația funcției de dublare, care se află la începutul codului programului: indică tipul parametrului funcției (i32) și tipul valorii returnate (i32) după simbolurile ->. De asemenea, este ușor de observat că funcția efectuează o singură operație, x * 2 , care nici măcar nu este urmată de un punct și virgulă, ca un bloc normal de cod Rust; ce se intampla acolo?

Se pare că puteți returna valoarea unei funcții fie în același mod ca în C, fie prin simpla plasare a expresiei în ultima linie codul funcției, așa cum sa făcut în acest caz. Și, deoarece aceasta este doar o expresie, nu este nevoie să puneți un punct și virgulă după ea.

Să revenim la funcția main(), unde am folosit macrocomanda println!() pentru a tipări rezultatul; Observați tehnica de înlocuire a valorii unei variabile folosind secvența de caractere () . În cele din urmă, exemplul demonstrează cuvântul cheie „match” extrem de util al limbajului de programare Rust, care poate reduce semnificativ cantitatea de cod dacă trebuie să efectuați un număr mare de instrucțiuni if/else. În acest caz, 1...10 este o declarație a unui interval de valori (de la 1 la 10 inclusiv), iar caracterul de subliniere (_) se potrivește cu toate celelalte valori.

În Rust, tipul șir de caractere permite utilizarea caracterelor de patru octeți, adică orice caractere Unicode, iar acest lucru înseamnă că limbajul de programare a fost adaptat în faza de proiectare pentru a funcționa cu diferite limbi și caractere speciale. Un alt tip de date util este un tuplu, care este o colecție de variabile de diferite tipuri:

Fie x = (1, 2,0, „Bună ziua”);

În acest caz, o valoare întreagă, o valoare flotantă și o valoare șir sunt plasate în același tuplu. Aceste valori sunt imuabile și pot fi accesate în același mod:

Println!("()", x.2);

Ca rezultat, va fi scoasă valoarea celui de-al treilea element al tuplului x, adică șirul „Hello” . Așa cum este cazul marilor obișnuite, care sunt suportate și în Rust, numerotarea elementelor tuplurilor începe de la zero. Puteți utiliza tupluri pentru a returna mai multe valori dintr-o funcție:

Comutator Fn (input: (i32, i32)) -> (i32, i32) ( (input.1, input.0) ) fn main() ( fie x = (10, 50); fie y = comutator (x) ; println!("(), ()", y.0, y.1 )

În acest caz, o funcție numită switch() preia un tuplu de două valori întregi de 32 de biți și le stochează în variabila de intrare. De asemenea, returnează un tuplu cu două valori întregi. Această funcție folosește o expresie simplă care vă permite să schimbați elementele unui tuplu și să returnați tuplul rezultat.

Funcția main() creează un tuplu numit x care conține valorile 10 și 50 și un tuplu numit y care conține valorile care au fost returnate de la apelul la switch(). Apoi, valorile tuplului sunt pur și simplu afișate pe ecran (50, 10).

Sfat: Dacă doriți să explorați singur capacitățile Rust, vă recomandăm să începeți prin a citi documentația oficială aflată la https://doc.rust-lang.org/book.

Era scurta descriere sintaxa și capabilitățile limbajului de programare Rust; Dacă doriți să aflați mai multe despre acest limbaj de programare într-o serie specială de articole, anunțați-ne!

Așadar, am dori să vă prezentăm un băiat de naștere recent (a împlinit un an pe 15 mai 2016) - Rust. Acesta este un limbaj de programare universal dezvoltat de Mozilla, ale cărui trei principii principale sunt: ​​viteza, securitatea și ergonomia. Creatorii înșiși îl consideră fără modestie unul dintre cei mai probabili succesori ai C/C++. Potrivit unui sondaj pe StackOverflow, Rust este limbajul cel mai preferat printre dezvoltatori de astăzi. Deci, să aruncăm o privire mai atentă la ce este.

Rugină pentru un începător

Nu vreau să înșel pe nimeni, așa că iată o declarație responsabilă: Rugina este destul de greu de învățat. În primul rând, acest lucru se datorează tinereții limbii și, în consecință, cantității mici de literatură. În al doilea rând, poate fi și mai ușor pentru o persoană departe de a programa să o învețe decât pentru cineva familiarizat cu alte limbi. Deci, de exemplu, un specialist IT gata făcut va fi foarte enervat de necesitatea de a prescrie cele mai mici operații, iar absența moștenirii ca atare în limbă îl va deruta pur și simplu.

Cu toate acestea, Rust se dezvoltă rapid (o nouă ediție este lansată la fiecare 6 săptămâni), comunitatea crește, iar găsirea de informații pe Internet nu mai este dificilă.

Cum să studiezi

Puteți găsi aproape tot ce aveți nevoie pe site-ul oficial. În plus, comunitatea adepților Rust este foarte mare și prietenoasă, așa că poți oricând să apelezi la IRC (există o secțiune rusă) și la forumul oficial pentru sfaturi. În plus, cărțile, inclusiv cele electronice, au început să apară încetul cu încetul. Este încă dificil de evaluat calitatea lor, dar acesta este un fapt.

Pentru cei care au trecut de etapa inițială de cunoaștere, puteți găsi o mulțime de material util pe GiHub, inclusiv RFC-uri și commit-uri. În plus, puteți participa personal sau măcar urmăriți webcast-ul uneia dintre conferințele Rust programate pentru a doua jumătate a anului. Iată calendarul:

  • 9-10 septembrie conferința RustConf în Portland, SUA;
  • 17 septembrie, Conferința Comunităților Europene RustFest de la Berlin, Germania;
  • 27 octombrie Conferința Rust Belt Rust din Pittsburgh, SUA;

Ei bine, pentru a-i întâlni pe cei care consideră că Rust sunt chemarea lor și, în același timp, să le ceri toată înțelepciunea lor, puteți contacta organizatorii și participanții la întâlnirile fanilor limbilor de la Moscova.

Particularități

Dupând puțin ceea ce s-a spus mai devreme, vom evidenția principalele avantaje și dezavantaje ale limbajului Rust.

Pro:

  • Lucru sigur cu memorie;
  • Performanta ridicata;
  • tip de date algebrice;
  • Previzibilitatea compilarii;

Minusuri:

  • O anumită redundanță de cod;
  • Intensitate mare a dezvoltării limbajului și, în consecință, lipsa unei literaturi adecvate pentru studiu;
  • Necesitatea de a specifica clar și fără ambiguitate parametrii pentru compilare.

De fapt, te obișnuiești rapid cu diferențele, cum ar fi înlocuirea moștenirii cu abilități. De îndată ce ochii tăi se obișnuiesc și mâinile tale se obișnuiesc, Rust se transformă într-un limbaj complet de lucru, mai simplu și mai funcțional decât C++, dar inferior în „frumusețe” multor alte limbaje de programare. De fapt, principala diferență dintre Rust și concurenții și predecesorii săi este viteza și securitatea.

Cerere

Astăzi, Rust este popular printre dezvoltatorii de jocuri, grafică și sisteme de operare. Cu toate acestea, din motive evidente, numărul de locuri staționare în care sunt necesari experți înalt specializați în rugină este extrem de mic în lume și cu atât mai mult în Rusia. Cu toate acestea, încă nu există semne că limbajul se va scufunda în uitare, seamănă mai degrabă cu o preluare sistematică a lumii. Aceasta înseamnă că abilitățile bune în utilizarea Rust în viitor vă vor ajuta să găsiți un loc de muncă bine plătit, interesant atât în ​​țara noastră, cât și în străinătate.

Încă la cerere: profesie „”.

În 2013, Mozilla, împreună cu Samsung, au anunțat dezvoltarea unui nou motor de browser web, Servo. A fost creat special pentru procesoare multi-core dispozitive mobile, este capabil să despartă sarcinile în fire paralele și să reducă foarte mult timpul de încărcare a paginilor web. Servo este scris în întregime în limbajul de programare Rust, pe care Mozilla l-a dezvoltat pentru scrierea aplicațiilor mobile.

Despre limbaj

Rust este un limbaj de programare procedural care acceptă o varietate de stiluri de codare. Dezvoltatorul Graydon Hoare a început să creeze limbajul în 2006, iar trei ani mai târziu, Mozilla s-a alăturat proiectului. În 2010, Rust a fost prezentat la conferința Mozilla Summit. În același an, dezvoltarea a fost transferată la un compilator scris în Rust. Compilatorul a folosit ca bază de date sistemul universal de analiză și transformare a programelor LLVM.

Primul versiune stabilă limba a fost publicată în 2015. După lansarea versiunii alfa, Rust a suferit modificări - în compilator au rămas doar caracteristici gata făcute care nu se vor schimba. Orice altceva a fost mutat în secțiunea experimentală.

În centrul limbajului, Graydon Hoare a stabilit concepte precum:

  • Siguranță. Rust conține o serie de restricții de programare care sunt activate implicit. Pentru a le dezactiva, eticheta „nesigur” este necesară în blocuri și funcții.
  • Viteză. Limbajul este comparabil ca viteză cu un alt limbaj de programare, C++, care oferă un număr clar de avantaje pentru programator.
  • Paralelism. Sistemul poate efectua mai multe calcule simultan și, în același timp, pot interacționa între ele.
  • Concizie. Primul Cuvinte cheieîn Rust se potrivesc în cinci personaje. Dar mai târziu această restricție a fost ridicată.

Un exemplu de unul dintre primele coduri din Rust

Cu toate acestea, Rust nu este lipsită de dezavantaje, dintre care cele mai izbitoare sunt:

  • Redundanța codului.
  • Lipsa literaturii pentru învățarea limbilor străine.
  • Claritate în introducerea parametrilor de compilare. Acest lucru nu se potrivește întotdeauna programatorilor experimentați, deoarece alte limbi nu au reguli similare.

Cu toate acestea, limba este modernizată și extinsă în mod regulat: actualizările sale sunt lansate la fiecare 6 săptămâni.

Comparând Rust cu C++

Creatorii Rust îl consideră succesorul C++, care a apărut la începutul anilor 1980, când dezvoltatorul a venit cu mai multe îmbunătățiri ale limbajului C. Prin urmare, merită să comparăm limbajul tânăr și încă în schimbare cu cel testat în timp.

  • Accesarea memoriei de la distanță. În C++, ștergerea unei variabile poate cauza o serie de probleme. Astfel de complicații nu sunt posibile în Rust, deoarece nu are comenzi pentru ștergerea memoriei. Compilatorul descendent va raporta că codul pe care l-ați scris conține o eroare, iar compilatorul C++ va scoate rezultatul fără valorile eliminate, fără a raporta măcar problema.
  • Punct şi virgulă. Adăugarea unui punct și virgulă suplimentar la codul dvs. va provoca o eroare în C++, în timp ce în Rust corpul buclei este închis între acolade.
  • Cod nesigur. Rust are o etichetă „nesigur” care izolează codul principal de cele nesigure. În viitor, atunci când revizuiți codul, acest lucru vă permite să restrângeți căutarea vulnerabilităților.

Firefox a fost implementat în C++: acest limbaj capricios necesita o atenție sporită la detalii. În caz contrar, erorile s-au transformat în vulnerabilități grave. Rust a fost conceput pentru a rezolva această problemă.

Perspective

În clasamentul RedMonk pentru al treilea trimestru din 2018, limbajul de programare Mozilla ocupă în mod constant locul 23. Experții consideră că poziția sa nu este în pericol de a se îmbunătăți. În ciuda acestui fapt, în august 2018, creatorii au lansat Rust 1.28 actualizat.

După lansarea Rust în 2015, potrivit Stack Overflow, 74% dintre dezvoltatori au dorit să se familiarizeze cu acesta. Cu toate acestea, deja în 2016, a trecut pe primul loc: 79% dintre utilizatori au numit Rust drept limbajul lor de programare preferat și și-au exprimat dorința de a continua să lucreze cu el. Rugina a ocupat primul loc în acest parametru în 2018.

Stack Overflow este un sistem popular de întrebări și răspunsuri de programare dezvoltat în 2008.

Popularitatea Rust este confirmată de numărul de companii care îl folosesc în dezvoltarea lor. În prezent, această listă include 105 organizații.

Rust se dezvoltă în mod constant, cu noi funcții și remedieri introduse la fiecare 6 săptămâni cu fiecare lansare. De asemenea, erorile observate sunt corectate prompt în versiunile minore neregulate. Uneori, o astfel de dinamică de dezvoltare poate servi chiar ca un obstacol: multe biblioteci „vii” necesită versiune noua compilator, dar nu orice companie este capabilă să-l actualizeze rapid în proiectele lor.

Deși infrastructura din jurul Rust se dezvoltă, rămâne totuși brută. Multe biblioteci, deși funcționează deja destul de stabil, necesită totuși modificări minore în utilizare reală. Dacă sunteți gata să introduceți astfel de biblioteci pe GitHub și să le modificați ușor pentru a se potrivi nevoilor dvs., atunci cred că nu ar trebui să mai aveți probleme speciale cu utilizarea Rust în proiecte de luptă.

Din câte știu, nu există încă o colecție unică de bune practici pentru utilizarea Rust. Mult sfaturi utile se află în documentația oficială (în așa-numitele Cărți) și este, de asemenea, împrăștiată în diferite articole separate. Cu toate acestea, există liste de articole utile care vă vor ajuta să găsiți ceea ce aveți nevoie. De exemplu acestea:
https://github.com/ctjhoa/rust-learning
https://github.com/brson/rust-anthology/blob/maste...

Noi proiecte folosesc Rust, iar până acum tendința este spre extindere. Aici, pe această pagină, puteți vedea ce companii folosesc Rust acum și de ce: https://www.rust-lang.org/en-US/friends.html

Deci, dacă intenționați să utilizați Rust în producție, iată la ce să vă așteptați:

  1. O barieră destul de mare pentru intrarea în limbă. Nu există nicio dificultate deosebită aici, necesită doar practică în limbaj și, la început, timp să urmați sfaturile compilatorului privind eliminarea erorilor de compilare care apar constant.
  2. Suficient actualizări frecvente compilator pentru a adăuga noi caracteristici limbajului. Acest lucru poate duce la faptul că biblioteca de care aveți nevoie va necesita o nouă versiune a compilatorului.
  3. Biblioteci umede. Probabil va trebui să le modificați ușor pentru a se potrivi nevoilor dvs.
  4. Rugina simplifică complexul, dar complică simplul. Pentru proiecte foarte simple care nu necesită performanțe ridicate și îmbunătățiri majore în viitor, Rust poate să nu fie cea mai bună alegere.
Dar ce obțineți din folosirea Rust?
  1. Performanță ridicată a programului control automat memorie fără un colector de gunoi.
  2. Fiabilitate ridicată și securitate a programelor, eliminând cantitate mare potenţiale probleme în etapa de compilare.
  3. Un proces destul de ușor și sigur de refactorizare și modificare a programelor, datorită sistemului de tip dezvoltat.
  4. Dezvoltarea unui sistem de management al dependenței de proiecte.
  5. Un instrument complet bun: Rust este potrivit atât pentru prototipare și dezvoltare, cât și pentru orice tip de program (utilități, aplicații desktop, aplicații web, aplicatii mobile, sisteme integrate). Un suport bun nu este încă disponibil pentru toate, dar în viitor acesta este un mare plus.