Your SlideShare is downloading. ×
  • Like
Integrando mis librerías C++ con Python
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Integrando mis librerías C++ con Python

  • 2,525 views
Published

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,525
On SlideShare
0
From Embeds
0
Number of Embeds
3

Actions

Shares
Downloads
15
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Integrando misLibrerías C++ con Python Ing. Carlos Gustavo Ruiz http://atmantree.com Noviembre, 2012 CC BY-NC-SA 3.0
  • 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. El problema del PVP ¿Qué piensa cuando hablan de PVP?
  • 4. El problema del PVP
  • 5. El problema del PVP
  • 6. El problema del PVP Ok, si.. No dice BsF.
  • 7. El problema del PVPComo Ingeniero yo pienso en...
  • 8. El problema del PVP Productivity vs Performance(Productividad contra Desempeño)
  • 9. El problema del PVPHablar de Performance es hablar deC – Fortran – C++
  • 10. El problema del PVPHablar de Productividad es hablar de Python – Ruby Perl – PHP
  • 11. El problema del PVPHablar de Productividad es hablar de Python – Ruby Perl – PHP ¿C# – Java?
  • 12. El problema del PVPDesempeño
  • 13. El problema del PVPDesempeño Productividad
  • 14. El problema del PVPDesempeño Productividad The Dark Side
  • 15. El problema del PVP
  • 16. Por qué C++ con Python● ¿Por qué Python? ● Versatilidad ● Multiplataforma ● Respuestas para todo ● Rapidez de desarrollo ● Difusión ● Ahora con PyConVE
  • 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. 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. Por qué C++ con PythonFinalmente es un hecho irrefutable que el mundo está escrito sobre C y C++.
  • 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. Opciones de Integración pregúnteme cómo
  • 22. Opciones de Integración PythonExtendiendo Incrustando(Extending) (Embedding) C++
  • 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. #include “Python.h”● Más información en ● http://docs.python.org/2/c-api/ ● http://docs.python.org/2/extending/
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. Otros● “I see death projects” ● ScyPy Weave ● PyInline ● Pyrex● Estos proyectos tienen al menos 2 años de inactividad
  • 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. 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. Este fue el qué....para saber el cómo participe en el taller del sábado.
  • 38. Gracias por su tiempo.. Licencia del documento: CC BY-NC-SA 3.0http://creativecommons.org/licenses/by-nc-sa/3.0/