Parenti serpenti: as cobras da família

Quantas implementações diferentes existem para a linguagem Python?

Paulo Scardine
Aug 25, 2017 · 5 min read

Esse artigo não tem nada a ver com a hilária comédia italiana “Parenti, serpenti”, dirigida por Mario Monicelli. Hoje vamos falar sobre a família de implementações da linguagem Python: sim, Python não é apenas a implementação de referência (cpython), é também uma especificação de linguagem para a qual existem várias implementações. Algumas podem ser usadas em produção e outras são bastante experimentais.

A) O que dá pra usar em produção:

1. CPython

É a implementação oficial, aquela que você instala quando faz um download a partir do site http://python.org. É a implementação mais popular e dispensa maiores apresentações.

2. Jython

Jython uma implementação da linguagem Python que compila para bytecode da Java Virtual Machine, vulgo JVM. Nesta implementação dá pra chamar nativamente funções e métodos Java bem como exportar rotinas em Python chamadas a partir de um programa Java, então é a implementação ideal para quem tem que interagir com esse ecossistema.

3. IronPython

IronPython é uma implementação semelhante ao Jython, mas em vez da JVM o alvo é a Common Language Runtime (vulgo CLR) do Microsoft .Net. O IronPython é uma versão de Python compatível com a 2.7 e escrita inteiramente em C#. Assim como no Jython você pode invocar rotinas Java, no IronPython você pode invocar rotinas .Net — e vice-versa, de qualquer linguagem .Net você pode invocar métodos Python. Ideal para quem tem que interagir com grandes bases de código .Net. Dá até pra rodar Python dentro do browser usando Silverlight.

Não confundir com o Python for .Net que não é uma implementação de Python, apenas um pacote que integra o interpretador Python padrão com o runtime do projeto Mono — ou seja, não não produz código IL. Use o Python for .Net se você precisa integrar o ecossistema Microsoft .Net sem estar restrito à versão 2.7 do Python.

4. PyPy

Esta versão de Python usa técnicas de compilação Just-in-time (JIT) para acelerar a performance. É o tipo de software onde programação se confunde com bruxaria, mas alegadamente a performance é 5 vezes superior (ou mais) comparando com a implementação de referência. Existe uma versão compatível com Python 2.7 e outra mais experimental compatível com Python 3 (um trabalho em andamento). Para quem tem problemas onde a CPU é gargalo e precisa melhorar a performance sem jogar hardware no problema nem reescrever partes críticas em C.

“If you want your code to run faster, you should probably just use PyPy.” — Guido van Rossum (creator of Python)

5. MicroPython

MicroPython é uma implementação de Python 3 para quem está surfando na onda do Internet das Coisas, escrita em C e otimizada para rodar em microcontroladores. Se você gostaria de fazer algum projeto de IoT mas sempre desistia quando pensava em ter que programar em C ou Basic, assista ao vídeo abaixo e conheça a Pyboard:

B) Implementações Experimentais

1. Grumpy: Go running Python

Grumpy é um transpilador de Python para Go que tem por objetivo ser um substituto compatível com o Python 2.7. A diferença é que ao invés de compilar código Python para bytecode, esta implementação compila código Python em código Go e depois compila o código Go para um binário nativo. Isto significa que o programa roda sem precisar de uma VM, com performance mais próxima a de um programa escrito em C.

2. PyPy3

PyPy3 é uma versão do PyPy compatível com Python 3. O projeto tem caminhado bem mas estão ficando sem dinheiro, portanto se você quer ver os mesmos ganhos de performance do PyPy chegarem à versão 3 do Python, considere fazer uma pequena doação ou tente convencer seu patrão a faze-la. Os recursos não apenas vão ajudar a aumentar a compatibilidade com Python 3.5, como também o porte da numpy para PyPy3 e o financiamento da implementação de Software Transactional Memory (STM). Esta última é muito interessante porque elimina a famigerada GIL (global interpreter lock) e deve aumentar muito a capacidade de multiprocessamento em Python.

C) Subsets, supersets e outros Bichos

quase uma cobra

1. Cython

Cython é um compilador otimizador estático para a linguagem Python e a linguagem estendida Cython (um superset de Python baseada em Pyrex). É provavelmente o método mais fácil de criar módulos em linguagem C, integrar com bibliotecas C de terceiros ou para embutir Python em um programa C/C++.

2. Nim

Nim é uma linguagem estaticamente tipada que compila para C, C++ ou Javascript. Nim parece ser bastante inspirada em Python mas não é Python — gera código livre de dependências como Go e provavelmente é ainda mais rápida. Apesar da base pequena de usuários e desenvolvedores, é uma daquelas ferramentas para ficar de olho.

Conclusão

Publicada em 1991, Python tem 26 anos e já pode sentar na mesa dos adultos: podemos dizer que é uma linguagem madura com um imenso ecossistema.

Tem Python pra tudo que é gosto e ocasião!

Python Weekly Brazil

Revista semanal sobre Python em Português (weekly e-zine about Python in Brazilian Portuguese)

)
Paulo Scardine

Written by

Python Weekly Brazil

Revista semanal sobre Python em Português (weekly e-zine about Python in Brazilian Portuguese)

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade