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.
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
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
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.
/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. 😞
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!!! 😲