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

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Integrando mis librerías C++ con Python

2,705

Published on

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

No Downloads
Views
Total Views
2,705
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
18
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/

×