GO ha adottato qualsiasi costrutto linguistico introdotto in Java?

-4

GO ha abbracciato,

1)

Costrutti di linguaggio JavaScript / Python,

Higher order function

Closure

Slicing

Range operator

Anonymous function(inner function)

Provides abstractions for map object

for..in as for..range

2)

Costrutti di linguaggio C,

Non reference type('var a int')

Variadic functions

Overriding init() function

struct keyword

Pointers

typedef

La funzione di packaging della lingua GO fornisce package keyword

Domanda:

GO ha abbracciato qualsiasi costrutto linguistico introdotto in Java?

    
posta overexchange 28.01.2017 - 11:19
fonte

1 risposta

6

No, Go non mostra alcuna influenza particolare da Java. Go e Java condividono obiettivi simili, ma hanno intrapreso percorsi diversi per raggiungere questi obiettivi. I progettisti di Go sono ovviamente a conoscenza di Java, C #, C ++, JavaScript e Python e posizionano Go in alternativa a queste lingue in alcuni casi, ma non prendono molto in prestito da queste lingue.

Un po 'di contesto per capire perché Golang è così com'è:

  • C è l'antenato dei moderni "linguaggi ricci". È più o meno un tipo di assemblaggio portatile, con un sistema di tipo statico debole in cima.

  • C ++ è iniziato come estensione a C e aggiunge meccanismi migliori per la sicurezza e l'astrazione, in particolare classi e modelli. Il risultato è un linguaggio estremamente potente ma ancora fondamentalmente pericoloso.

  • Java può essere interpretato come "C ++, le parti buone" o come "Smalltalk con tipizzazione statica con sintassi C ++". Elimina le funzionalità di C / C ++ come puntatori, tipi di cost, gestione manuale della memoria e modelli, il che si traduce in un linguaggio molto più sicuro e semplice, a costo di espressività. Fornisce inoltre supporto a livello di linguaggio per la concorrenza (ad esempio synchronized metodi e blocchi).

  • Go fa a C ciò che Java ha fatto a C ++: sistema di tipo più semplice, sintassi più semplice, garbage collection. Come Java, Go fornisce soluzioni a livello linguistico per la concorrenza (goroutine, canali), ma sceglie un insieme molto diverso di funzionalità. Go rifiuta l'OOP nominale, basato sulla classe come in C ++ o Java e utilizza invece la tipizzazione strutturale per le funzioni virtuali, in un modo abbastanza innovativo.

Java, Go, JavaScript e Python hanno una cosa in comune: i loro sistemi di oggetti e modelli di memoria sono tutti pesantemente influenzati da Smalltalk o dai suoi derivati, ma lo vestono con una sintassi simile a C. Nel caso di Go, la "tipizzazione anatra statica" tramite le interfacce di Go lo fa sembrare sostanzialmente più simile a Smalltalk o ad altri linguaggi dinamici rispetto ai tipi nominali di Java do. Le funzioni annidate di Go sono anche simili ai blocchi di Smalltalk.

Le dichiarazioni del pacchetto di Go potrebbero sembrare come Java, ma sono probabilmente ereditate dalla stessa famiglia linguistica in cui Java l'ha ottenuto: Modula e Oberon, dalla famiglia del linguaggio Pascal. Pascal fornisce anche un precedente per la sintassi della dichiarazione di livello superiore (ad esempio var ). "L'eredità di Go è almeno tanto Oberon quanto C! (pacchetti, importazioni, sicurezza della memoria rigorosa, garbage collection, controlli di tipo dinamici, ecc.) "

Non vedo alcuna influenza da JavaScript su Go, tranne forse per l'inserimento automatico del punto e virgola, in cui JavaScript funge da esempio di come non farlo. Ma in effetti, questa funzione è presa dal predecessore BCPL di C.

    
risposta data 28.01.2017 - 15:28
fonte

Leggi altre domande sui tag