Dos años del compilador JIT de CPython: estado actual, decepciones y futuro
(fidget-spinner.github.io)Un repaso y análisis honesto de un desarrollador que participó durante más de dos años en el desarrollo del compilador JIT (Just-In-Time) de CPython.
Este texto comparte el estado del proyecto a partir de la experiencia de los últimos 2~3 años de un desarrollador que contribuyó de forma clave al compilador JIT de CPython, en particular a la parte de optimización (optimizer).
Aspectos positivos: crecimiento centrado en la comunidad y formación
- Construcción de comunidad: al principio, un pequeño grupo de desarrolladores impulsaba el proyecto, pero ahora se opera con un enfoque centrado en la comunidad, incluso tras la disolución del equipo Faster CPython de Microsoft. Se sumaron nuevos contribuyentes clave como Savannah, Tomáš y Diego, y esto fue un esfuerzo intencional para la sostenibilidad a largo plazo del proyecto JIT.
- Un JIT fácil de aprender: el JIT fue diseñado para que nuevos contribuyentes, incluso sin experiencia especializada en compiladores, pudieran aprender y aportar con facilidad. Por ejemplo, la adopción del enfoque de "tracing JIT" redujo la barrera de entrada al permitir su comprensión mediante el análisis estático de un solo bloque básico, en lugar de un complejo grafo completo de flujo de control.
Aspectos decepcionantes: rendimiento y cobertura periodística incorrecta - Problemas de rendimiento: dicho sin rodeos, el JIT de CPython 3.13 es lento. Si se compila con un compilador moderno (Clang 20), muchas veces el JIT es más lento que el intérprete, y solo al usar un compilador más antiguo (GCC 11) muestra por fin un rendimiento similar. La versión 3.14 tampoco tuvo mejoras revolucionarias de rendimiento, ya que se centró en formar a nuevos contribuyentes y ampliar el análisis de tipos existente. El autor cree que priorizar la formación de talento a largo plazo fue una mejor decisión que buscar mejoras inmediatas de rendimiento.
- Cobertura periodística inexacta: al principio, los medios reportaron que el JIT era "2-9% más rápido" que el intérprete, pero eso no era cierto. Esa cifra provenía de una comparación no contra el intérprete real de CPython, sino contra el muy lento "tier 2 interpreter" que ejecuta la representación intermedia (IR) del JIT. Esto llevó a que los usuarios tuvieran expectativas equivocadas sobre el JIT y, como en la práctica muchas veces sufrían una degradación de rendimiento, el autor dice que sintió una gran frustración.
Conclusión y perspectiva futura
El autor sigue siendo optimista sobre el JIT. Se ha construido una comunidad sólida y actualmente se están realizando varios trabajos de optimización en paralelo. Se espera que estos esfuerzos aporten en la versión 3.14 una mejora de velocidad de un solo dígito porcentual en la media geométrica de los benchmarks.
El autor concluye con una visión positiva sobre cómo el JIT seguirá avanzando gracias a la fuerza de la comunidad, afirmando que "si de verdad hubiera habido un problema realmente 'feo' (ugly), ya no estaría trabajando en el JIT".
Aún no hay comentarios.