Rust e Go sono entrambi fantastici
In primo luogo, è davvero importante dire che sia Go che Rust sono linguaggi di programmazione assolutamente eccellenti. Sono moderni, potenti, ampiamente adottati e offrono prestazioni eccellenti. Potresti aver letto articoli e post di blog che mirano a convincerti che Go è meglio di Rust, o viceversa. Ma questo non ha davvero senso; ogni linguaggio di programmazione rappresenta un insieme di compromessi. Ogni lingua è ottimizzata per cose diverse, quindi la scelta della lingua dovrebbe essere determinata da ciò che ti si addice e dai problemi che vuoi risolvere con essa.
In questo articolo, cercherò di dare una breve panoramica di dove penso che Go sia la scelta ideale e dove penso che Rust sia un’alternativa migliore. Idealmente, però, si dovrebbe avere una familiarità di lavoro con entrambe le lingue. Mentre sono molto diversi per sintassi e stile, sia Rust che Go sono strumenti di prima classe per la creazione di software. Detto questo, diamo uno sguardo più da vicino alle due lingue.
Le somiglianze
Rust e Go hanno molto in comune, che è una delle ragioni per cui spesso le senti menzionate insieme. Quali sono alcuni degli obiettivi comuni di entrambe le lingue?
Rust è un linguaggio di programmazione multi-paradigma a basso livello tipizzato staticamente che si concentra sulla sicurezza e sulle prestazioni.
—Gints Dreimanis
Go è un linguaggio di programmazione open source che rende facile costruire software semplice, affidabile ed efficiente.
—Golang.org
Sicurezza della memoria
Sia Go che Rust appartengono al gruppo di linguaggi di programmazione moderni la cui priorità è la sicurezza della memoria. È diventato chiaro nel corso di molti decenni di utilizzo di linguaggi precedenti come C e C++ che una delle maggiori cause di bug e vulnerabilità di sicurezza è l’accesso alla memoria in modo non sicuro o errato. Rust e Go affrontano questo problema in modi diversi, ma entrambi mirano ad essere più intelligenti e più sicuri di altri linguaggi sulla gestione della memoria e ad aiutarti a scrivere programmi corretti e performanti.
Veloce, compatto eseguibili
Sono entrambi linguaggi compilati, il che significa che i programmi sono tradotti direttamente eseguibile in codice macchina, in modo che è possibile distribuire il programma come un singolo file binario; a differenza di linguaggi interpretati come Python e Ruby, non è necessario distribuire un interprete e un sacco di librerie e dipendenze insieme con il vostro programma, che è un grande vantaggio. Ciò rende anche i programmi Rust e Go estremamente veloci rispetto ai linguaggi interpretati.
General-purpose languages
Rust e Go sono anche entrambi potenti linguaggi di programmazione general-purpose scalabili, che è possibile utilizzare per sviluppare tutti i tipi di software moderni, dalle applicazioni web ai microservizi distribuiti, o dai microcontrollori embedded alle app mobili. Entrambi hanno eccellenti librerie standard e un fiorente ecosistema di terze parti, oltre a un ottimo supporto commerciale e una vasta base di utenti. Sono entrambi in circolazione da molti anni e continueranno ad essere ampiamente utilizzati per gli anni a venire. Imparare o Andare o ruggine oggi sarà un buon investimento del vostro tempo e fatica.
Stile di programmazione pragmatico
Né sono principalmente linguaggi funzionali (come Scala o Elixir, per esempio), e né sono esclusivamente orientati agli oggetti (come Java e C#). Invece, mentre sia Go che Rust hanno caratteristiche associate alla programmazione funzionale e orientata agli oggetti, sono linguaggi pragmatici volti a risolvere i problemi in qualsiasi modo sia più appropriato, piuttosto che costringerti in un particolare modo di fare le cose. (Se ti piace lo stile funzionale della programmazione, però, troverai molte più strutture in Rust, perché Rust ha molte più strutture di Go in generale.)
Possiamo discutere su cosa sia un linguaggio “orientato agli oggetti”, ma è giusto dire che lo stile di programmazione orientata agli oggetti che gli utenti di C++, Java o C# si aspetterebbero non è presente né in Go né in Rust.
– Jack Mott
Sviluppo su scala
Sia Rust che Go hanno alcune caratteristiche utili che li rendono adatti per la programmazione in grandi, sia che si tratti di grandi squadre, o grandi basi di codice, o entrambi.
Ad esempio, mentre i programmatori C hanno discusso per anni su dove mettere le loro parentesi e se il codice debba essere rientrato con schede o spazi, sia Rust che Go eliminano completamente tali problemi utilizzando uno strumento di formattazione standard (gofmt
per Go,rustfmt
per Rust) che riscrive automaticamente il codice usando lo stile canonico. Non è che questo particolare stile sia così meraviglioso di per sé: è la standardizzazione che i programmatori Rust e Go apprezzano.
> gofmt
non è il preferito di nessuno, eppure gofmt
è il preferito di tutti.
—Rob Pike
Un’altra area in cui entrambe le lingue hanno un punteggio elevato è nella pipeline di compilazione. Entrambi hanno eccellenti, built-in, ad alte prestazioni standard di costruzione e di gestione delle dipendenze strumenti; non più alle prese con complessi sistemi di costruzione di terze parti e di dover imparare uno nuovo ogni due anni.
Costruire Go and Rust code, provenendo da uno sfondo Java e Ruby all’inizio della mia carriera, mi sembrava un peso impossibile dalle mie spalle. Quando ero a Google, è stato un sollievo imbattersi in un servizio che è stato scritto in Go, perché sapevo che sarebbe stato facile da costruire ed eseguire. Questo è stato vero anche per Rust, anche se ho lavorato solo su scala molto più piccola. Spero che i giorni dei sistemi di build infinitamente configurabili siano morti e che le lingue siano tutte fornite con i propri strumenti di build appositamente progettati che funzionano appena fuori dalla scatola.
—Sam Rose
Quindi di cosa si tratta?
Con tutto questo in mente, e vedendo che entrambe le lingue sono così ben progettato e potente, si potrebbe chiedere che cosa tutte le guerre sante sono circa (anche io). Perché le persone fanno un tale polverone su “Go versus Rust”, entrando in arrabbiati battibecchi sui social media e scrivendo lunghi post sul blog su come solo un idiota userebbe Rust, o che Go non è un vero linguaggio di programmazione, o qualsiasi altra cosa. Potrebbe farli sentire meglio, ma non ti aiuta esattamente, come qualcuno che cerca di decidere quale lingua usare per il tuo progetto o quale dovresti imparare per far progredire la tua carriera di programmazione. Una persona saggia non fa scelte importanti in base a chi grida più forte.
Continuiamo la nostra discussione adulta ora guardando alcune aree in cui una persona ragionevole potrebbe preferire una lingua rispetto all’altra.
Prestazioni
Abbiamo detto che sia Go che Rust producono programmi estremamente veloci perché sono compilati in codice macchina nativo, senza dover passare attraverso un interprete o una macchina virtuale. Tuttavia, le prestazioni di Rust sono particolarmente eccezionali. È paragonabile a C e C++, che sono spesso considerati i linguaggi compilati a più alte prestazioni, ma a differenza di questi linguaggi precedenti, offre anche sicurezza della memoria e sicurezza della concorrenza praticamente senza costi di velocità di esecuzione. Rust consente inoltre di creare astrazioni complesse senza pagare una penalità di prestazioni in fase di esecuzione.
In confronto, sebbene i programmi Go funzionino molto bene, Go è progettato principalmente per la velocità di sviluppo (inclusa la compilazione), piuttosto che per la velocità di esecuzione. Il compilatore Go non impiega molto tempo a cercare di generare il codice macchina più efficiente possibile; si preoccupa di più di compilare rapidamente un sacco di codice. Quindi Rust di solito batterà i benchmark di run-time.
Le prestazioni di runtime di Rust sono anche coerenti e prevedibili, perché non utilizza la garbage collection. Il garbage collector di Go è molto efficiente ed è ottimizzato per rendere le pause stop-the-world il più brevi possibile (e sempre più brevi con ogni nuova versione di Go). Ma la garbage collection introduce inevitabilmente una certa imprevedibilità nel modo in cui i programmi si comportano, il che può essere un problema serio in alcune applicazioni, come i sistemi embedded.
Poiché Rust mira a dare al programmatore il controllo completo dell’hardware sottostante, è possibile ottimizzare i programmi Rust per essere abbastanza vicini alle massime prestazioni teoriche della macchina. Ciò rende Rust una scelta eccellente per le aree in cui la velocità di esecuzione batte tutte le altre considerazioni, come la programmazione di giochi, i kernel del sistema operativo, i componenti del browser Web e i sistemi di controllo in tempo reale.
Semplicità
Non importa quanto sia veloce un linguaggio di programmazione se nessuno riesce a capire come usarlo. Go è stato deliberatamente concepito come una reazione contro la crescente complessità di linguaggi come il C++; ha pochissima sintassi, pochissime parole chiave e, in effetti, poche caratteristiche. Ciò significa che non ci vuole molto per imparare la lingua Go al punto in cui è possibile scrivere programmi utili in esso.
Go è incredibilmente facile da imparare. So che questo è un beneficio spesso propagandato, ma sono rimasto davvero sorpreso di quanto velocemente sono stato in grado di essere produttivo. Grazie al linguaggio, ai documenti e agli strumenti, stavo scrivendo un codice interessante e impegnabile dopo letteralmente due giorni.
—Prime impressioni di Go da un programmatore Rust
La parola chiave qui è semplicità. Semplice non è la stessa cosa facile, di sicuro, ma un linguaggio piccolo e semplice è più facile da imparare di uno grande e complesso. Non ci sono molti modi diversi per fare le cose, quindi tutto il codice Go ben scritto tende a sembrare lo stesso. È facile immergersi in un servizio sconosciuto e capire cosa sta facendo.
fmt.Println("Gopher's Diner Breakfast Menu")for dish, price := range menu { fmt.Println(dish, price)}
(Nella serie Code Club, faccio esattamente questo: scegli i progetti Go in modo semi-casuale da GitHub ed esplorali con un gruppo di principianti Go, per vedere quanto del codice possiamo capire. Si scopre sempre di essere più di quanto ci aspettassimo!)
Sebbene il linguaggio principale sia piccolo, la libreria standard di Go è molto potente. Ciò significa che la tua curva di apprendimento dovrà anche includere le parti della libreria standard di cui hai bisogno, non solo Go syntax. D’altra parte, spostare la funzionalità fuori dalla lingua e nella libreria standard significa che puoi concentrarti sull’apprendimento solo delle librerie che sono rilevanti per te in questo momento.
Go è anche progettato per lo sviluppo di software su larga scala, con grandi basi di codice e grandi squadre. In queste situazioni, è importante che i nuovi sviluppatori possano aggiornarsi il più rapidamente possibile.
Con Go, fai le cose in fretta. Go è uno dei linguaggi più produttivi con cui abbia mai lavorato. Il mantra è:> risolvi problemi reali oggi> .
– Matthias Endler
Caratteristiche
Rust supporta più complessità rispetto a molti altri linguaggi di programmazione, quindi, è possibile ottenere di più con esso. Ad esempio, supporta i generici.
– Devathon
Rust è specificamente progettato per includere un sacco di funzioni potenti e utili per aiutare i programmatori a fare il massimo con il minimo codice. Ad esempio, la funzione match
di Rust ti consente di scrivere una logica flessibile ed espressiva in modo abbastanza conciso:
fn is_prime(n: u64) -> bool { match n { 0...1 => false, _ => !(2..n).any(|d| n % d == 0), }}
Poiché Rust fa molto, questo significa che c’è molto da imparare, specialmente all’inizio. Ma va bene così: c’è molto da imparare anche in C++ o Java, e non si ottengono le funzionalità avanzate fornite con Rust, come la sicurezza della memoria. Criticare Rust per essere un linguaggio complesso manca il punto: è progettato per essere espressivo, il che significa avere molte funzionalità, e in molte situazioni è quello che vuoi da un linguaggio di programmazione. C’è una curva di apprendimento, di sicuro, ma una volta che sei installato e funzionante con esso, starai bene.
Rust compete per mindshare con C++ e D per i programmatori che sono disposti ad accettare sintassi e semantica più complesse (e presumibilmente costi di leggibilità più elevati) in cambio delle massime prestazioni possibili.
– Dave Cheney
Concorrenza
La maggior parte delle lingue ha una qualche forma di supporto per la programmazione concorrente (facendo più cose contemporaneamente), ma Go è stato progettato per questo lavoro da zero. Invece di utilizzare i thread del sistema operativo, Go fornisce un’alternativa leggera: goroutine. Ogni goroutine è una funzione Go in esecuzione indipendente, che lo scheduler Go mapperà a uno dei thread del sistema operativo sotto il suo controllo. Ciò significa che lo scheduler può gestire in modo molto efficiente un numero elevato di goroutine simultanee, utilizzando solo un numero limitato di thread del sistema operativo.
Di conseguenza, è possibile eseguire milioni di goroutine simultanee in un singolo programma senza creare seri problemi di prestazioni. Ciò rende Go la scelta perfetta per applicazioni simultanee su larga scala come server Web e microservizi.
Go dispone anche di modi veloci, sicuri ed efficienti per goroutine per comunicare e condividere i dati, utilizzando i canali. Il supporto alla concorrenza di Go è ben progettato e un piacere da usare. Ragionare sui programmi concorrenti è difficile in generale, e costruire programmi concorrenti affidabili e corretti è una sfida in qualsiasi lingua. Poiché è stato integrato nel linguaggio fin dall’inizio, però, invece di essere un ripensamento, la programmazione concorrente in Go è tanto semplice e ben integrata quanto potrebbe essere ragionevolmente.
Go rende molto facile costruire un’applicazione ben fattorizzata che sfrutta appieno la concorrenza mentre viene distribuita come un insieme di microservizi. Rust può fare anche queste cose, ma è probabilmente un po ‘ più difficile. Per alcuni aspetti, l’ossessione di Rust nel prevenire le vulnerabilità di sicurezza legate alla memoria significa che i programmatori devono fare di tutto per eseguire attività che sarebbero più semplici in altre lingue, incluso Go.
—Sonya Koptyev
La storia della concorrenza in Rust è molto nuova, al confronto, e ancora stabilizzante, ma è in fase di sviluppo molto attivo, quindi guarda questo spazio. Ad esempio, la libreria rayon di Rust offre un modo molto elegante e leggero di trasformare i calcoli sequenziali in quelli paralleli.
Avere una sintassi leggera per la riproduzione delle routine Go e l’utilizzo dei canali è davvero bello. Mostra davvero il potere della sintassi che tali piccoli dettagli rendono la programmazione concorrente molto più bella che in altre lingue.
—Prime impressioni di Go da un programmatore Rust
Mentre potrebbe essere un po ‘ meno semplice implementare programmi simultanei in Rust, è ancora possibile, e quei programmi possono sfruttare le garanzie di Rust sulla sicurezza. Un buon esempio è la classe Mutex
della libreria standard: in Go, puoi dimenticare di ottenere un blocco mutex prima di accedere a qualcosa, ma Rust non ti permetterà di farlo.
Go è focalizzato sulla concorrenza come concetto di prima classe. Ciò non significa che non sia possibile trovare aspetti della concorrenza orientata all’attore di Go in Rust, ma è lasciato come esercizio al programmatore.
– Dave Cheney
Sicurezza
Abbiamo visto in precedenza che sia Go che Rust mirano, in modi diversi, a prevenire una grande classe di errori di programmazione comuni, a che fare con la gestione della memoria. Ma Rust, in particolare, fa di tutto per garantire che non si possa fare qualcosa di pericoloso che non si intendeva fare.
Il compilatore molto rigoroso e pedante di Rust controlla ogni variabile che usi e ogni indirizzo di memoria a cui fai riferimento. Evita possibili condizioni di gara dei dati e ti informa sul comportamento indefinito. I problemi di concorrenza e sicurezza della memoria sono fondamentalmente impossibili da ottenere nel sottoinsieme sicuro di Rust.r—- Perché ruggine?
Questo renderà la programmazione in Rust un’esperienza diversa da quasi tutte le altre lingue, e potrebbe essere una sfida all’inizio. Ma per molte persone, il duro lavoro è valsa la pena.
Per me il vantaggio chiave di Rust è la sensazione che il compilatore mi abbia le spalle e non lascerà passare alcun bug che potrebbe rilevare (seriamente, a volte sembra magico).
—Grzegorz Nosek
Molte lingue, incluso Go, hanno strutture per aiutare i programmatori a evitare errori, ma Rust porta questo a un nuovo livello, in modo che i programmi potenzialmente errati non vengano nemmeno compilati.
Con Rust, il programmatore della libreria ha molti strumenti per evitare che i suoi utenti commettano errori. Rust ci dà la possibilità di dire che noi > possediamo> uno specifico pezzo di dati; non è possibile per nient’altro rivendicare la proprietà, quindi sappiamo che nient’altro sarà in grado di modificarlo. Non riesco a pensare a un tempo che mi sia mai stato dato così tanti strumenti per prevenire un uso improprio accidentale prima. E ‘ una sensazione meravigliosa.
– Sam Rose
“Fighting with the borrow checker” è una sindrome comune per i nuovi programmatori Rust, ma nella maggior parte dei casi i problemi che trova sono veri e propri bug (o almeno potenziali bug) nel codice. Può costringerti a ri-progettare fondamentalmente il tuo programma per evitare di incorrere in questi problemi; e questa è una buona cosa, quando la correttezza e l’affidabilità sono la tua priorità assoluta. Qual è il punto di una lingua che non cambia il modo di programmare? Le lezioni che Rust insegna sulla sicurezza possono essere utili anche quando lavori in altre lingue.
Se si sceglie Rust, di solito sono necessarie le garanzie fornite dal linguaggio: sicurezza contro puntatori null e gare di dati, comportamento di runtime prevedibile e controllo totale sull’hardware. Se non hai bisogno di nessuna di queste funzionalità, Rust potrebbe essere una scelta sbagliata per il tuo prossimo progetto. Questo perché queste garanzie hanno un costo: il tempo di rampa. Avrai bisogno di disimparare le cattive abitudini e imparare nuovi concetti. Le probabilità sono, si lotta con il correttore prestito molto quando si inizia.
—Matthias Endler
Quanto sia difficile trovare il modello di programmazione di Rust dipende probabilmente dall’esperienza precedente che hai in altre lingue. I programmatori Python o Ruby potrebbero trovarlo restrittivo; altri saranno felici.
Se sei un programmatore C o C++ che ha passato settimane a inseguire i bug di sicurezza della memoria in quelle lingue, apprezzerai davvero Rust. “Combattere il correttore di prestiti “diventa” Il compilatore può rilevarlo? Figo!”
—Grzegorz Nosek
Scale
I programmi server di oggi comprendono decine di milioni di righe di codice, vengono elaborati da centinaia o addirittura migliaia di programmatori e vengono aggiornati letteralmente ogni giorno. Go è stato progettato e sviluppato per rendere il lavoro in questo ambiente più produttivo. Le considerazioni di progettazione di Go includono una gestione rigorosa delle dipendenze, l’adattabilità dell’architettura software man mano che i sistemi crescono e la robustezza oltre i confini tra i componenti.
– Rob Pike
Quando si lavora su un problema da soli o in piccoli team, la scelta di un linguaggio semplice o un linguaggio ricco è una questione di preferenza. Ma come il software diventa più grande e più complesso, e le squadre crescono più grandi, le differenze davvero cominciano a mostrare. Per applicazioni di grandi dimensioni e sistemi distribuiti, la velocità di esecuzione è meno importante della velocità di sviluppo: un linguaggio volutamente minimo come Go riduce i tempi di rampa per i nuovi sviluppatori e rende più facile per loro lavorare con una base di codice di grandi dimensioni.
Con Go, è più facile come sviluppatore junior essere più produttivi e più difficile come sviluppatore di medio livello introdurre astrazioni fragili che causeranno problemi su tutta la linea. Per questi motivi, Rust è meno convincente di Go per lo sviluppo di software aziendale.
—Loris Cro
Quando si tratta di sviluppo software nel grande, chiaro è meglio di intelligente. I limiti di Go lo rendono più adatto alle imprese e alle grandi organizzazioni rispetto a linguaggi più complessi e potenti come Rust.
Le differenze
Sebbene Rust e Go siano entrambi linguaggi popolari, moderni e ampiamente utilizzati, non sono realmente concorrenti, nel senso che stanno deliberatamente prendendo di mira casi d’uso molto diversi. L’intero approccio di Go alla programmazione è radicalmente diverso da quello di Rust, e ogni lingua si adatta ad alcune persone mentre irrita gli altri. Va assolutamente bene, e se sia Rust che Go facessero più o meno le stesse cose più o meno nello stesso modo, non avremmo davvero bisogno di due lingue diverse.
Quindi possiamo avere un senso delle rispettive nature di Rust e andare trovando problemi su cui prendono approcci drasticamente diversi? Scopriamolo.
Garbage collection
“To garbage-collect, or not to garbage-collect” è una di quelle domande che non ha una risposta giusta. Garbage collection, e la gestione automatica della memoria in generale, rende facile e veloce per sviluppare programmi affidabili ed efficienti, e per alcune persone che lo rende essenziale. Ma altri dicono che la garbage collection, con il suo sovraccarico di prestazioni e le pause stop-the-world, rende i programmi si comportano in modo imprevedibile in fase di esecuzione e introduce una latenza inaccettabile. Il dibattito continua.
Go è un linguaggio molto diverso da Ruggine. Sebbene entrambi possano vagamente essere descritti come linguaggi di sistema o sostituzioni per C, hanno obiettivi e applicazioni diversi, stili di progettazione del linguaggio e priorità. La garbage collection è un elemento di differenziazione davvero enorme. Avere GC in Go rende la lingua molto più semplice e più piccola e facile da ragionare.
Non avere GC in Rust lo rende davvero veloce (specialmente se è necessaria una latenza garantita, non solo un throughput elevato) e abilita funzionalità e modelli di programmazione che non sono possibili in Go (o almeno non senza sacrificare le prestazioni).
—PingCAP
Vicino al metallo
La storia della programmazione di computer è stata una storia di astrazioni sempre più sofisticate che hanno permesso al programmatore di risolvere i problemi senza preoccuparsi troppo di come funziona effettivamente la macchina sottostante. Ciò rende i programmi più facili da scrivere e forse più portabili. Ma per molti programmi, l’accesso all’hardware e il controllo preciso di come viene eseguito il programma sono più importanti. Rust mira a consentire ai programmatori di avvicinarsi “al metallo”, con più controllo, ma Go astrae i dettagli architettonici per consentire ai programmatori di avvicinarsi al problema.
Entrambe le lingue hanno un ambito diverso. Golang brilla per la scrittura di microservizi e per le tipiche attività “DevOps”, ma non è un linguaggio di programmazione di sistemi. Rust è più forte per le attività in cui la concorrenza, la sicurezza e/o le prestazioni sono importanti; ma ha una curva di apprendimento più ripida di Go.
—Matthias Endler
Deve andare più veloce
Ho scritto altrove che le prestazioni sono meno importanti della leggibilità per la maggior parte dei programmi. Ma quando le prestazioni contano, conta davvero. Rust fa una serie di compromessi di progettazione per ottenere la migliore velocità di esecuzione possibile. Al contrario, Go è più preoccupato per la semplicità, ed è disposto a sacrificare alcune prestazioni (in fase di esecuzione) per questo. Ma la velocità di costruzione di Go è imbattibile, e questo è importante per le grandi basi di codice.
Rust è più veloce di Go. Nei benchmark sopra, la ruggine era più veloce e, in alcuni casi, un ordine di grandezza più veloce. Ma prima di scappare scegliendo di scrivere tutto in Rust, considera che Go non era molto indietro in molti di questi benchmark, ed è ancora molto più veloce di Java, C#, JavaScript, Python e così via.
Se ciò di cui hai bisogno è prestazioni al top della gamma, allora sarai davanti al gioco scegliendo una di queste due lingue. Se stai costruendo un servizio web che gestisce un carico elevato, che vuoi essere in grado di scalare sia verticalmente che orizzontalmente, entrambe le lingue ti si addicono perfettamente.
—Andrew Lader
Correttezza
D’altra parte, un programma può essere arbitrariamente veloce se non deve funzionare correttamente. La maggior parte del codice non è scritto per il lungo termine, ma è spesso sorprendente quanto tempo alcuni programmi possono rimanere in esecuzione in produzione: in alcuni casi, molti decenni. In queste situazioni vale la pena dedicare un po ‘ di tempo in più allo sviluppo per assicurarsi che il programma sia corretto, affidabile e non abbia bisogno di molta manutenzione in futuro.
La mia opinione: vai per il codice che deve essere spedito domani, Rust per il codice che deve continuare a funzionare intatto per i prossimi cinque anni.
—Grzegorz Nosek
Mentre sia Go che Rust sono ottime scelte per qualsiasi progetto serio, è una buona idea farsi il più informato possibile su ogni lingua e le sue caratteristiche. In definitiva, non importa ciò che chiunque altro pensa: solo tu puoi decidere quale è giusto per te e la tua squadra.
Se vuoi sviluppare più velocemente, forse perché hai molti servizi diversi da scrivere, o hai un grande team di sviluppatori, allora Go è la tua lingua preferita. Go ti offre la concorrenza come cittadino di prima classe e non tollera l’accesso alla memoria non sicuro (né Rust), ma senza costringerti a gestire ogni ultimo dettaglio. Go è veloce e potente, ma evita di impantanare lo sviluppatore, concentrandosi invece sulla semplicità e l’uniformità. Se d’altra parte, strizzare ogni ultima oncia di prestazioni è una necessità, allora la ruggine dovrebbe essere la vostra scelta.
—Andrew Lader
Conclusione
Spero che questo articolo ti abbia convinto che sia Rust che Go meritano la tua seria considerazione. Se possibile, dovresti mirare a ottenere almeno un certo livello di esperienza in entrambe le lingue, perché ti saranno incredibilmente utili in qualsiasi carriera tecnologica, o anche se ti piace programmare come hobby. Se hai solo il tempo di investire nell’apprendimento di una lingua, non prendere la tua decisione finale finché non hai usato sia Go che Rust per una varietà di diversi tipi di programmi, grandi e piccoli.
E la conoscenza di un linguaggio di programmazione è in realtà solo una piccola parte di essere un ingegnere del software di successo. Di gran lunga le competenze più importanti di cui avrai bisogno sono design, ingegneria, architettura, comunicazione e collaborazione. Se si eccelle in questi, sarete un grande ingegnere del software indipendentemente dalla vostra scelta della lingua. Buon apprendimento!
Confrontando Rust e Go code
C’è un ottimo sito web chiamato programming-idioms.org che ha un “cheat sheet” che mostra come appare il codice Rust and Go per oltre 200 attività di programmazione comuni:
- Go vs Rust idioms
Guida introduttiva
Se sei interessato a imparare a programmare con Rust e Go, ecco alcune risorse che potresti trovare utili.
Vai
- Installare Go
- Vai tutorial di Bit
- Per Amore di Andare
- Un Banco di Andare
- Vai Da Esempio
- Vai parco Giochi per bambini
- Impressionante Go
Ruggine
- Installazione di Ruggine
- Una Dolce Introduzione alla Ruggine
- La Ruggine Linguaggio di Programmazione
- Ruggine libri
- la Ruggine Da Esempio
- La Ruggine parco Giochi per bambini
- Un Centinaio di Ruggine Binari
Ringraziamenti
io non sono abbastanza giovane per sapere tutto, come dice il proverbio, quindi sono molto grato per un numero di distinto Gopher e Rustaceans chi ha avuto il tempo di rivedere e correggere questo pezzo, oltre a fornire alcuni suggerimenti davvero utili. Il mio ringraziamento speciale va a Bill Kennedy, Grzegorz Nosek, Sam Rose, Jack Mott, Steve Klabnik, MN Mark, Nord Nordstrom, Levi Lovelock, Emile Pels, Sebastian Lauwers, Carl Lerche, e tutti gli altri che hanno contribuito. Si potrebbe ottenere l “impressione dalla lettura on-line prende caldo che la ruggine e Go comunità non vanno d” accordo. Nulla potrebbe essere più lontano dalla verità, nella mia esperienza; abbiamo avuto discussioni molto civilizzate e fruttuose sul progetto di articolo, e ha fatto una grande differenza per il prodotto finito. Grazie ancora.
Leave a Reply