Rust și Go sunt atât de minunat
În primul rând, este foarte important să spunem că atât Go și Rust sunt limbaje de programare absolut excelente. Sunt moderne, puternice, adoptate pe scară largă și oferă performanțe excelente. Este posibil să fi citit articole și postări pe blog cu scopul de a vă convinge că Go este mai bun decât Rust sau invers. Dar asta chiar nu are sens; fiecare limbaj de programare reprezintă un set de compromisuri. Fiecare limbă este optimizată pentru lucruri diferite, astfel încât alegerea dvs. de limbă ar trebui să fie determinată de ceea ce vi se potrivește și de problemele pe care doriți să le rezolvați cu ea.
în acest articol, voi încerca să dau o scurtă trecere în revistă a locului în care cred că Go este alegerea ideală și unde cred că rugina este o alternativă mai bună. În mod ideal, totuși, ar trebui să aveți o familiaritate de lucru cu ambele limbi. Deși sunt foarte diferite în sintaxă și stil, atât Rust, cât și Go sunt instrumente de primă clasă pentru construirea software-ului. Acestea fiind spuse, să aruncăm o privire mai atentă asupra celor două limbi.
asemănările
Rust și Go au multe în comun, acesta fiind unul dintre motivele pentru care le auziți adesea menționate împreună. Care sunt unele dintre obiectivele comune ale ambelor limbi?
Rust este un limbaj de programare multi-paradigmă de nivel scăzut, care se concentrează pe siguranță și performanță.
—Gints Dreimanis
Go este un limbaj de programare open source, care îl face ușor de a construi software simplu, de încredere, și eficient.
—Golang.org
siguranța memoriei
atât Go, cât și Rust aparțin grupului de limbaje de programare moderne a căror prioritate este siguranța memoriei. A devenit clar de-a lungul multor decenii de utilizare a limbilor mai vechi, cum ar fi C și C++, că una dintre cele mai mari cauze ale erorilor și vulnerabilităților de securitate este accesarea memoriei în mod nesigur sau incorect. Rust și Go se ocupă de această problemă în moduri diferite, dar ambele își propun să fie mai inteligente și mai sigure decât alte limbi în ceea ce privește gestionarea memoriei și să vă ajute să scrieți programe corecte și performante.
executabile rapide și compacte
sunt ambele limbi compilate, ceea ce înseamnă că programele dvs. sunt traduse direct în codul mașinii executabile, astfel încât să puteți implementa Programul ca un singur fișier binar; spre deosebire de limbile interpretate, cum ar fi Python și Ruby, nu este nevoie să distribuiți un interpret și o mulțime de biblioteci și dependențe împreună cu programul dvs., ceea ce este un mare plus. Acest lucru face ca programele Rust și Go să fie extrem de rapide în comparație cu limbile interpretate.
limbaje de uz General
Rust și Go sunt, de asemenea, ambele limbaje de programare de uz general puternice, scalabile, pe care le puteți utiliza pentru a dezvolta tot felul de software modern, de la aplicații web la microservicii distribuite sau de la microcontrolere încorporate la aplicații mobile. Ambele au biblioteci standard excelente și un ecosistem terț înfloritor, precum și un suport comercial excelent și o bază mare de utilizatori. Ambele au fost în jur de mulți ani și vor continua să fie utilizate pe scară largă pentru anii următori. Învățarea fie du-te sau rugina astăzi va fi o investiție de sunet de timp și efort.
stil de programare Pragmatic
nici nu sunt în primul rând limbaje funcționale (cum ar fi Scala sau Elixir, de exemplu) și nici nu sunt orientate exclusiv pe obiecte (cum ar fi Java și C#). În schimb, în timp ce Go și Rust au caracteristici asociate cu programarea funcțională și orientată pe obiecte, sunt limbaje pragmatice care vizează rezolvarea problemelor în orice mod este cel mai potrivit, mai degrabă decât să vă forțeze într-un anumit mod de a face lucrurile. (Dacă vă place stilul funcțional de programare, totuși, veți găsi mult mai multe facilități pentru aceasta în Rust, deoarece Rust are mult mai multe facilități decât Go în general.)
putem dezbate despre ce este un limbaj “orientat pe obiecte”, dar este corect să spunem că stilul de programare orientat pe obiecte la care s-ar aștepta utilizatorii C++, Java sau C# nu este prezent nici în Go, nici în Rust.
—Jack Mott
dezvoltare la scară
atât Rust, cât și Go au câteva caracteristici utile care le fac potrivite pentru programare în mare, indiferent dacă asta înseamnă Echipe mari, sau baze de cod mari, sau ambele.
de exemplu, în timp ce programatorii C au argumentat de ani de zile despre unde să-și pună parantezele și dacă codul ar trebui să fie indentat cu File sau spații, atât Rust, cât și Go elimină complet aceste probleme utilizând un instrument de formatare standard (gofmt
pentru Go,rustfmt
pentru Rust) care rescrie codul dvs. automat folosind stilul canonic. Nu este faptul că acest stil special este atât de minunat în sine: este standardizarea pe care programatorii Rust și Go o apreciază.
> gofmt
stilul nu este preferatul nimănui, dar gofmt
este preferatul tuturor.
—Rob Pike
Un alt domeniu în care ambele limbi au un scor ridicat este în conducta de construire. Ambele au excelente, built-in, de înaltă performanță standard construi și instrumente de gestionare a dependenței; nu mai lupta cu sisteme complexe terțe părți construi și având de a învăța unul nou la fiecare doi ani.
Building Go and Rust code, venind dintr-un fundal Java și Ruby în cariera mea timpurie, m-am simțit ca o greutate imposibilă de pe umerii mei. Când eram la Google, a fost o ușurare să întâlnesc un serviciu scris în Go, pentru că știam că va fi ușor de construit și de rulat. Acest lucru a fost valabil și pentru Rust, deși am lucrat doar la asta la o scară mult mai mică. Sper că zilele sistemelor de construcție infinit configurabile sunt moarte, iar limbile sunt livrate cu propriile lor instrumente de construcție construite special, care funcționează doar din cutie.
—Sam Rose
deci, ce e tot tam-tam despre?
având în vedere toate acestea și văzând că ambele limbi sunt atât de bine concepute și puternice, s-ar putea să vă întrebați despre ce sunt toate războaiele sfinte (și eu). De ce oamenii fac atâta tam-tam despre ‘Go versus Rust’, intră în rețelele sociale furioase și scriu postări lungi pe blog despre cum doar un idiot ar folosi Rust, sau că Go nu este un limbaj de programare real sau orice altceva. S-ar putea să-i facă să se simtă mai bine, dar nu vă ajută exact, deoarece cineva încearcă să decidă ce limbă să folosească pentru proiectul dvs. sau care ar trebui să învățați să vă avansați cariera de programare. O persoană înțeleaptă nu face alegeri importante în funcție de cine strigă cel mai tare.
să continuăm discuția noastră adultă acum analizând câteva domenii în care o persoană rezonabilă ar putea prefera o limbă în locul celeilalte.
Performance
am spus că atât Go, cât și Rust produc programe extrem de rapide, deoarece sunt compilate la codul mașinii native, fără a fi nevoie să treacă printr-un interpret sau o mașină virtuală. Cu toate acestea, performanța Rust este deosebit de remarcabilă. Este comparabil cu C și C++, care sunt adesea considerate ca fiind cele mai performante limbaje compilate, dar spre deosebire de aceste limbi mai vechi, oferă, de asemenea, siguranță în memorie și siguranță în concurență, în esență, fără costuri în viteza de execuție. Rust vă permite, de asemenea, să creați abstracții complexe fără a plăti o penalizare de performanță în timpul rulării.
prin comparație, deși programele Go funcționează extrem de bine, Go este conceput în primul rând pentru viteza de dezvoltare (inclusiv compilarea), mai degrabă decât viteza de execuție. Compilatorul Go nu petrece mult timp încercând să genereze cel mai eficient Cod posibil al mașinii; îi pasă mai mult de compilarea rapidă a multor coduri. Deci, rugina va bate, de obicei, du-te în repere run-time.
performanța în timpul rulării Rust este, de asemenea, consecventă și previzibilă, deoarece nu folosește colectarea gunoiului. Go ‘ s garbage collector este foarte eficient și este optimizat pentru a face pauzele stop-the-world cât mai scurte posibil (și pentru a deveni mai scurte cu fiecare nouă versiune Go). Dar colectarea gunoiului introduce inevitabil o anumită imprevizibilitate în modul în care se comportă programele, ceea ce poate fi o problemă serioasă în unele aplicații, cum ar fi sistemele încorporate.
deoarece Rust își propune să ofere programatorului un control complet al hardware-ului de bază, este posibil să optimizeze programele Rust pentru a fi destul de aproape de performanța teoretică maximă a mașinii. Acest lucru face ca Rust să fie o alegere excelentă pentru zonele în care viteza de execuție depășește toate celelalte considerente, cum ar fi programarea jocurilor, nucleele sistemului de operare, componentele browserului web și sistemele de control în timp real.
simplitate
nu contează cât de rapid este un limbaj de programare dacă nimeni nu își poate da seama cum să-l folosească. Go a fost conceput în mod deliberat ca o reacție împotriva complexității tot mai mari a limbajelor precum C++; are foarte puțină sintaxă, foarte puține cuvinte cheie și, într-adevăr, puține caracteristici. Aceasta înseamnă că nu durează mult să înveți limba Go până la punctul în care poți scrie programe utile în ea.
Go este incredibil de ușor de învățat. Știu că acest lucru este un beneficiu de multe ori touted, dar am fost foarte surprins de cât de repede am fost capabil de a fi productiv. Datorită limbajului, documentelor și instrumentelor, scriam un cod interesant, angajabil, după literalmente două zile.
—primele impresii ale du-te de la un programator Rust
cuvântul cheie aici este simplitatea. Simplu nu este la fel de ușor, cu siguranță, dar un limbaj mic și simplu este mai ușor de învățat decât unul mare și complex. Nu există atât de multe moduri diferite de a face lucrurile, astfel încât toate codurile Go bine scrise tind să arate la fel. Este ușor să vă scufundați într-un serviciu necunoscut și să înțelegeți ce face.
fmt.Println("Gopher's Diner Breakfast Menu")for dish, price := range menu { fmt.Println(dish, price)}
(în seria Code Club, fac exact asta: alegeți proiectele Go semi-aleatoriu din GitHub și explorați-le cu un grup de începători Go, pentru a vedea cât de mult din cod putem înțelege. Întotdeauna se dovedește a fi mai mult decât ne așteptam!)
deși limbajul de bază este mic, biblioteca standard Go este foarte puternic. Asta înseamnă că curba dvs. de învățare va trebui, de asemenea, să includă părțile bibliotecii standard de care aveți nevoie, nu doar sintaxa Go. Pe de altă parte, mutarea funcționalității din limbă și în biblioteca standard înseamnă că vă puteți concentra pe învățarea numai a bibliotecilor relevante pentru dvs. chiar acum.
Go este, de asemenea, proiectat pentru dezvoltarea de software la scară, cu codebases mari și echipe mari. În aceste situații, este important ca noii dezvoltatori să se poată ridica la viteză cât mai repede posibil.
cu Go, faci lucrurile rapid. Go este una dintre cele mai productive limbi cu care am lucrat vreodată. Mantra este: > rezolva probleme reale astăzi> .
—Matthias Endler
caracteristici
Rust suportă mai multă complexitate decât alte câteva limbaje de programare, prin urmare, puteți obține mai mult cu ea. De exemplu, susține generice.
—Devathon
Rust este special conceput pentru a include o mulțime de caracteristici puternice și utile pentru a ajuta programatorii face cel mai mult cu cel Cod. De exemplu, funcția Rust match
vă permite să scrieți o logică flexibilă și expresivă destul de concis:
fn is_prime(n: u64) -> bool { match n { 0...1 => false, _ => !(2..n).any(|d| n % d == 0), }}
deoarece Rust face multe, înseamnă că sunt multe de învățat, mai ales la început. Dar este în regulă: există multe de învățat și în C++ sau Java și nu obțineți funcțiile avansate care vin cu Rust, cum ar fi siguranța memoriei. A-l critica pe Rust pentru că este un limbaj complex nu are rost: este conceput pentru a fi expresiv, ceea ce înseamnă că are o mulțime de caracteristici și, în multe situații, asta îți dorești de la un limbaj de programare. Există o curbă de învățare, cu siguranță, dar odată ce ești în funcțiune cu ea, vei fi bine.
Rust concurează pentru mindshare cu C++ și D pentru programatorii care sunt pregătiți să accepte sintaxă și semantică mai complexe (și costuri de lizibilitate probabil mai mari) în schimbul performanței maxime posibile.
—Dave Cheney
concurenta
cele mai multe limbi au o formă de sprijin pentru programare concurente (face mai multe lucruri la o dată), dar Go a fost proiectat pentru acest loc de muncă de la sol în sus. În loc să utilizeze fire de sistem de operare, Go oferă o alternativă ușoară: goroutines. Fiecare goroutine este o funcție Go executantă independent, pe care planificatorul Go o va mapa la unul dintre firele OS aflate sub controlul său. Aceasta înseamnă că Planificatorul poate gestiona foarte eficient un număr mare de goroutine concurente, folosind doar un număr limitat de Fire OS.în consecință ,puteți rula milioane de goroutine concurente într-un singur program fără a crea probleme grave de performanță. Acest lucru face ca Go să fie alegerea perfectă pentru aplicații concurente la scară largă, cum ar fi serverele web și microserviciile.
Go oferă, de asemenea, modalități rapide, sigure și eficiente pentru goroutines de a comunica și partaja date, folosind canale. Suportul de concurență al Go se simte bine conceput și este o plăcere de utilizat. Raționamentul despre programele concurente este greu în general, iar construirea unor programe concurente fiabile și corecte este o provocare în orice limbă. Deoarece a fost construit în limba de la început, deși, în loc de a fi un gând ulterior, programarea concurentă în Go este la fel de simplă și bine integrată pe cât ar putea fi în mod rezonabil.
Go face foarte ușor de a construi o aplicație frumos factored care profită din plin de concurență în timp ce este implementat ca un set de microservicii. Rust poate face și aceste lucruri, dar este, fără îndoială, un pic mai dur. În unele privințe, obsesia lui Rust de a preveni vulnerabilitățile de securitate legate de memorie înseamnă că programatorii trebuie să facă tot posibilul pentru a îndeplini sarcini care ar fi mai simple în alte limbi, inclusiv Go.
—Sonya Koptyev
povestea concurenței în Rust este foarte nouă, prin comparație, și încă se stabilizează, dar este în curs de dezvoltare foarte activă, așa că urmăriți acest spațiu. De exemplu, biblioteca raionului Rust oferă un mod foarte elegant și ușor de a transforma calculele secvențiale în cele paralele.
având sintaxă ușor pentru reproducere rutine du-te și folosind canale sunt foarte frumos. Arată cu adevărat puterea sintaxei că astfel de detalii mici fac programarea concurentă să se simtă mult mai plăcută decât în alte limbi.
—primele impresii despre Go de la un programator Rust
deși poate fi puțin mai simplu să implementați programe concurente în Rust, este încă posibil, iar aceste programe pot profita de garanțiile Rust cu privire la siguranță. Un bun exemplu este biblioteca standard Mutex
clasa: în Go, puteți uita să obțineți o blocare mutex înainte de a accesa ceva, dar Rust nu vă va lăsa să faceți asta.
Go este axat pe concurență ca un concept de primă clasă. Asta nu înseamnă că nu puteți găsi aspecte ale concurenței orientate spre actorul lui Go în Rust, dar este lăsat ca un exercițiu pentru programator.
—Dave Cheney
siguranță
am văzut mai devreme că atât du-te și rugina scop, în moduri diferite, pentru a preveni o clasă mare de erori de programare comune, de a face cu managementul memoriei. Dar rugina, în special, merge la lungimi mari pentru a vă asigura că nu puteți face ceva nesigur pe care nu ați vrut să-l faceți.
compilatorul foarte strict și pedant al lui Rust verifică fiecare variabilă pe care o utilizați și fiecare adresă de memorie pe care o referiți. Evită posibilele condiții de cursă a datelor și vă informează despre un comportament nedefinit. Problemele de concurență și de siguranță a memoriei sunt fundamental imposibil de obținut în subsetul sigur al Rust.
– De ce rugina?
Acest lucru va face programarea în Rust o experiență diferită de aproape toate celelalte limbi și poate fi una provocatoare la început. Dar pentru mulți oameni, munca grea merită.
pentru mine avantajul cheie al Rust este un sentiment că compilatorul are spatele meu și nu va lăsa prin orice bug ar putea detecta, eventual, (serios, se simte ca magie, uneori).
—Grzegorz Nosek
multe limbi, inclusiv Go, au facilități pentru a ajuta programatorii să evite greșelile, dar Rust duce acest lucru la un nou nivel, astfel încât programele potențial incorecte nici măcar nu vor compila.
cu Rust, programatorul bibliotecii are o mulțime de instrumente pentru a preveni greșelile utilizatorilor. Rust ne oferă posibilitatea de a spune că noi > deținem> o anumită bucată de date; nu este posibil ca nimic altceva să pretindă proprietatea, așa că știm că nimic altceva nu va putea să-l modifice. Nu mă pot gândi la un moment în care mi s-au dat vreodată atât de multe instrumente pentru a preveni abuzul accidental. E un sentiment minunat.
—Sam Rose
“lupta cu verificatorul de împrumut” este un sindrom comun pentru noii programatori Rust, dar în majoritatea cazurilor problemele pe care le găsește sunt erori autentice (sau cel puțin potențiale erori) în codul dvs. S-ar putea să vă forțeze să vă re-arhitectați fundamental programul pentru a evita să vă confruntați cu aceste probleme; și acesta este un lucru bun, când corectitudinea și fiabilitatea sunt prioritatea dvs. principală. Ce rost are o limbă care nu schimbă modul în care programezi? Lecțiile pe care Rust le învață despre siguranță pot fi utile și atunci când lucrați în alte limbi.
dacă alegeți Rust, de obicei aveți nevoie de garanțiile pe care le oferă limba: siguranță împotriva indicatoarelor nule și a curselor de date, comportament previzibil în timpul rulării și control total asupra hardware-ului. Dacă nu aveți nevoie de niciuna dintre aceste caracteristici, Rust ar putea fi o alegere slabă pentru următorul dvs. proiect. Asta pentru că aceste garanții vin cu un cost:timp de creștere. Va trebui să dezvățați obiceiurile proaste și să învățați noi concepte. Șansele sunt că veți lupta mult cu verificatorul de împrumut atunci când începeți.
—Matthias Endler
cât de provocator găsiți modelul de programare Rust depinde probabil de experiența anterioară pe care o aveți în alte limbi. Programatorii Python sau Ruby îl pot considera restrictiv; alții vor fi încântați.
Dacă sunteți un programator C sau C++ care a petrecut săptămâni întregi urmărind bug-uri de siguranță a memoriei în aceste limbi, veți aprecia cu adevărat Rust. “Lupta cu verificatorul de împrumut “devine” compilatorul poate detecta asta? Super!”
—Grzegorz Nosek
scară
programele de server de astăzi cuprind zeci de milioane de linii de cod, sunt lucrate de sute sau chiar mii de programatori și sunt actualizate literalmente în fiecare zi. Go a fost proiectat și dezvoltat pentru a face munca în acest mediu mai productivă. Considerațiile de proiectare ale Go includ gestionarea riguroasă a dependenței, adaptabilitatea arhitecturii software pe măsură ce sistemele cresc și robustețea peste granițele dintre componente.
—Rob Pike
când lucrați la o problemă de unul singur sau în Echipe mici, alegerea unei limbi simple sau a unei limbi bogate este o chestiune de preferință. Dar, pe măsură ce software-ul devine mai mare și mai complex, iar echipele cresc, diferențele încep să se arate. Pentru aplicațiile mari și sistemele distribuite, viteza de execuție este mai puțin importantă decât viteza de dezvoltare: un limbaj deliberat minim precum Go reduce timpul de rampă pentru noii dezvoltatori și le facilitează lucrul cu o bază de cod mare.
cu Go, este mai ușor ca dezvoltator junior să fie mai productiv și mai greu ca dezvoltator de nivel mediu să introducă abstracții fragile care vor cauza probleme pe linie. Din aceste motive, Rust este mai puțin convingător decât Go pentru dezvoltarea de software pentru întreprinderi.
—Loris Cro
când vine vorba de dezvoltarea de software în mare, clar este mai bine decât inteligent. Limitările Go îl fac de fapt mai potrivit pentru întreprinderi și organizații mari decât limbi mai complexe și mai puternice, cum ar fi Rust.
diferențele
deși Rust și Go sunt ambele limbi populare, moderne, utilizate pe scară largă, nu sunt cu adevărat concurenți, în sensul că vizează în mod deliberat cazuri de utilizare destul de diferite. Întreaga abordare a programării Go este radical diferită de cea a lui Rust și fiecare limbă se va potrivi unor oameni în timp ce îi irită pe alții. Este absolut în regulă și dacă atât Rust, cât și Go ar face mai mult sau mai puțin aceleași lucruri în mai mult sau mai puțin în același mod, nu am avea nevoie de două limbi diferite.
deci, putem obține un sentiment de naturi respective de rugină și du-te de a găsi probleme pe care le iau abordări drastic diferite? Să aflăm.
colectarea gunoiului
“a colecta gunoi sau a nu colecta gunoi” este una dintre acele întrebări care nu au un răspuns corect. Colectarea gunoiului și gestionarea automată a memoriei în general fac rapidă și ușoară dezvoltarea unor programe fiabile și eficiente, iar pentru unii oameni acest lucru îl face esențial. Dar alții spun că colectarea gunoiului, cu performanțele sale aeriene și opririle din lume, face ca programele să se comporte imprevizibil în timpul rulării și introduce o latență inacceptabilă. Dezbaterea continuă.
Go este un limbaj foarte diferit de Rust. Deși ambele pot fi vag descrise ca limbaje de sistem sau înlocuiri pentru C, ele au obiective și aplicații diferite, stiluri de proiectare a limbajului și priorități. Colectarea gunoiului este un diferențiator foarte mare. Având GC în Go face limba mult mai simplu și mai mici, și ușor de motiv despre.
lipsa GC în Rust îl face foarte rapid (mai ales dacă aveți nevoie de latență garantată, nu doar de randament ridicat) și permite caracteristici și modele de programare care nu sunt posibile în Go (sau cel puțin nu fără a sacrifica performanța).
—PingCAP
aproape de metal
istoria programării pe calculator a fost o poveste de abstracții din ce în ce mai sofisticate care permit programatorului să rezolve probleme fără să se îngrijoreze prea mult despre modul în care funcționează efectiv mașina de bază. Acest lucru face programele mai ușor de scris și poate mai portabile. Dar pentru multe programe, accesul la hardware și controlul precis al modului în care este executat programul sunt mai importante. Rust își propune să permită programatorilor să se “apropie de metal”, cu mai mult control, dar Go abstractizează detaliile arhitecturale pentru a permite programatorilor să se apropie de problemă.
ambele limbi au un domeniu de aplicare diferit. Golang strălucește pentru scrierea microserviciilor și pentru sarcinile tipice “DevOps”, dar nu este un limbaj de programare a sistemelor. Rugina este mai puternică pentru sarcinile în care concurența, siguranța și/sau performanța sunt importante; dar are o curbă de învățare mai abruptă decât Go.
—Matthias Endler
trebuie să meargă mai repede
am scris în altă parte că performanța este mai puțin importantă decât lizibilitatea pentru majoritatea programelor. Dar când performanța contează, contează cu adevărat. Rust face o serie de compromisuri de proiectare pentru a obține cea mai bună viteză de execuție posibilă. În schimb, Go este mai preocupat de simplitate și este dispus să sacrifice o performanță (run-time) pentru aceasta. Dar viteza de construire a lui Go este imbatabilă și acest lucru este important pentru bazele de cod mari.
rugina este mai rapidă decât Go. În reperele de mai sus, rugina a fost mai rapidă și, în unele cazuri, un ordin de mărime mai rapid. Dar înainte de a fugi alegând să scrieți totul în Rust, considerați că Go nu a fost atât de departe în multe dintre aceste repere și este încă mult mai rapid decât Java, C#, JavaScript, Python și așa mai departe.
dacă ceea ce aveți nevoie este performanța de top-of-the-line, atunci veți fi înainte de joc alegând oricare dintre aceste două limbi. Dacă construiți un serviciu web care gestionează sarcini mari, pe care doriți să le puteți scala atât pe verticală, cât și pe orizontală, oricare dintre limbi vă va potrivi perfect.
—Andrew Lader
corectitudine
Pe de altă parte, un program poate fi arbitrar de rapid dacă nu trebuie să funcționeze corect. Majoritatea codurilor nu sunt scrise pe termen lung, dar este adesea surprinzător cât timp unele programe pot rămâne în funcțiune în producție: în unele cazuri, multe decenii. În aceste situații, merită să luați puțin timp suplimentar în dezvoltare pentru a vă asigura că programul este corect, fiabil și nu va avea nevoie de multă întreținere în viitor.
my take: du-te pentru codul care trebuie să livreze mâine, rugina pentru codul care trebuie să păstreze rulează neatins pentru următorii cinci ani.
—Grzegorz Nosek
în timp ce atât Go cât și Rust sunt alegeri excelente pentru orice proiect serios, este o idee bună să vă informați cât mai bine despre fiecare limbă și caracteristicile sale. În cele din urmă, nu contează ce crede altcineva: doar tu poți decide care este potrivit pentru tine și echipa ta.
Dacă doriți să se dezvolte mai repede, probabil pentru că aveți mai multe servicii diferite pentru a scrie, sau aveți o echipă mare de dezvoltatori, atunci du-te este limba de alegere. Go vă oferă concurență ca cetățean de primă clasă și nu tolerează accesul nesigur la memorie (nici Rust), dar fără a vă forța să gestionați fiecare ultim detaliu. Go este rapid și puternic, dar evită bogging dezvoltator în jos, concentrându-se în schimb pe simplitate și uniformitate. Dacă, pe de altă parte, stoarcerea fiecărei ultime uncii de performanță este o necesitate, atunci rugina ar trebui să fie alegerea ta.
—Andrew Lader
concluzie
sper că acest articol te-a convins că atât Rust, cât și Go merită atenția ta serioasă. Dacă este posibil, ar trebui să încercați să obțineți cel puțin un nivel de experiență în ambele limbi, deoarece acestea vă vor fi incredibil de utile în orice carieră tehnologică sau chiar dacă vă place programarea ca hobby. Dacă aveți timp să investiți bine în învățarea unei limbi, nu luați decizia finală până când nu ați folosit atât Go, cât și Rust pentru o varietate de tipuri diferite de programe, mari și mici.
și cunoașterea unui limbaj de programare este într-adevăr doar o mică parte din a fi un inginer software de succes. De departe, cele mai importante abilități de care veți avea nevoie sunt proiectarea, ingineria, arhitectura, comunicarea și colaborarea. Dacă excelați la acestea, veți fi un inginer software excelent, indiferent de alegerea limbii. Învățare fericită!
comparând Rust și Go Cod
există un site mare numit programming-idioms.org care are o “foaie de înșelăciune” care arată cum arată codul Rust and Go pentru peste 200 de sarcini comune de programare:
- Go vs Rust idioms
Noțiuni de bază
Dacă sunteți interesat în procesul de învățare pentru a programa cu Rust și du-te, aici sunt câteva resurse s-ar putea găsi de ajutor.
du-te
- Instalați Du-te
- Go tutoriale de Bitfield
- pentru dragostea de du-te
- un tur de du-te
- du-te de exemplu
- terenul de joacă Du-te
- minunat du-te
Rust
- instalați Rust
- o introducere blând la Rust
- limbajul de programare Rust
- cărți rust
- rust de exemplu
- locul de joacă Rust
- o sută de binare rust
li>
mulțumiri
nu sunt suficient de tânăr pentru a ști totul, așa cum se spune, așa că sunt foarte recunoscător unui număr de goperi distinși cine și-a făcut timp să revizuiască și să corecteze această piesă, precum și să ofere câteva sugestii cu adevărat utile. Mulțumirile mele speciale merg la Bill Kennedy, Grzegorz Nosek, Sam Rose, Jack Mott, Steve Klabnik, mn Mark, Ola Nordstrom, Levi Lovelock, Emile Pels, Sebastian Lauwers, Carl Lerche, și toți ceilalți care au contribuit. S-ar putea să aveți impresia că citind online hot ia că comunitățile Rust și Go nu se înțeleg. Nimic nu ar putea fi mai departe de adevăr, în experiența mea; am avut discuții foarte civilizate și fructuoase despre proiectul articolului și a făcut o mare diferență pentru produsul finit. Mulțumesc din nou.
Leave a Reply