miércoles, 6 de abril de 2011

Formalizando las Directrices de Control de Cambios de AST

Artículo original: Formalizing the AST Change Control Policy
Python ofrece un árbol de sintaxis abstracta (AST) que representa la forma compilada del código fuente Python en el módulo AST. El módulo AST permite que el código de usuario inspeccione y manipule la representación AST; se halla por tanto entre el análisis sintáctico del código y la compilación a código byte (bytecode).
Mientras que el código Python se define en la referencia del lenguaje, el módulo AST es un detalle de la implementación CPython y no es necesaria en otras implementaciones de Python.

Compatibilidad del AST

Como parte del trabajo de reescritura del optimizador local de CPython para trabajar en el AST (en lugar del código byte en bruto, como se realiza actualmente), Eugene Toder necesitaba hacer algunos cambios a la estructura del AST. Un detalle en la implementación de CPython era que no estaba del todo claro qué directrices de compatibilidad hacia atrás se podían aplicar al AST. De modo que Eugene preguntó en python-dev: ¿Es necesario, cuando cambie el AST, asegurar la compatibilidad hacia atrás?
El consenso general resultó en que no era necesaria esta compatibilidad. El módulo AST dispone de una constante ast.__version__, que ofrece al código de usuario una forma de variar el comportamiento dependiendo de la versión del AST con que se encuentre. Esto resultó ser suficientemente compatible para un módulo de implementación específica.

Otras implementaciones Python

Actualmente, los mantenedores de Jython e IronPython han hecho notar que sus respectivas implementaciones, tenían un módulo de compatibilidad AST, o bien se ofrecerá uno en el futuro. A pesar de esto, no opinan que esto signifique que el AST deba ser congelado y no les importa saber que cuando la constante ast.__version__ cambie, el AST deberá ser modificado para que sea compatible.
Un aspecto que salió a la luz, es que el conjunto de casos de prueba en test_ast.py ayudaría a otras implementaciones a asegurar que sus representaciones AST son compatibles con CPython. ¡Un buen proyecto para alguien que quiera involucrarse en los aspectos internos de Python, sería incrementar la cobertura de test_ast.py!

¿Qué ocurrirá a continuación?

El parche que motivó la discusión todavía no ha sido incluido en CPython. Por lo que, probablemente, nada vaya a cambiar. Sin embargo, si no se incorpora, el AST cambiará de forma que sea incompatible. La constante ast.__version__ se modificará para reflejar esto, de modo que el código de usuario detectará el cambio, pero deberá ser igualmente modificado. De forma más general, este será el modo en que se gestionen los cambios al AST en el futuro.
Los desarrolladores de Python están interesados en la medida en que se está usando el AST y en el impacto que estas directrices tendrán. Si algún lector tiene código afectado por este cambio, es recomendable que participen en la discusión que se mantiene en python-dev.

No hay comentarios:

Publicar un comentario