Perché Google ha sviluppato un cross-compiler da Java a JavaScript? [chiuso]

4

Google ha sviluppato un cross-compiler da Java a JavaScript. Perché lo hanno fatto? Significa che JavaScript non è abbastanza buono per sviluppare applicazioni web avanzate?

    
posta hidarikani 15.02.2012 - 15:35
fonte

3 risposte

7

Forniscono parte della risposta su questa pagina:

link

To start with the basics, why does GWT exist in the first place? The short answer is that GWT exists to make the web better for users. We've infused a slightly longer answer into our mission statement:

GWT's mission is to radically improve the web experience for users by enabling developers to use existing Java tools to build no-compromise AJAX for any modern browser.

In altre parole, era un modo per convincere gli sviluppatori Java a scrivere app Ajax-pesanti.

    
risposta data 15.02.2012 - 16:11
fonte
4

Perché al momento, le persone non vedevano alcun valore nell'apprendimento di JavaScript, JavaScript mancava di una grande base di implementazione (anche se ha la più grande base di installazione là fuori!), e in generale i programmatori Java sembrano preferire programmare in Java di più di ogni altra cosa.

    
risposta data 15.02.2012 - 15:49
fonte
4

Java è un linguaggio compilato con una varietà di strumenti maturi e una grande comunità di sviluppatori. Ha tipi, oggetti, eccezioni, framework, ottimi strumenti, supporto della comunità, ecc.

JavaScript ha anche tutte queste cose - tranne la compilation .

Se potessi compilare il tuo codice, testarlo accuratamente in Java e poi tradurlo in qualcosa che il client può eseguire (ad esempio JavaScript - immagino che VBScript non abbia alcuna possibilità qui), quindi ridurrà i costi di sviluppo generali. Sviluppare applicazioni AJAX grandi e complesse come GMail è costoso.

Ci sono molte tecniche "scrivi in una lingua, corri in un'altra" - ma questa era una buona soluzione.

UPDATE

Per chiarire ulteriormente il mio punto, JavaScript è un linguaggio interpretato in cui il parser controlla la sintassi, ma non rileva errori semantici come:

function f(x) {
  g(y);
}

dove né 'g ()' né 'y' esistono. Questo verrà raccolto solo in fase di runtime.

Ci sono molti motori JavaScript come V8 , Nitro (JavaScriptCore) e Spider / Jaeger / TraceMonkey che faranno un ottimo lavoro di analisi e di esecuzione del codice analizzato il più velocemente possibile (forse emettendo il codice macchina), ma non catturerà gli errori semantici che un processo di compilazione completo farebbe. Ciò è spesso dovuto al fatto che gli script vengono inviati al browser indipendentemente l'uno dall'altro e il motore JavaScript non ha l'intera storia fino a quando tutti gli script richiesti non sono stati scaricati / memorizzati nella cache, il DOM è stato inizializzato e qualsiasi script generato dinamicamente ha stato attivato. Di conseguenza, il motore normalmente non può avere l'intera fonte fino a tardi nel processo di download e rendering.

Un compilatore completo metterà in evidenza il frammento di codice sopra come errore, che è una motivazione per usare un linguaggio compilato, verificare la correttezza, eseguire test unitari e quindi utilizzare la riflessione o la decompilazione per generare il JavaScript corretto verificato da eseguire sul client .

    
risposta data 15.02.2012 - 16:19
fonte

Leggi altre domande sui tag