Shed Skin: Another Way To Compile Python Code

3 views
Skip to first unread message

Wagner

unread,
Jul 5, 2011, 8:11:57 AM7/5/11
to dojo-se, forkin...@googlegroups.com
 
 

Sent to you by Wagner via Google Reader:

 
 

via Phoronix on 04/07/11

Last week on Phoronix I wrote about Gccpy, which is an effort as part of Google's Summer of Code to develop a Python front-end to GCC that would allow compiling Python into native system binaries using the GNU Compiler Collection. This was of interest to many readers and the developer behind Gccpy, had commented in more detail in the forums. Following that news article I received an email regarding another Python compiler effort...


 
 

Things you can do from here:

 
 

Davi Lima

unread,
Jul 6, 2011, 7:07:07 AM7/6/11
to forkin...@googlegroups.com
Se o objetivo da compilação for maior velocidade, tem o PyPy também que é muito bem falado e até já roda Django (Plone não):


[]s
Davi

2011/7/5 Wagner <wagnerl...@gmail.com>

Antônio Ribeiro

unread,
Jul 7, 2011, 10:11:20 AM7/7/11
to forkin...@googlegroups.com
Entrei em contato com PyPy ano passado, mas vi que esse ano houve uma grande
evolução. Agora eles estão usando JIT e isso deixa as coisas um pouco mais rápidas.

Mas isso deu um nó na minha cabeça. Antes eu imaginava que o PyPy rodava em 
cima do CPython. Mas agora pesquisando e lendo vi que não é mais necessário
o interpretador CPython para rodar o PyPy, ele já é uma versão stand-alone.
Pelo que eu vi aqui, o interpretador Python do PyPy é escrito em RPython um subset
restrito de Python.
Há ainda o framework de tradução de Python para uma plataforma (JVM, CLI e até
código nativo [apenas x86 ou x86-64]). Esse não consegui identificar na minha leitura
em que ele é escrito.

Mas a grande dúvida é, RPython roda em que?

Alguém pode sabe responder se tô viajando na maionese?

Abraços!
--
Antonio Ribeiro

Rafael Mendonça França

unread,
Jul 7, 2011, 10:20:37 AM7/7/11
to forkin...@googlegroups.com
Pelo que eu pesquisei rapidinho ele roda em cima do LLVM. Ou seja, no final ele gera código C/C++.

-- 
Rafael Mendonça França

Davi Lima

unread,
Jul 9, 2011, 7:51:27 AM7/9/11
to forkin...@googlegroups.com
Em 7 de julho de 2011 11:11, Antônio Ribeiro <tonh...@gmail.com> escreveu:
Entrei em contato com PyPy ano passado, mas vi que esse ano houve uma grande
evolução. Agora eles estão usando JIT e isso deixa as coisas um pouco mais rápidas.

Mais um post impressionado com o aumento de velocidade do PyPy:

 
Mas isso deu um nó na minha cabeça. Antes eu imaginava que o PyPy rodava em 
cima do CPython. Mas agora pesquisando e lendo vi que não é mais necessário
o interpretador CPython para rodar o PyPy, ele já é uma versão stand-alone.
Pelo que eu vi aqui, o interpretador Python do PyPy é escrito em RPython um subset
restrito de Python.
Há ainda o framework de tradução de Python para uma plataforma (JVM, CLI e até
código nativo [apenas x86 ou x86-64]). Esse não consegui identificar na minha leitura
em que ele é escrito.

Mas a grande dúvida é, RPython roda em que?

Alguém pode sabe responder se tô viajando na maionese?

Não sei dizer, acho que você teria uma resposta na [python-brasil] ou no cana #python-br da Freenode. Aliás algum de vcs frequenta a Freenode?

[]s
Davi

Antônio Ribeiro

unread,
Jul 10, 2011, 4:31:27 PM7/10/11
to forkin...@googlegroups.com
Acabei pesquisando muito e achei umas repostas aí.
 
Eu também baixei e compilei o fonte do PyPy só para ver.
 
Pelo que eu vi a instalação normal é compilada em C mesmo.
Utilizando um próprio tradutor deles.
 
Tipo, você baixa o fonte do PyPy em Python. Daí a primeira coisa
que faz é chamar o translate do PyPy pelo próprio CPython
$ python ./pypy/pypy/translator/goal/translate.py --opt=jit targetpypystandalone.py
 
Neste arquivo targetpypystandalone.py (acho, ou então foi no modulo goal) eu encontrei umas referências para o Make.
Então o tradutor provavelmente traduz o pypy para C e então compila.
Foda é que esse processo demora uns 45 minutos. No meu notebook antiguinho demorou 1h37min ;p
(é um notebook fudido).
Depois vai ter o PyPy e com ele pode chamar o prompt interativo.
O projeto mantem alguns Geradores. O GenC, GenCLI e o GenJVM, mas o mais ativo é o GenC.
 
Quando o PyPy roda, ele tenta transformar o código python em RPython e depois gera algumas
estruturas para o tradutor transformar o código para o de máquina (isso se a opção JIT foi utilizada)
o tradutor nunca vê o código em python. Botei que ele tenta porque pra conseguir transformar ele
tem algumas restrições, como não poder usar geradores, entre outras.
Com essa estrutura é possível então gerar o código em C, para a JVM ou para a CLI (Common Language
Interface), daí é possível gerar para qualquer plataforma.
 
Bom isso foi o que eu entendi de uns 50 minutos de leitura pela internet.
Depois tento ter certeza pra depois não falar besteira.
Provavelmente já falei, mas depois me corrijo.
Não é crime errar agora ;p
 
Até mais

2011/7/9 Davi Lima <davi...@gmail.com>



--
Antonio Ribeiro
Reply all
Reply to author
Forward
0 new messages