quinta-feira, 19 de maio de 2011

Formalização da Política de Controle de Mudanças na AST

Python expões uma árvore de sintaxe abstrata (AST, abstract syntax tree, no inglês), a qual representa a forma compilada do código fonte de Python no módulo AST. Este módulo permite ao usuário inspecionar e manipular a representação da AST, entre a análise do código e compilação do tipo bytecode.

Embora o significado do código Python é definido por uma referência de linguagem, o módulo AST é uma implementação em CPython, e implementações em outros tipos de Python não é necessária.

Compatibilidade do AST

Como parte do trabalho para reescrever o optimizador do vigia de CPython para funcionar no AST (ao invés do bytecode puro, como feito no momento), Eugene Toder precisou fazer alguma mudanças na estrutura do AST. Como a implementação de CPython não deixava claro qual o tipo de compatibilidade reversa precisavam ser usadas no AST. Eugene então perguntou na lista python-dev: "Seria necessário compatibilidade reversa para alterações no AST?".

O consenso geral foi de que tal compatibilidade não era necessária. O módulo AST expõe uma constante, ast.__version__, a qual permite ao código do usuário variar seu comportamento dependente da versão do AST que é encontrada. Isto foi tido como suficiente no que tange a compatibilidade, para uma implementação específica.

Outras implementações de Python

Na realidade, tanto mantedores de Jython quanto de IronPython comentaram que as suas respectivas implementações já têm um módulo AST compatível, ou pretendem implementar um. Mesmo assim, eles não acharam que isso significa que o AST deva ser "congelado", e ficariam satisfeitos com o fato da constate ast.__version__ mude, já que o AST poderia ser modificado de maneira incompatível.

Um ponto que foi levantado é que um pacote de testes complete em test_ast.py ajudaria outras implementações, fazendo que fosse certificado que as representações de AST sejam compatíveis com CPython. Aumentar a abrangência de test_ast.py seria um excelente projeto para alguém interessado em se envolver com Python.

E agora?

Um "patch", o qual iniciou a discussão, ainda não foi incluído em CPython. Possivelmente, nada deve acontecer. No entanto, no caso de ser adicionado, AST vai ser alterado de uma maneira compatível. A constante ast.__version__ deve mudar para refletir as alterações, o que fará com que códigos de usuários sejam avisados, mas outras mudanças devem ser necessárias. De maneira geral, mudanças no AST serão feitas dessa maneira no futuro.

Desenvolvedores Python estão interessados na amplitude do uso de AST, e qual será o impacto dessas determinações. Se leitores têm código que será afetado pela mudança, sua participação é incentivada na lista de discussões python-dev.

Nenhum comentário:

Postar um comentário