¿Cómo funciona realmente JavaScript?
JavaScript es un lenguaje de alto nivel, sin embargo, el navegador no es capaz de entender una sintaxis como lo hacemos nosotros, el computador entiende Machine Code pero ¿cómo es que ocurre esa transición entre una sintaxis como la conocemos y un lenguaje que pueda entender el navegador? El día de hoy lo analizaremos a detalle.
JavaScript, un lenguaje interpretado
Como sabemos, tenemos dos tipos de lenguajes de programación: interpretados y compilados. Ambos con ventajas y desventajas y sobre todo, con diferencias muy marcadas.
En los lenguajes compilados, tales como C, C++, C#, Java, etc. es necesario realizar un paso previo para poder ejecutar nuestro código, ese proceso consiste en recorrer nuestro archivo completamente para generar uno nuevo que se encuentre traducido a Machine Code y pueda ser leído y ejecutado por el computador.
En cambio, en los lenguajes interpretados como JavaScript, PHP o Python no es necesario realizar ese paso previo. En este tipo de lenguajes se cuenta con un intérprete que contiene un listado de todas las instrucciones propias del lenguaje, recorre línea por línea nuestro código y hace una traducción a Machine Code en tiempo real.
Es por ello que cuando nos encontramos trabajando en estos lenguajes y ocurre un error en determinada línea, el programa detiene su ejecución en ese preciso momento, ayudándonos en el proceso de debugging. Caso contrario ocurre con los lenguajes compilados en los cuales, una vez que finaliza el programa se nos indica que ocurrió un error pero, ¿te imaginas que tu código conste de más de 1000 líneas y el error se encuentre desde la línea 1? No suena muy óptimo, ¿cierto?
V8, el motor de JavaScript
Como comentábamos, el navegador no puede entender JavaScript como tal si no que debe de existir un intérprete que traduzca el lenguaje a Machine Code, aquí es donde entran en juego los motores de JS que se encuentran en los navegadores. Cada navegador cuenta con el suyo:
- Spidermonkey - Mozilla
- Chakra - Microsoft Edge
- JavascriptCore - Safari
- V8 - Google Chrome
Sin embargo, nos centraremos en el motor V8 de JS. Al día de hoy es el más rápido, motivo por el cual varios navegadores están migrando al motor creado por Google.
¿Cómo nace V8?
Poder navegar en sitios web de una forma rápida y dinámica se lo debemos en gran parte a Google: creador del motor V8.
En el año 2008, Google se encontraba corriendo una de sus más grandes obras: Google Maps en diversos navegadores, sin embargo todos sabemos el gran procesamiento que realiza este sitio para poder proporcionarnos información de utilidad. Google se dio cuenta que su obra maestra estaba corriendo de una forma muy lenta, eso no era lo que ellos buscaban.
Fue entonces cuando decidieron crear su propio navegador al que optaron por llamar Chrome, inicialmente con la intención de generar su propio motor para Javascript que pudiera correr cualquier sitio web de forma óptima (principalmente Google Maps).
La estructura del motor V8 y el proceso que éste sigue para interpretar el código JS es muy importante para poder entender las "cosas raras" que ocurren con este lenguaje y por las cuales es bien conocido.
Nos adentraremos en este tema en siguientes posts para poder comprender a detalle cómo es que JavaScript es interpretado por el motor V8, analizaremos los Execution Contexts para comprender el origen del famoso Hoisting, el JavaScript Runtime y el aclamado Event Loop que nos permite convertir un lenguaje Síncrono a uno Asíncrono.