He leído muchas cosas sobre interpretación, compilación, compilación justo a tiempo, etc. Pero no he encontrado una explicación clara sobre por qué JS se creó como un lenguaje interpretado y por qué todavía no existe la capacidad de compilar js. código.
Tengo algunos pensamientos, pero no estoy seguro acerca de ninguno de ellos:
Si alguien pudiera explicar algo de lo anterior o cualquier otra razón, estaría muy agradecido.
Primero digamos que, a menos que haya estado en las discusiones de diseño de Javascript en sus primeros días, ninguno de nosotros realmente "sabe" por qué. Lo mejor que podemos hacer es tratar de inferir por qué se podrían haber hecho ciertas elecciones dados los objetivos que tenían y las elecciones que tenían.
Si observa los requisitos para el diseño original de Javascript en las páginas web, verá cosas como esta:
Miremos estos...
Sobre el n. ° 1, está bien, ejecutar en muchas plataformas significa que no se puede compilar en código de máquina nativo, punto. Podría compilarse en un código de bytes universal como Java o webAssembly, pero siga leyendo sobre los demás requisitos.
Sobre el #2, quiere ser integrable en páginas web para que puedas hacer cosas como:
<div onclick='alert("hi")'>Click me</div>Entonces, es bastante difícil tener un código compilado de antemano que encaje allí. Probablemente tendrías que compilar toda tu página web. Eso crea un paradigma y un navegador completamente nuevos (que esperan código precompilado y HTML). Si bien el mundo eventualmente podría haber ido allí, ciertamente no fue una manera fácil de hacerlo (requería volver a hacer el navegador).
Sobre el #3, "simple de programar", generalmente se cree que los "scripts" interpretados son más simples para comenzar que los lenguajes que necesitan un entorno de programación y una configuración de compilador y algunas herramientas de compilación. Es más rápido y sencillo hacer cosas sencillas.
Sobre #4, "actuación". En los primeros días de Javascript, era un lenguaje auxiliar para ayudar a agregar algo de lógica del lado del cliente a las páginas web. El objetivo inicial era mucho más simple de lo que se usa Javascript en la actualidad. Más bien dudo que se haya previsto que se necesitara un lenguaje precompilado para lo que era su objetivo inicial. Por lo tanto, manténgalo simple y opte por la forma más sencilla de alcanzar su objetivo.
Acerca de # 5: "no Java". Java era una herramienta conocida del día. Pero, Java no era súper simple, requería una precompilación, tenía gravámenes de IP, etc. Entonces, Javascript nació para ser algo familiar para los desarrolladores de C y Java, pero era mucho más simple de aprender para alguien nuevo. Fácil de hacer cosas sencillas.
En cuanto a entornos como nodejs, podrían tener un paso de precompilación más práctico, pero los primeros diseñadores de nodejs decidieron usar el motor Javascript V8 de código abierto en lugar de crear su propio motor Javascript. Además, en un mundo de servidores, su código generalmente se carga una vez al inicio del servidor, donde V8 lo compila en una combinación de código nativo y código de bytes de todos modos, por lo que requerir que los desarrolladores lo compilen previamente no necesariamente le compra mucho de todos modos. Aquí es donde importa que Javascript ahora esté realmente compilado, solo se compila al cargar en lugar de requerir una compilación previa por parte del desarrollador.
Y, hoy en día, si desea los beneficios de la verificación de tipos en un paso de precompilación, puede usar TypeScript y precompilar eso en Javascript.