Integrando mis librerías C++ con Python

3,891 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,891
On SlideShare
0
From Embeds
0
Number of Embeds
1,228
Actions
Shares
0
Downloads
31
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Integrando mis librerías C++ con Python

  1. 1. Integrando misLibrerías C++ con Python Ing. Carlos Gustavo Ruiz http://atmantree.com Noviembre, 2012 CC BY-NC-SA 3.0
  2. 2. Temas● El problema del PVP ● Swig● Por qué C++ con ● Boost Python ● Otros● Opciones de ● A modo de integración conclusión ● Python/C API ● Cython
  3. 3. El problema del PVP ¿Qué piensa cuando hablan de PVP?
  4. 4. El problema del PVP
  5. 5. El problema del PVP
  6. 6. El problema del PVP Ok, si.. No dice BsF.
  7. 7. El problema del PVPComo Ingeniero yo pienso en...
  8. 8. El problema del PVP Productivity vs Performance(Productividad contra Desempeño)
  9. 9. El problema del PVPHablar de Performance es hablar deC – Fortran – C++
  10. 10. El problema del PVPHablar de Productividad es hablar de Python – Ruby Perl – PHP
  11. 11. El problema del PVPHablar de Productividad es hablar de Python – Ruby Perl – PHP ¿C# – Java?
  12. 12. El problema del PVPDesempeño
  13. 13. El problema del PVPDesempeño Productividad
  14. 14. El problema del PVPDesempeño Productividad The Dark Side
  15. 15. El problema del PVP
  16. 16. Por qué C++ con Python● ¿Por qué Python? ● Versatilidad ● Multiplataforma ● Respuestas para todo ● Rapidez de desarrollo ● Difusión ● Ahora con PyConVE
  17. 17. Por qué C++ con Python ● ¿Por que C++? ● Amplia cantidad de librerías ● Flexibilidad ● Poder y Control ● Performance ● Es de “alto” nivel ● C++ 11 (¿C++ pyhonizado?)
  18. 18. Por qué C++ con Python● ¿Por qué Python? ● ¿Por que C++? ● Versatilidad ● Amplia cantidad de ● Multiplataforma librerías ● Respuestas para ● Flexibilidad todo ● Poder y Control ● Rapidez de ● Performance desarrollo ● Es de “alto” nivel ● Difusión ● C++ 11 (¿C++ pyhonizado?) ● Ahora con PyConVE
  19. 19. Por qué C++ con PythonFinalmente es un hecho irrefutable que el mundo está escrito sobre C y C++.
  20. 20. Por qué C++ con PythonFinalmente es un hecho irrefutable que el mundo está escrito sobre C y C++.Interoperar y generar interfaces con estos lenguajes no solo es conveniente sino deseable.
  21. 21. Opciones de Integración pregúnteme cómo
  22. 22. Opciones de Integración PythonExtendiendo Incrustando(Extending) (Embedding) C++
  23. 23. #include “Python.h”● Usos ● Para tomar en ● Implementar cuenta módulos de Python ● Pasarás mucho rato ● Agregar el intérprete escribiendo Py.. y de Python a su _Py.. dentro de C y aplicación C++ C++● Bueno para ● Se debe tomar en cuenta restrcciones ● Optimizar módulos en cuanto a el ● Agregar Scripting acceso a objetos Python a tu App static o global.
  24. 24. #include “Python.h”● Más información en ● http://docs.python.org/2/c-api/ ● http://docs.python.org/2/extending/
  25. 25. Cython● Cython != Python ● No es necesario● Basado en PyRex escribir un wrappers● Cython permite ● Pero.. agregar “sabor a C” a Python● Luego de la versión 0.13 Cython da soporte nativo a C++ ..es otro lenguaje.
  26. 26. Swig● Es tal vez la forma ● En la mayoría de los más estándar de casos no requiere compartir librerías modificar el código con otros lenguajes. original.● Crea interfaces para para acceder a las librerías.● Ideal para compartir librerías preexistentes
  27. 27. Swig● Bueno para: ● Facilitar tareas (UI, testing, customize & reconfigure) ● Incorporando C/C++ a un lenguaje de mas alto nivel resulta en mayor productividad, flexibilidad, menos código, etc. ● La programación C++ se hace más deseable (o soportable)
  28. 28. Swig● Usos para: ● Más Flexibilidad – Reemplaza main() por una versión pythonica en esteroides. ● Acelerar las Pruebas – Probando tu librería C++ con una serie de scripts – Usando el intérprete como debugger ● Integrar sistemas ● Crear módulos de alto “performance”
  29. 29. Swig● Ejemplo rápido bash$ cat erf.i %module erf #include double erf(double); bash$ swig -o erf_wrap.c -python erf.i bash$ gcc -o erf_wrap.os -c -fPIC -I/usr/include/python2.4 erf_wrap.c bash$ gcc -o _erf.so -shared erf_wrap.os bash$ python >>> from erf import erf >>> erf(1) 0.84270079294971489http://www.johndcook.com/blog/2009/01/20/using-swig-to-expose-c-code-to-python/
  30. 30. Boost● Boost trae C++ 11 al ● Puede ser utilizado presente. tanto para Extender● Similar a Swig pero Python como para más orientado a C++ Incrustar en C++ y casado con Python● A diferencia de Swig no requiere de un lenguaje IDL adicional.
  31. 31. Boost● Bueno para: ● .. para todo lo anterior, pero con mejoras significativas como: – Soporte de funciones virtuales para ser sobreescritas en Python – Set completo de herramientas para el manejo de ciclo de vida de bajo nivel en referencias y punteros – Soporte para organizar extensiones como paquetes Python. – Mecanismos seguros para serialización C++/Python – Coherencia con las reglas de los manejos de “lvalues and rvalues” en C++
  32. 32. Boost● Para tener en cuenta: ● Con Boost no requiere otra herramienta más que su compilador C++ favorito. ● Python y C++ llaman a las mismas cosas de maneras distintas. Prepare su tabla de equivalencias ● Python y C++ tienen formas distintas de operar sus elementos. No traduzca muy literalmente las interfaces
  33. 33. Boost● Un “Hola Mundo”#include <boost/python/module.hpp> $ python#include <boost/python/def.hpp> Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40)char const* greet() [GCC 4.4.5] on linux2{ Type "help", "copyright", "credits" or return "hello, world"; "license" for more information.} >>> import hello_ext >>> print hello.greet()BOOST_PYTHON_MODULE(hello_ext) hello, world{ >>> using namespace boost::python; def("greet", greet);}
  34. 34. Otros● “I see death projects” ● ScyPy Weave ● PyInline ● Pyrex● Estos proyectos tienen al menos 2 años de inactividad
  35. 35. A modo de conclusión● Es necesario ● Boost es una mejora conocer la Python/C importante para API aun cuando no ambientes C++ con haga uso de ella Python, pero● Swig es la solución requiere conocer más popular, por lo mejor C++. que tiene mejor documentación y más ejemplos
  36. 36. A modo de conclusión● A menos que sea ● Python y C++ son necesario evite amigos agregar más elementos a su ecuación de integración.● Nunca optimice antes de tiempo.
  37. 37. Este fue el qué....para saber el cómo participe en el taller del sábado.
  38. 38. Gracias por su tiempo.. Licencia del documento: CC BY-NC-SA 3.0http://creativecommons.org/licenses/by-nc-sa/3.0/

×