Un interprete de Python funcional en 1024 bytes de codigo C
Austin Henley ha creado un interprete de un subconjunto del lenguaje que ejecuta FizzBuzz y funciones, sin arboles de sintaxis ni llaves, usando solo 1 KB.

Austin Henley ha publicado un interprete de Python escrito en C que ocupa exactamente 1024 bytes. El proyecto ejecuta un subconjunto limitado del lenguaje, suficiente para manejar control de flujo, funciones y el famoso ejercicio de FizzBuzz. No es una broma ni un fork de CPython; es un programa desde cero que demuestra lo minimo necesario para que el codigo se parezca a Python.
El interprete no compila codigo a bytecodes ni construye arboles de sintaxis abstractos. En su lugar, parsea y ejecuta el codigo en un solo paso. La fuente se almacena en un array estatico de 999 caracteres, mientras que las variables y funciones comparten otro array de 256 enteros como tabla de simbolos. Los nombres de variable estan restringidos a una sola letra minuscula, lo que permite acceder a los valores directamente mediante la tabla ASCII del caracter.
El manejo del control de flujo depende casi por completo de la pila de llamadas de C. Cuando el analizador encuentra un bloque indentado, invoca una funcion recursiva que sigue procesando lineas hasta que la identacion disminuye. En ese punto, la funcion retorna y el control vuelve al llamador. Los bucles for y while funcionan de manera similar: el interprete guarda la posicion de la condicion en el array de texto, ejecuta el cuerpo y luego retrocede el puntero para volver a analizar la condicion en la siguiente iteracion. No hay instrucciones de salto ni tablas de desplazamiento; el motor vuelve a leer el texto fuente cada vez.
Para llegar a los 1024 bytes, Henley aplico tecnicas de code golf en C bastante radicales. Asumio que el compilador enlaza libc, uso tipos implicitos de C89 y optimizo funciones reemplazando literales de caracteres por sus valores ASCII. Un ejemplo destacado es la funcion para saltar lineas, que paso de una recursividad legible con comprobaciones explicitas a una linea densa que usa operadores logicos y aritmeticos para validar el caracter actual. El resultado final es codigo dificil de mantener, pero funciona para el caso de uso planteado.
El objetivo era visualizar el minimo comun denominador de la sintaxis de Python: def, dos puntos, identacion y ausencia de parentesis en las condiciones. El interprete asume que el codigo es correcto; no hay manejo de errores ni validacion de tipos. Si la indentacion falla o hay un tipografico, el programa probablemente se comportara de forma indefinida o colgarse. Es una demostracion de ingenieria inversa sobre la propia gramatica del lenguaje.
Herramientas como esta sirven para entender la complejidad oculta de los interpretes completos. Ver como se gestiona el estado sin estructuras de datos complejas ayuda a apreciar el costo de la abstraccion en proyectos como CPython. Para quien quiera ver el truco, el codigo fuente esta disponible en el repositorio en GitHub.
