„Dezvoltatorii adoră Rust”, a proclamat ultimul sondaj Stack Overflow, lansat luna trecută.
Fundația Mozilla, cunoscută pentru popularul browser web Firefox și clienții de e-mail Thunderbird, lucrează de asemenea de ceva vreme la limbajul de programare Open Source. Mulți dezvoltatori au urmărit Rust cu anticipare, așteptând momentul potrivit pentru a începe construcția lucrurilor. Având în vedere că Rust a fost lansat in versiunea 1.0 în luna mai a anului trecut, acum este mai bine ca oricând începerea piratarii pe Rust!
Cu toate acestea, ca si cu orice limbaj sau instrument, este important să înțelegem ce probleme au fost introduse pentru a fi rezolvate de Rust și ce tipuri de soluții decurg din ea.
Mai mult ca C ++ și Go, mai puțin ca Node și Ruby
Deși Rust este un limbaj de uz general, puteți sa va scrieti aplicația web în Rust, dar nu veți experimenta cel mai bine ceea ce are de oferit. Rust este un limbaj low level, cel mai potrivit pentru sisteme încorporate și alte coduri critice de performanță. Deși este de crezut faptul că într-o zi oamenii vor scrie cele mai noi jocuri video 3D în Rust - o zonă în care înalta performanță a fost critica din punct de vedere istoric - este puțin probabil vreodata să aiba un cadru web care să mearga cot la cot cu Ruby on Rails.
Mai sigur decât C / C ++
Cea mai mare - și unii ar spune cea mai vitală - diferența dintre Rust și C ++ este accentul pe scrierea de “safe code”.
Cu „safe code”, obiectele sunt gestionate de limbajul de programare de la început până la sfârșit. Dezvoltatorul nu face nicio aritmetică indicatoare sau nu administrează memoria, așa cum poate fi necesar în programele C sau C ++.
Pentru un obiect dat, cantitatea corespunzătoare de memorie este promisă a fi alocată - sau, rezervată - pentru obiect. Când se acceseaza acest obiect, este imposibila accesarea din greșeală a unei locații de memorie care este în afara limitelor. Și atunci când lucrarea este terminată, obiectul va fi automat retras din sistem, ceea ce înseamnă că programatorul nu va trebui să „elibereze” manual sau să nu păstreze memoria folosită de acel obiect.
Cu un cod neadministrat, nu numai că este mai greu să scrieți un cod corect și fără bug, dar lasă codul mult mai vulnerabil la amenințările de securitate. O amenințare deosebit de comună este o revărsare de buffer, în care un utilizator poate introduce mai multe informații decât pot fi conținute în spațiul de memorie alocat al programului, permițând unui utilizator rău-intentionat să modifice memoria în părți ale sistemului care nu sunt sub controlul direct al codului.
Deși periculos, ocazional, “unsafe code” poate fi foarte util în realizarea unor câștiguri de performanță. Rust oferă programatorilor ce-i mai bun din ambele lumi, permițând scrierea unui cod nesigur, dar trecand implicit sub un cod sigur. În comparație, codul nesigur este implicit în C și C ++; in Rust, trebuie inscris în mod explicit codul nesigur cu cuvântul cheie “unsafe”.
Mai sofisticat decât Go
Go este un alt limbaj modern care își propune să permită programatorilor să scrie cod low-level, care este sigur pentru memorie și care are caracteristicile de performanță ale unui limbaj low-level. Obiectivele suplimentare ale limbajului de programare Go includ simplitatea si un suport simultan puternic prin canalele Go. Dar Go seamănă cu Node.js; în codul asincron este un cetățean de primă clasă al limbajului și nu se poate ignora simultaneitatea in scrierea codului Go.
Deși Rust este de asemenea excelent la programarea simultană, acesta nu este obiectivul principal al limbajului. Deși Rust nu se străduiește să fie complex de dragul complexitatii, limbajul nu se concentrează asupra simplității la fel de agresiv ca si Go. De exemplu, Go lasă frecvent in afara funcțiile considerate esențiale de alte limbaje, cum ar fi “generic types“, pentru a-si mentine obiectivul său de simplitate. Rust, pe de altă parte, este un limbaj destul de complex și este mult mai asemănător cu C ++.
Obiectivul limbajului Rust este să permită programarea rapidă, eficientă și memory safe a sistemelor de programare; simplitatea nu a fost niciodată apreciată ca unul dintre fundamentele sale de proiectare. Nicio abordare nu este fundamental mai bună, dar sunt abordări cu totul diferite pentru construirea unei limbi. Datorită acestei divergențe, majoritatea programatorilor vor avea o preferință puternică pentru un limbaj sau altul.
Modern Dependency si Build Management
O caracteristică cheie a majorității limbajelor de programare moderne este un instrument puternic de gestionare a pachetelor. Ruby are Gems și Bundler, Python are Pip ad PyPi, iar Node are mult iubitul - deși recent NPM și chiar Perl are venerabilul CPAN. Limbile C și C ++ nu au avut niciodată vreun instrument standard de gestionare a pachetelor.
Un limbaj ce contine un packaging system, are unele avantaje față de cele care nu au. Pentru început, cele mai multe dintre aceste limbaje au volume mari de libraries open-source și frameworks din care să poată apuca. Dacă sunteți un dezvoltator Ruby / Rails, acel ecosistem este atât de matur încât există un Gem potrivit pentru aproape orice puteți dori să realizați.
Libraries si frameworks nu numai că permit dezvoltatorilor să creeze mai rapid prin reutilizarea activității celorlalți, dar adesea pot duce la un cod mai bine testat și mai intens. O JSON library descărcată de 10.000 de utilizatori, cu 3.000 de probleme rezolvate și peste 100 de teste de unități este, de obicei, mult mai robustă decât media JSON library.
Un alt beneficiu al acestor package manageri este că face mult mai ușoara distribuirea codului către utilizatorii finali. În cele mai multe cazuri, este mult mai ușor să tastați „gem install sometool” sau „pip install sometool” decât să descărcați unele coduri C, să instalați corect toate dependențele sale, să le compilați și să le conectați la locul corespunzător din sistemul dvs. Aceasta se poate traduce direct în mai mulți utilizatori finali pentru software-ul dvs. și mai puțini useri gata sa renunte în timp ce încearca să-l instaleze.
Proiecte de viitor și actuale
În timp ce Rust încă se maturizează, există o susținere comunitară puternică pentru aceasta. Câteva exemple actuale de proiecte comunitare în creștere: Redox, un sistem de operare scris în Rust; Cgmath, o algebră liniară și computer graphics library; Iron, un framework simultan; și chiar un render Doom! Dacă sunteți curioși să testati Rust, puteti consulta Cartea de limbaj de programare Rust.