Sembra che Go sia progettato per sostituire i problemi che avresti precedentemente risolto con C++. È una dichiarazione accurata? Per che tipo di soluzioni è progettato Go?Per che tipo di soluzioni è progettato Go?
risposta
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.
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.
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. –
@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. –
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. –
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.
E probabilmente la loro esperienza copping con tali requisiti :) –
Anno successivo; Il team di Google ha dichiarato che Google utilizza Go adesso in alcuni sistemi di produzione. (non hanno specificato quali) – hannson
Questo non è più vero. –
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.
È 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
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
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 .
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. –
FWIW, non sono sicuro che nessuno dei server di Google sia scritto in Go. Non è proprio la misura che hanno trovato per questo. –
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 :-).
Penso che l'abbia colpito sulla testa lì; è interessante Erlang non è menzionato nelle FAQ. –
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
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. –
- 1. App Android per tablet che mostra ancora "Progettato per telefoni"
- 2. Haskell è stato progettato per incoraggiare la notazione ungherese?
- 3. Che tipo di loop è per (;;)?
- 4. Perché BigInteger in java è progettato per essere immutabile?
- 5. Perché Lua è progettato per generare opcode intermedi?
- 6. Soluzioni di autenticazione per Node.js
- 7. In Go, quale tipo di valore è reflect.Interface?
- 8. Go conversione del tipo di affermazione
- 9. Tipo di dati coppia/tupla in Go
- 10. Che tipo di tipo Java è "[B"?
- 11. Tipo conversione fette di interfacce a go
- 12. soluzioni grafici per Yesod
- 13. WKWebView è progettato come una sostituzione di UIWebView?
- 14. Che tipo è compreso nell'intervallo per loop?
- 15. soluzioni di pagamento PHP?
- 16. Esistono soluzioni di pagamento Bitcoin per Ruby?
- 17. È possibile ottenere diverse soluzioni per un'equazione arbitraria in Matlab?
- 18. Che tipo di parser è necessario per questa grammatica?
- 19. Perché OAuth è progettato per avere token di richiesta e token di accesso?
- 20. Qual è la logica per cui ServicePointManager.ServerCertificateValidationCallback è stato progettato in questo modo?
- 21. Perché JVM è progettato in modo tale che non consenta la forza Garbage Collection?
- 22. Che tipo di linguaggio è CSS?
- 23. Che tipo di unità è "NoRootDirectory" (System.IO.DriveType.NoRootDirectory)?
- 24. Dojo e soluzioni di modelli
- 25. .net Soluzioni di Accodamento messaggi che non sono MSMQ
- 26. Che tipo di JavaScript è questo?
- 27. Che tipo di dichiarazione è questa?
- 28. Che è di tipo dinamico dell'oggetto
- 29. Go - Che cos'è veramente un file multipart.File?
- 30. Verificare che un tipo implementa un'interfaccia in fase di compilazione in Go
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. –
Does Go ha qualche supporto per rendere la concorrenza tra macchine trasparente come quella di erlang? Ha intenzione di? – Cyclone
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