Esto, puedes omitirlo completamente a menos que estés construyendo un navegador. Existe por razones de legado y, si pudieran eliminarlo, totalmente lo harían, pero, ya sabes, la historia.
De nuevo, tú eliges. Luego, lo siguiente es que tecleas git init, y estás un poco perdido sobre por dónde empezar. Podrías mirarlo usando el ciclo de vida del script, así que, primero pasas el script. Obviamente, necesitas comenzar con el analizador, y luego necesitas algo que ejecute tu script, y luego construyes el tiempo de ejecución al final. Eso no es realmente cierto.
Básicamente puedes comenzar en cualquier lugar. Gracias a muchas herramientas JS, como formateadores y linters, tenemos bibliotecas de analizador independientes que puedes tomar, y luego tienes un inicio rápido, o simplemente escribes tu AST a mano al principio. Eso es algo que hicimos en el motor en el que trabajé. Y luego, puedes agregar el analizador, y ya tienes algo después de eso implementado, y todo encaja bien. En el lado del tiempo de ejecución, de nuevo, eso es enorme, al menos si eliges implementar todo eso, así que solo elige lo que quieras. Podría ser el clásico prototipo de cadena, número, booleano, o algo más emocionante como matrices de tipo, o proxies, simplemente comienza donde quieras. Eso está bien.
Luego, obviamente, necesitas tener una especificación, conocida como ECMA 262. Es muy completa, lo cual es genial. Hoy en día, no se especifica mucho. En gran medida se ve así, por lo que obtienes un pseudocódigo que puedes traducir aproximadamente a tu propio código. Eso puede no parecer muy divertido, pero aún puedes hacer un montón de cosas personalizadas como optimizaciones. Esto se centra realmente en la corrección y el comportamiento. Luego necesitas algunas pruebas, obviamente. Después de haber implementado algunas cosas, necesitas asegurarte de que funciona correctamente, maneja todos los casos límite.
Buenas noticias, obtienes 50,000 pruebas gratis que se mantienen junto a la especificación, por lo que es algo oficial. Hoy en día es un requisito para todo lo que entra en el lenguaje que tiene nuevas pruebas añadidas a la suite de pruebas. Se sabe que muchas características nuevas están completamente probadas. Hay un maravilloso sitio web llamado test262.fyi que rastrea los resultados de todos los motores que existen, y los actualiza todos los días, por lo que puedes ver muy detalladamente qué motor implementa qué cosa y qué tan bien. Personalmente, encuentro que tener un gráfico que te muestra que sube con el tiempo es muy bueno para la motivación.
Más en general, obviamente puedes aprender una gran cantidad de cosas si haces esto. Cosas sobre cómo funcionan los analizadores, los intérpretes, si haces code generation de motor de bytecode, si quieres hacer un JIT incluso, algo de código nativo, ciertas optimizaciones. Para mí, una gran cosa fue una mejor comprensión de JavaScript en sí, así que, una vez que lo implementas realmente, realmente entiendes cómo funcionan las cosas bajo el capó. Algunos conceptos de bajo nivel, y luego uno de mis favoritos es que te expones a los estándares, por lo que estas nuevas características no aparecen de la nada, y tienes la oportunidad de interactuar con las personas que agregan cosas nuevas a JavaScript, e incluso puedes involucrarte. Todo está en GitHub.
Ahora, yo hago esto. Soy un delegado de Bloomberg, pero comencé como un experto invitado en TC39, al igual que el organismo de estándares, y un día se acercaron y pensaron, esto es genial en lo que trabajas, ¿quieres involucrarte? Y finalmente, aquí hay una lista de algunos proyectos que definitivamente deberías revisar si esto te parece interesante. Todos hacen esto por diversión, no aspiran a competir con V8, y todos estos grandes motores, simplemente lo hacen por diversión, así que hay algunos de ellos. Definitivamente revisa eso.
Y eso es todo. Si tienes alguna pregunta, por favor encuéntrame después o en línea. Gracias.
Comments