2009-11-13 12 views

risposta

127

Penso MarkCC sums it up nicely:

Goroutines e canali fornire il miglior supporto che ho visto al di fuori di Erlang per fare uso di concorrenza. E francamente, penso che Go sia molto meno brutto di Erlang. (Scusate i fan di Erlang, ma in realtà non mi piace Erlang.) Rispetto a Java, che ritengo sia il principale concorrente di Go in quest'area, le goroutine e i canali di Go sono molto più facili da utilizzare rispetto ai thread e alle serrature Java, non c'è assolutamente alcun paragone. Go praticamente distrugge la concorrenza in questo settore.

+18

Thread e code Java possono fornire tutte le funzionalità di goroutine e canali. Tuttavia, le goroutine sono molto più economiche dei thread Java perché migliaia di goroutine possono condividere un piccolo pool di thread del sistema operativo. Go fornisce le migliori astrazioni ad un costo inferiore. –

+0

Does Go ha qualche supporto per rendere la concorrenza tra macchine trasparente come quella di erlang? Ha intenzione di? – Cyclone

+1

Non penso che lo faccia a livello sintattico, @Obtuse. Tuttavia, è relativamente facile farlo generalmente con le gouroutine: genera goroutine normalmente. Ogni gorotuine, tuttavia, apre una connessione di rete con un'altra macchina, dove il lavoro è fatto. Al termine del lavoro, la goroutine ottiene il risultato e lo invia su un canale. – Malcolm

61

Dalla propria FAQ di Google sul tema: What is the purpose of the project?:

Nessun grande lingua sistemi è emerso in oltre un decennio, ma nel corso del tempo che il panorama informatico è cambiato tremendamente. Ci sono diverse tendenze :

  • I computer sono enormemente più veloce, ma lo sviluppo del software non è più veloce.
  • La gestione delle dipendenze è una parte importante dello sviluppo del software oggi, ma i “file di intestazione” delle lingue nella tradizione C sono antitetici per pulire analisi-e dipendenza veloce compilazione.
  • C'è una crescente ribellione contro sistemi di tipo ingombranti come quelli di Java e C++, spingendo le persone verso lingue dinamicamente tipizzate come Python e JavaScript.
  • Alcuni concetti fondamentali come la raccolta dei rifiuti e parallela calcolo non sono ben supportate da lingue popolari sistemi.
  • L'emergere di computer multicore ha generato preoccupazione e confusione .

Noi crediamo che valga la pena di provare di nuovo con un nuovo linguaggio, una, garbage collection lingua in concomitanza con veloce compilazione. Per quanto riguarda i punti di cui sopra :

  • E 'possibile compilare un programma di grandi dimensioni Go in pochi secondi su un singolo computer .
  • Go fornisce un modello per la costruzione del software che semplifica l'analisi delle dipendenze ed evita gran parte del sovraccarico dei file di inclusione stile C e delle librerie .
  • sistema dei tipi di Go ha alcuna gerarchia, in modo che nessun tempo è trascorso definire le relazioni tra i tipi. Inoltre, sebbene Go abbia i tipi statici , la lingua tenta di rendere i tipi più leggeri rispetto alle lingue OO tipiche di .
  • Go è completamente garbage collection e fornisce supporto fondamentale per esecuzione simultanea e comunicazione.
  • Con il suo design, Go propone un approccio per la costruzione di software di sistema su macchine multicore.
+5

Si parla di C, C++, Java, Python e JavaScript; sembra un po 'ampio. L'ultima riga implica "software di sistema", ma sembra un posto molto strano in una FAQ per mettere il tuo obiettivo. –

+2

@Dean J: La maggior parte dei programmi Java/C# si irritano quando si utilizza la parola "sistema", ciò li fa sentire inferiori. La parola è associata al popolare software mainstream e alle alte prestazioni. –

+15

Se fossi java mi sentirei troppo inferiore. E per poterlo fare, non potevo semplicemente sentire (inferiore) avrei dovuto creare un nuovo FeelingFeeler e poi chiamare il mio metodo Feel (inferiore) che invariabilmente causerebbe ancora più inferiorità e quindi guarderei con invidia delle lingue che potrebbe solo sentire() e odio ricorsivamente me stesso. –

10

Si rivolgono a progetti che possono e richiedono un elevato livello di concorrenza.Nonostante lo their FAQ affermi che Google fa NON usa questo internamente puoi sicuramente vedere che è stato influenzato dai loro bisogni e desideri.

+1

E probabilmente la loro esperienza copping con tali requisiti :) –

+24

Anno successivo; Il team di Google ha dichiarato che Google utilizza Go adesso in alcuni sistemi di produzione. (non hanno specificato quali) – hannson

+4

Questo non è più vero. –

4

Oltre alla risposta di Ben dalle domande frequenti di Google, credo che Go sia destinato a essere un linguaggio integrated with Native Client per consentire uno sviluppo più semplice per il prossimo sistema operativo Chrome.

+0

È vero, anche se non è da un po '. Il team di Go ha dichiarato che l'API di NaCl deve diventare più stabile prima di concentrarsi sull'integrazione di Go con esso. – elimisteve

+0

Difficilmente direi che questo è stato il _intent_ di Go. Più come una felice conseguenza che i due sono entrambi sviluppati su Google. C'è molta documentazione là fuori sul perché esiste Go (cioè, perché i suoi sviluppatori lo hanno creato) e ha infinitamente più a che fare con il C++ essendo un linguaggio bastardo che con NaCl. – weberc2

1

Il progetto Go è stato concepito per rendere più facile scrivere il tipo di server e altri software Google utilizza internamente, ma l'implementazione non è abbastanza matura ancora abbastanza per l'uso in produzione su larga scala. Mentre continuiamo con lo sviluppo stiamo anche facendo esperimenti con la lingua come ambiente server candidato . È arrivare lì. Ad esempio, il server dietro http://golang.org è un programma Go ; in effetti è solo il server di documenti godoc in esecuzione in una configurazione di produzione .

Fonte: The Go FAQ - Is Google using Go internally?

+5

Risposta non più valida: rivisita il collegamento: 'Google sta utilizzando Go internamente? Sì. Ora ci sono diversi programmi Go distribuiti in produzione all'interno di Google. Ad esempio, il server dietro http://golang.org è un programma Go; in effetti è solo il document server Godoc in esecuzione in una configurazione di produzione. –

+0

FWIW, non sono sicuro che nessuno dei server di Google sia scritto in Go. Non è proprio la misura che hanno trovato per questo. –

4

Penso che la tua affermazione è parzialmente accurata, ma si potrebbe sostenere che si sarebbe usato in precedenza Erlang per applicazioni altamente concomitanti come i router di telefonia ecc Questo è quello che Erlang è stato sviluppato dal Ericsson. Non uso Erlang e non conosco le sue carenze, ma probabilmente ce ne sono alcune e questo potrebbe spiegare perché Google ha deciso di creare il proprio linguaggio concorrente.

Il fatto che Erlang non sia menzionato nella pagina Faq è interessante, così come la proposta che i computer più veloci dovrebbero portare a uno sviluppo software più veloce. Non è il mio computer che mi trattiene :-).

+3

Penso che l'abbia colpito sulla testa lì; è interessante Erlang non è menzionato nelle FAQ. –

+4

Suppongo che Erlang sia un linguaggio molto lento (non tipizzato in modo statico) e che non sia mai stato progettato per utilizzare la concorrenza per migliorare le prestazioni. È stato progettato per strutturare processi che utilizzano algoritmi di flusso di dati complessi. Fino a poco tempo fa i programmi di Erlang eseguivano tutti i thread singoli con coroutine. – Lothar

+2

Erlang non è un linguaggio lento, ovviamente "lento" è molto relativo. Inoltre, oltre all'implementazione della concorrenza, Go non ha nulla a che fare con Erlang, sono pensati per gestire compiti completamente diversi. Go non è specializzato nella costruzione di sistemi distribuiti, non fornisce nemmeno la comunicazione da nodo a nodo (evento il concetto di nodo non è presente da nessuna parte) quindi c'è una strada molto lunga se Go vuole sfidare Erlang, che io seriamente dubbio. –

Problemi correlati