Codon - executando códigos Python até 100 vezes mais rápidos
por Lucas Freitas

Imagem: https://github.com/exaloop/codon

A linguagem Python vem ganhando popularidade nos últimos anos, com legiões de usuários migrando diariamente para a linguagem por sua facilidade de uso, devido à sua sintaxe simples, e de aprendizagem, por ser uma linguagem de alto nível. Em meio a esse contexto, pesquisadores do Laboratório de Ciência da Computação e Inteligência Artificial (CSAIL) do MIT e de outros lugares criaram uma ferramenta, Codon, para ajudar a executar códigos Python de maneira mais eficiente e eficaz, permitindo a personalização e adaptação a diferentes necessidades e contextos.

Os desenvolvedores têm a possibilidade de criar novas linguagens específicas de domínio (DSLs) dentro do Python. As DSLs são linguagens especializadas adaptadas a tarefas específicas que podem ser mais fáceis de trabalhar do que linguagens de programação de uso geral. Esse tipo de ferramenta não é feita pensando em desenvolvedores, mas sim no uso corriqueiro de usuários que são especializados em outras áreas de conhecimento e precisam de uma aplicação menos complicada das linguagens de programação. Exemplos de DSLs são HTML, apropriado para layouts de páginas da Web, e SQL, usado para bancos de dados.

Pensando na dificuldade que é aprender uma nova linguagem de programação, os desenvolvedores da DSL Codon incorporaram a sintaxe, semântica e bibliotecas usuais no Python em sua nova ferramenta, dessa forma um usuário já habituado a programar em Python pode rodar seu código nessa nova linguagem sem ter que se preocupar com adaptações e obtém uma resposta na ordem de 10 a 100 vezes mais rápida do que teria com o Python clássico.

A equipe submeteu cerca de 10 aplicativos genômicos comumente usados escritos em Python e os compilaram usando Codon, e alcançaram acelerações de cinco a 10 vezes em relação às implementações originais. Além da genômica, eles exploraram aplicações em finanças quantitativas, que também lidam com grandes conjuntos de dados e usam fortemente o Python. A plataforma Codon também possui um back-end paralelo que permite aos usuários escrever código Python que pode ser explicitamente compilado para GPUs ou vários núcleos, tarefas que tradicionalmente exigiam conhecimento de programação de baixo nível.

Uma das primeiras etapas mais importantes em um compilador é a “verificação de tipo”, essa etapa garante que o que está sendo feito no código, seja uma variável ou função, tenha o tipo de dado apropriado para o contexto que está sendo utilizada. Sendo uma linguagem interpretada, todas essas verificações em Python são realizadas quando o programa é executado. Esta é uma das razões pelas quais a linguagem se torna lenta. Os pesquisadores desenvolveram certos avanços no Codon, usando um mecanismo de verificação de tipo estático bidirecional que ocorre antes da execução do programa, removendo assim a sobrecarga significativa que ocorre no python clássico.

Adicionar implementações de otimização está entre o próximo conjunto de etapas importantes. O Codon usa uma representação intermediária totalmente nova chamada Codon Intermediate Representation (CIR) para simplificar a inclusão de otimizações e acelerar as análises específicas de cada domínio de computação (Bioinformática, finanças quantitativas, Machine Learning, etc). O arquivo executável resultante gerado pelo compilador é executado em uma velocidade comparável à de C ou C++ ou ainda mais rápido quando as otimizações específicas do domínio são aplicadas.

Embora o Codon alcance aumentos de desempenho impressionantes, ele continua a ter certas deficiências porque o compilador de domínio ainda precisa oferecer suporte a todos os recursos do Python. A equipe Codon também está trabalhando duro para aumentar a cobertura de bibliotecas Python do compilador na tentativa de torná-la o mais semelhante possível ao Python. Todo o código relacionado ao Codon está atualmente disponível publicamente no GitHub.

Para saber mais:

Codon: A Compiler for High-Performance Pythonic Applications and DSLs | Proceedings of the 32nd ACM SIGPLAN International Conference on Compiler Construction

GitHub - exaloop/codon: A high-performance, zero-overhead, extensible Python compiler using LLVM