Nel suo articolo Javascript è linguaggio assembly per il web Scott Hanselman argomenta in modo abbastanza convincente che JavaScript è un basso linguaggio di livello e che ha perfettamente senso, laddove possibile, sfruttare un cross-compiler se ciò ti renderà più produttivo.
La stessa domanda potrebbe essere posta per quanto riguarda il linguaggio dell'Assemblea. E mentre molte persone si sono scagliate contro il concetto di linguaggi di alto livello, alla fine hanno perso questa discussione, proprio come le persone che si sono lamentate delle prestazioni perse quando usano linguaggi come Java e C # che non compilano il codice macchina ma invece sono compilati contro un macchina virtuale (JVM o .NET Runtime, rispettivamente).
JavaScript è come IL per il web, il fatto che possiamo usare i linguaggi di livello superiore per programmare JS significa che possiamo essere più produttivi e sfruttare il compilatore per ottenere prestazioni abbastanza buone (e in molti casi migliori). una buona pratica.
Quando dico basso, intendo metaforicamente. Proprio come C possiamo ignorare cose come registri e simili. Usando un cross-compilatore, ignoriamo cose come navigare / manipolare il DOM. Ci stiamo togliendo dai dettagli di cosa fa Javascript e concentrandoci sulla logica dell'app. Questo ha abilitato cose come un emulatore completo x86 che esegue linux nel browser o Motore irreale in esecuzione nel browser
Per rispondere alla domanda di Robert Harvey, se guardi progetti come LLVM, puoi praticamente scegliere la lingua che preferisci (e quindi usare tutti gli strumenti che ti piacciono) e fargli generare Javascript valido.
Inoltre, come follow-up, Scott ha chiesto al creatore di JavaScript e al creatore di JSON le loro opinioni sull'argomento
Brendan Eich rispose:
I said "JS is the x86 of the web" a couple of years ago [likely at JSConf], but I can't claim it's original. [Nick Thompson said it on Hacker News this year as well.]
The point is JS is about as low as we can go. But it also has higher-level facilities.
Shaver's right, assembly without a great macro processor is not good for programmers or safety. JS is. So the analogy needs some qualification or it becomes silly.
The mix of high-level functional programming and memory safety, with low-level facilities such as typed arrays and the forthcoming ES.next extension of typed arrays, binary data, make for a more powerful programming language than assembly, and of course memory safety is the first differentiator.