Carlos Gustavo Ruiz

Integrando C++ con Python

Posted on November 11, 2012 by Carlos Gustavo Ruiz in Talks

Durante el PyCon Venezuela hice una charla llamada Integrando mis librerías C++ con Python, sin embargo quedó pendiente la parte práctica de la misma. Es por ello que decidí convertir el taller en un post donde de muestre los ejemplos prácticos con algunos comentarios.

La Presentación

La idea básica a presentar es el típico problema del “Performance vs. Productivity”, que aparece de cuando en cuando en las listas de correo de los distintos lenguajes de programación. Sin ahondar en el por qué de estas discusiones, me centro en que mi apuesta tecnológica es tomar lo mejor de ambos mundos y asegurarme que se puedan juntar. La Biblioteca Estándar de C++ y la STL tienen implementados muchas herramientas que con la correcta integración entre ambos lenguajes permiten sacar el mejor provecho de ambos mundos. Python provee la versatilidad y rapidez de desarrollo, C++ provee el poder y el control, balancear lo mejor de ambos en favor de una aplicación es aconsejable y deseable. En fin, les sugiero vean la presentación:

La Práctica

A continuación una serie de cuatro ejemplos de integración Python-C++ comenzando por incrustar Python dentro de C++ a alto nivel, el uso de Swig y un par de casos con Boost. En cada caso se incluyen los listados de los fuentes y los comandos para su compilación y ejecución. Igualmente puede descargar la guía de ejercicios si así lo desea. Estos ejercicios fueron probados en Debian 6.0 Estable, haga los ajustes en caso de tener otra plataforma en su computador. Finalmente recuerde tener instalados los paquetes para el compilador gcc, g++, la biblioteca libboost, el programa swig y el paquete python-dev o equivalentes de su plataforma.

Incrustando Python en C++

Ejemplo sencillo de C++ ejecutando intrucciones Python, este tipo de incrustación es de alto nivel, desde C++ es posible acceder a elementos muchos más detallados dentro de Python.

Construyendo el programa con Python incrustado

Probando el programa

Extendiendo Python con C y Swig

Ejemplo sencillo de Swig con C y Python, que aunque no es C++ es extensible a este lenguaje.

y

Construyendo un módulo de Python

Probando el módulo

Extendiendo Python con C++ y Boost (Funciones)

La integración de C++ con Python mediante Boost es limpia y transparente. En este ejemplo se observa con cierta simplicidad el proceso de extender Python.

Construyendo un módulo de Python

Probando el módulo de Python

Extendiendo Python con C++ y Boost (Clases)

Claro que el atractivo de trabajar con C++ sigue siendo en gran medida trabajar con elementos de programación orientada a objetos desde un lenguaje que permita bajar al control y poder crudo del computador. Desde allí podemos integrar ambas plataformas.

ejemplo.cpp

Construyendo un módulo de Python

Probando el módulo de Python

A modo de cierre

A pesar que estos ejemplos son adaptaciones de la documentación oficial de Python, Swig y Boost es notable lo ilustrativo que resulta verlos juntos. Integrar Python y C++ resulta una tarea de definir los elementos que se desean compartir entre ambas plataformas, sin embargo luce interesante las bondades para pruebas y prototipos así como para optimizaciones de módulos Python a través de una implementación en C++.

Desde mi punto de vista, la apuesta tecnológica de Python y C++ como lenguajes de Productividad y Desempeño respectivamente, junto la llegada de los estándares Python3 y C++11 anuncia tiempos de muchos beneficios para los programadores. Permitiendo trabajar con estas dos plataformas de alto nivel para desarrollar de forma veloz y potente, además con alternativas sólidas para su integración.