Codon, un nuevo compilador Python de alto rendimiento
Hace poco la startup Exaloop dio a conocer mediante un tweet el lanzamiento del el código del proyecto Codon, que desarrolla un compilador para el lenguaje Python que puede generar código de máquina puro como salida, no vinculado al tiempo de ejecución de Python.
El compilador es desarrollado por los autores del lenguaje Seq similar a Python y se posiciona como una continuación de su desarrollo. El proyecto también ofrece su propio tiempo de ejecución para archivos ejecutables y una biblioteca de funciones que reemplaza las llamadas a la biblioteca en el lenguaje Python.
Sobre Codon
El rendimiento de los ejecutables de salida se promociona como cercano a los programas escritos en lenguaje C. En comparación con el uso de CPython, se estima que la ganancia de rendimiento al compilar con Codon es de 10 a 100 veces para la ejecución de un solo subproceso. Al mismo tiempo, a diferencia de Python, Codon implementa adicionalmente la posibilidad de utilizar subprocesos múltiples, lo que le permite lograr un aumento aún mayor en el rendimiento. Codon también permite compilar a nivel de función para usar la vista compilada en proyectos de Python existentes.
Codon está construido utilizando una arquitectura modular que le permite ampliar la funcionalidad a través de complementos que pueden agregar nuevas bibliotecas, implementar optimizaciones del compilador e incluso brindar soporte para sintaxis adicional.
Por ejemplo, se están desarrollando varios complementos en paralelo para su uso en bioinformática y matemáticas financieras. El recolector de basura Boehm se utiliza para la gestión de la memoria.
El compilador es compatible con la mayoría de la sintaxis de Python, pero la compilación en código nativo impone una serie de limitaciones que impiden que Codon se use como un reemplazo transparente para CPython. Por ejemplo, Codon usa el tipo int de 64 bits para números enteros, mientras que CPython tiene números enteros ilimitados.
La compatibilidad de Codon para bases de código grandes puede requerir cambios en el código. Por lo general, las incompatibilidades son causadas por la falta de implementación de Codon de ciertos módulos de Python y la incapacidad de usar algunas de las funciones dinámicas del lenguaje. Para cada una de estas incompatibilidades, el compilador emite un mensaje de diagnóstico detallado con información sobre cómo solucionar el problema.
El código fuente del compilador, el tiempo de ejecución y la biblioteca estándar se escribe con C++ (usando desarrollos de LLVM) y Python, y se distribuye bajo la licencia BSL (Business Source License). La esencia de BSL es que el código de funcionalidad extendida inicialmente está disponible para modificación, pero durante algún tiempo se puede usar de forma gratuita solo sujeto a condiciones adicionales, que requieren la compra de una licencia comercial para eludir.
Los términos de licencia adicionales del proyecto Codon requieren que el código se transfiera a la licencia Apache 2.0 después de 3 años (1 de noviembre de 2025). Hasta ese momento, la licencia permite la copia, distribución y modificación, siempre que se utilice con fines no comerciales.
¿Como instalar Codon en Linux?
Para los interesados en poder instalar este compilador, deben saber que pueden hacerlo de una forma bastante sencilla, solo basta con abrir una terminal y ejecutar el siguiente comando que descargara e instalar el script de instalación:
/bin/bash -c "$(curl -fsSL https://exaloop.io/install.sh)"
En cuanto a los interesados en poder realizar la compilación por su cuenta, pueden hacerlo ejecutando los siguientes comandos:
git clone --depth 1 -b codon https://github.com/exaloop/llvm-project
cmake -S llvm-project/llvm -B llvm-project/build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_ENABLE_RTTI=ON \
-DLLVM_ENABLE_ZLIB=OFF \
-DLLVM_ENABLE_TERMINFO=OFF \
-DLLVM_TARGETS_TO_BUILD=all
cmake --build llvm-project/build
cmake --install llvm-project/build
Posterior a ello proceden a construir con:
cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_DIR=$(llvm-config --cmakedir) \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++
cmake --build build --config Release
Finalmente te dejo el siguiente enlace en donde puedes consultar más sobre los detalles de la compilación asi como tambien donde podrás encontrar mayor información sobre el uso de este compilador (manual, ejemplos, funciones, entre otras cosas más).