BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias O quanto do Python pode ser escrito em Python?

O quanto do Python pode ser escrito em Python?

Favoritos

Brett Cannon, um dos desenvolvedores da linguagem de programação Python e funcionário do Google, acredita que parte do compilador e a maioria de seus módulos internos podem ser reimplementados em Python puro. Tal ideia é discutida no artigo "O quanto de Python pode ser escrito em Python?" publicado no blog que mantém sobre a linguagem de programação.

O ganho em substituir o código C existente no CPython, como é apelidado o compilador Python, por código Python puro seria melhorar sua manutenabilidade e extensibilidade. Cannon apresenta um caso bem sucedido de substituição do código C:

Temos agora no Python 3.3 a implementação do import em Python (tecnicamente, o loop de importação principal utilizado continua implementado em C para reduzir o tempo de inicialização em 5%, mas isso é completamente opcional e equivalente ao código Python puro remanescente), e graças ao cache de conteúdo de diretório essa funcionalidade está, na verdade, mais rápida que a versão em C do Python 3.2. Logo, não é nada ridículo imaginar o quanto poderia ser realizado da ideia de substituir o código C no CPython com código Python.

O próprio Cannon começa a imaginar o que poderia ser substituído. Por exemplo, ele sugere que a reimplementação das funções - any(), map() e etc. - e dos demais recursos internos do Python poderia ser feita sem grandes dificuldades. Outra possibilidade seria a reimplementação do analisador sintático do CPython em Python puro. Contudo, essa seria uma opção menos trivial, pois o analisador sintático não poderia ser usado para trabalhar com módulos especificados em linha de comando, uma vez que o custo poderia ficar muito alto se a performance não for boa o suficiente. E indo mais a fundo na cadeia do compilador, Cannon também considera que as rotinas de derivação da CST (concrete syntax tree ou árvore de sintaxe concreta) para AST (abstract syntax tree ou árvore de sintaxe abstrata) e de transformação da AST para bytecode seriam boas candidatas à reimplementação em Python.

No entanto, Cannon alerta que existem duas restrições que devem ser levadas em conta no momento de reescrever as implementações:

[...] Uma (das restrições) é que o CPython não pode deixar de ser performático. Sua performance deve ser o mais próxima possível da implementação em C, a menos que a funcionalidade não seja executada constantemente. A outra restrição é que (a implementação) não pode de modo algum ter dependências com a stdlib (a biblioteca padrão do Python) nem com outros módulos internos. [...]

Sobre as melhorias desenvolvidas na linguagem pela Python Software Foundation (PSF), Cannon também comenta sobre a PEP 399 (Python Enhancement Proposal ou Proposta de Melhoria no Python), de sua autoria, que solicita que cada módulo na stdlib que tenha implementações em Python puro e em C (total ou parcialmente) deva ter a parte em C homologada para funcionar como uma substituta da parte em Python quando necessário. E para atender essa PEP, o próprio Cannon abriu o Chamado 16651, com o intuito de identificar quais os módulos da stdlib que ainda não possuem uma implementação contraparte em Python puro.

A conclusão de Cannon é que existem diversos pontos onde seria interessante reescrever o CPython em Python puro, entretanto, nem todas elas seriam viáveis devido à restrição de performance. Para determinar o que poderia ser reescrito em Python, seria preciso realizar cada reimplementação e, assim, verificar a performance.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT