BT

O quanto do Python pode ser escrito em Python?

por Ivo La Puma em 14 Mar 2013 |

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.

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

PyPy? by Felipe Mamud

Será que eles podem utilizar/contribuir para o o PyPy ?

Bret Cannon sabe que o pypy existe! by Carlo Pires

O autor do artigo foi infeliz ao não comentar que o próprio Bret, no artigo referenciado, cita o projeto PyPy e comenta que a reescrita de alguns módulos e python visa apenas de melhorar a manutenibilidade do CPython.

Re: Bret Cannon sabe que o pypy existe! by Ivo La Puma

Olá Carlo, tudo bem?

Primeiramente, gostaria de lhe agradecer e dizer que fiquei muito satisfeito com seu comentário ao meu artigo.

De fato, Cannon cita o PyPy, mas ele o faz bem "en passant", sendo que o assunto do post girou mais em torno sobre como reescrever o CPython em Python. Mas talvez você tenha razão, talvez valesse a pena citar o PyPy.

No entanto, está exposto no texto (logo no segundo parágrafo) que o ganho em reescrever parte do CPython em Python é melhorar sua manutenabilidade e extensibilidade. Portanto, acho que não fui tão infeliz assim, né? ;)

De qualquer forma, gostaria apenas de lhe dar uma satisfação e, mais uma vez, agradecer pelo feedback.

Abraços,

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

3 Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2014 C4Media Inc.
Política de privacidade
BT