Añadir compilación JIT a un intérprete de juguete con libgccjit

En el mundo de los lenguajes de programación, la compilación en tiempo de ejecución (JIT) permite que un programa se traduzca a código máquina mientras se ejecuta, lo que puede mejorar notablemente el rendimiento. Este tutorial, cuarta parte de una serie, explica cómo añadir esta capacidad a un inté

Implementar `nameOf` en Java introspeccionando el bytecode

El artículo muestra cómo reproducir en Java la expresión `nameof` de C#, que devuelve el nombre textual de un identificador para evitar duplicaciones en mensajes de validación. En lugar de añadir una característica al lenguaje, la propuesta se apoya exclusivamente en bibliotecas estándar: la API `St

Intérpretes con tail-calls en Rust: cuatro estilos de despacho de VM comparados

Este artículo explica y compara cuatro estrategias para implementar el despacho de instrucciones en una máquina virtual (VM) escrita en Rust, todas basadas en la técnica de interpretación con tail-calls. La técnica consiste en transformar la recursión en un salto en tiempo de compilación, lo que evi

Mapeo de bytecode a código fuente: técnicas y rendimiento

Cuando una máquina virtual basada en bytecode genera un error en tiempo de ejecución, necesita traducir el desplazamiento del bytecode a la línea del código fuente que lo produjo. Este artículo, surgido de los retos del capítulo 14 del libro 'Crafting Interpreters' de Robert Nystrom, analiza de form

Un desarrollador porta un subconjunto de Swift al Apple II original de 1977

Un programador ha presentado SwiftII, un entorno de desarrollo inspirado en Swift que funciona en el Apple II original y sus sucesores (Apple II Plus, IIe y superiores). El proyecto adapta un subconjunto deliberado del lenguaje Swift —más cercano en espíritu a Embedded Swift que al SDK moderno de iO

RunMat, el compilador de MATLAB en Rust, detalla su arquitectura en etapas

RunMat es un runtime y compilador escrito en Rust para el ecosistema de MATLAB, diseñado para ejecutar código científico e ingenieril de forma correcta y eficiente. Este artículo técnico explica por qué MATLAB requiere un pipeline semántico y cómo RunMat lo implementa. MATLAB no es solo un lenguaje

H2JVM: biblioteca en Haskell para generar bytecode de la JVM

H2JVM es una biblioteca en Haskell, aún en fases muy iniciales, que permite generar bytecode de la máquina virtual de Java (JVM) desde código funcional con un enfoque de alto nivel. Su objetivo es que los desarrolladores de compiladores hacia la JVM no tengan que lidiar con los detalles de bajo nive

rustc_codegen_jvm: backend de rustc para compilar Rust a bytecode de la JVM

rustc_codegen_jvm es un backend alternativo para el compilador de Rust (rustc) que traduce código fuente escrito en Rust a bytecode de la Java Virtual Machine (JVM) y produce archivos .jar ejecutables compatibles con JVM 8 o superior. El proyecto, alojado en GitHub bajo la cuenta IntegralPilot, conf

eBPF: El kernel de Linux se reinventa como máquina virtual

Un artículo de dubroy.com explora usos inesperados de las máquinas virtuales de bytecode (VMB) más allá de su aplicación tradicional en lenguajes de programación como JavaScript o Python. El ejemplo más sorprendente es eBPF (Extended Berkeley Packet Filter), un mecanismo de extensión del kernel de L

Byterun: Intérprete de Python en 500 líneas

Este artículo de Allison Kaptur, ingeniera de Dropbox, explora Byterun, un intérprete de Python escrito en Python. El objetivo principal es desmitificar el funcionamiento interno de un intérprete, demostrando que su estructura fundamental puede caber en un código relativamente corto (menos de 500 lí

Purple Garden: 'match' simplifica la lógica del código

Este artículo del blog de xnacly.me explora la implementación de sentencias `match` (similares a `switch` en otros lenguajes) en un nuevo lenguaje de programación llamado Purple Garden. El objetivo es proporcionar una alternativa a las largas cadenas `if-if-else`, mejorando la legibilidad y la estru

Femtolisp: Lisp rápido y compacto sorprende al mundo

Un desarrollador ha presentado "Femtolisp", una nueva implementación de un dialecto Scheme que destaca por su tamaño compacto y velocidad. El proyecto, iniciado como un intento de crear el intérprete Lisp más rápido posible en menos de 1000 líneas de código C, ha evolucionado para incluir caracterís

Python: cuidado con la asignación encadenada

Este artículo explora un comportamiento sutil pero común en Python relacionado con la asignación encadenada (chained assignment), y cómo se manifiesta a nivel de bytecode. La asignación encadenada, como en `a = b = []`, puede llevar a errores inesperados porque Python crea *un solo* objeto de lista