Codon, um Compilador Python escrito com C++ e LLVM

Alto desempenho e nenhum tipo de sobrecarga! Em um teste que eu fiz, o ganho de desempenho foi maior que 600%.


Codon, um Compilador Python escrito com C++ e LLVM


Codon é um compilador Python de alto desempenho que compila código Python para código de máquina nativo sem qualquer sobrecarga de tempo de execução.

O compilador foi escrito com C++ e utiliza LLVM como optimizador de código Assembly final. Ao contrário do Python, o Codon suporta multithreading nativo, o que pode levar a acelerações ainda maiores.


Instalação

Você pode compilar o Codon na sua máquina, no entanto, existem binários pré-compilados para Linux e macOS.

No caso do Linux basta rodar esse comando abaixo:

É necessário possuir o cURL instalado.

/bin/bash -c "$(curl -fsSL https://exaloop.io/install.sh)"

Ao final da instalação ele pedirá para você confirmar a adição do binário à sua variável $PATH, tecle y para sim. Se não funcionar, mesmo abrindo em um novo terminal, como ele mesmo orienta, rode os seguintes comandos:

echo 'export PATH=${HOME}/.codon/bin:${PATH}' >> ~/.bashrc
exec $SHELL

Para testar rode:

codon --version


Utilização

Suponhamos que você possua esse código Python que é uma função Fibonacci, você pode interpretar o código com o próprio Codon:

def fib(n):
    a, b = 0, 1
    while a < n:
        print(a, end=' ')
        a, b = b, a+b
    print()
fib(1000)

Para rodar sem compilar:

codon run fib.py

No entanto, o desempenho não será muito bom. O correto mesmo é você compilar esse código para um binário e então rodar o binário, exemplo:

codon build -release -exe fib.py
./fib

Você ainda pode compilar com optimização do LLVM

codon build -release -llvm fib.py
./fib

Analisando o desempenho

Quando utilizamos um loop for com 1 milhão de ciclos em Python, como fizemos nesse vídeo, o Codon foi cerca de 600% mais veloz que o interpretador nativo(versão 3.10.9).

O arquivo/código de teste pode ser obtido aqui.

Resultado usando /usr/bin/python

time python main.py 
1000000Ok
real	0m6,264s
user	0m3,530s
sys     0m2,415s

Ou seja, execução real: mais de 6 segundos. 😞

Resultado usando codon

codon build -release -exe main.py
time ./main
1000000Ok
real	0m0,795s
user	0m0,254s
sys     0m0,063s

Execução real: em menos de 1 segundo!!! 😲



Links úteis


python cpp llvm


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!