SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
Integrando mis
Librerías C++ con Python


                         Ing. Carlos Gustavo Ruiz
                         http://atmantree.com
                         Noviembre, 2012


       CC BY-NC-SA 3.0
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
El problema del PVP



  ¿Qué piensa cuando
    hablan de PVP?
El problema del PVP
El problema del PVP
El problema del PVP




     Ok, si.. No dice BsF.
El problema del PVP



Como Ingeniero yo pienso en...
El problema del PVP

    Productivity
         vs
    Performance
(Productividad contra Desempeño)
El problema del PVP


Hablar de Performance es hablar de


C – Fortran – C++
El problema del PVP

Hablar de Productividad es hablar de


    Python – Ruby
     Perl – PHP
El problema del PVP

Hablar de Productividad es hablar de


    Python – Ruby
     Perl – PHP
           ¿C# – Java?
El problema del PVP
Desempeño
El problema del PVP
Desempeño                         Productividad
El problema del PVP
Desempeño                         Productividad



                     The
                   Dark Side
El problema del PVP
Por qué C++ con Python
●   ¿Por qué Python?
    ●   Versatilidad
    ●   Multiplataforma
    ●   Respuestas para
        todo
    ●   Rapidez de
        desarrollo
    ●   Difusión
    ●   Ahora con PyConVE
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?)
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
Por qué C++ con Python

Finalmente es un hecho irrefutable que el
   mundo está escrito sobre C y C++.
Por qué C++ con Python

Finalmente 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.
Opciones de Integración



       pregúnteme
          cómo
Opciones de Integración


              Python
Extendiendo             Incrustando
(Extending)            (Embedding)


               C++
#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.
#include “Python.h”
●   Más información en
    ●   http://docs.python.org/2/c-api/
    ●   http://docs.python.org/2/extending/
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.
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
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)
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”
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.84270079294971489


http://www.johndcook.com/blog/2009/01/20/using-swig-to-expose-c-code-to-python/
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.
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++
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
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);
}
Otros
●   “I see death projects”
    ●   ScyPy Weave
    ●   PyInline
    ●   Pyrex
●   Estos proyectos
    tienen al menos 2
    años de inactividad
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
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.
Este fue el qué..

..para saber el cómo participe
    en el taller del sábado.
Gracias por su tiempo..




   Licencia del documento: CC BY-NC-SA 3.0
http://creativecommons.org/licenses/by-nc-sa/3.0/

Más contenido relacionado

La actualidad más candente

Funções Grupo Oracle
Funções Grupo OracleFunções Grupo Oracle
Funções Grupo OraclePablo Garcia
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosRodrigo Almeida
 
Conclusiones generales de la materia sistemas operativos
Conclusiones generales de la materia sistemas operativosConclusiones generales de la materia sistemas operativos
Conclusiones generales de la materia sistemas operativosSebastianV91
 
Gluster technical overview
Gluster technical overviewGluster technical overview
Gluster technical overviewGluster.org
 
Building blocks of deep learning
Building blocks of deep learningBuilding blocks of deep learning
Building blocks of deep learningKeshan Sodimana
 
RNA - Redes neurais artificiais
RNA - Redes neurais artificiaisRNA - Redes neurais artificiais
RNA - Redes neurais artificiaisiaudesc
 
MATLAB Code + Description : Very Simple Automatic English Optical Character R...
MATLAB Code + Description : Very Simple Automatic English Optical Character R...MATLAB Code + Description : Very Simple Automatic English Optical Character R...
MATLAB Code + Description : Very Simple Automatic English Optical Character R...Ahmed Gad
 
Physical organization of parallel platforms
Physical organization of parallel platformsPhysical organization of parallel platforms
Physical organization of parallel platformsSyed Zaid Irshad
 
Making Ceph fast in the face of failure
Making Ceph fast in the face of failure Making Ceph fast in the face of failure
Making Ceph fast in the face of failure mountpoint.io
 
Basic communication operations - One to all Broadcast
Basic communication operations - One to all BroadcastBasic communication operations - One to all Broadcast
Basic communication operations - One to all BroadcastRashiJoshi11
 
[AIoTLab]attention mechanism.pptx
[AIoTLab]attention mechanism.pptx[AIoTLab]attention mechanism.pptx
[AIoTLab]attention mechanism.pptxTuCaoMinh2
 
N-version programming
N-version programmingN-version programming
N-version programmingshabnam0102
 
Semana 7 y 8 the linux filesystem guia de ejercicios resuelta
Semana 7 y 8   the linux filesystem guia de ejercicios resueltaSemana 7 y 8   the linux filesystem guia de ejercicios resuelta
Semana 7 y 8 the linux filesystem guia de ejercicios resueltavictdiazm
 
Lecture 3 parallel programming platforms
Lecture 3   parallel programming platformsLecture 3   parallel programming platforms
Lecture 3 parallel programming platformsVajira Thambawita
 
Administración de Base de Datos
Administración de Base de DatosAdministración de Base de Datos
Administración de Base de DatosAxel Mérida
 

La actualidad más candente (20)

Funções Grupo Oracle
Funções Grupo OracleFunções Grupo Oracle
Funções Grupo Oracle
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcados
 
Conclusiones generales de la materia sistemas operativos
Conclusiones generales de la materia sistemas operativosConclusiones generales de la materia sistemas operativos
Conclusiones generales de la materia sistemas operativos
 
Gluster technical overview
Gluster technical overviewGluster technical overview
Gluster technical overview
 
Building blocks of deep learning
Building blocks of deep learningBuilding blocks of deep learning
Building blocks of deep learning
 
RNA - Redes neurais artificiais
RNA - Redes neurais artificiaisRNA - Redes neurais artificiais
RNA - Redes neurais artificiais
 
MATLAB Code + Description : Very Simple Automatic English Optical Character R...
MATLAB Code + Description : Very Simple Automatic English Optical Character R...MATLAB Code + Description : Very Simple Automatic English Optical Character R...
MATLAB Code + Description : Very Simple Automatic English Optical Character R...
 
Pytorch
PytorchPytorch
Pytorch
 
Physical organization of parallel platforms
Physical organization of parallel platformsPhysical organization of parallel platforms
Physical organization of parallel platforms
 
Antecedentes de los sistemas distribuidos.
Antecedentes de los sistemas distribuidos.Antecedentes de los sistemas distribuidos.
Antecedentes de los sistemas distribuidos.
 
Procesos e Hilos
Procesos e HilosProcesos e Hilos
Procesos e Hilos
 
Making Ceph fast in the face of failure
Making Ceph fast in the face of failure Making Ceph fast in the face of failure
Making Ceph fast in the face of failure
 
Artificial Neural Networks
Artificial Neural NetworksArtificial Neural Networks
Artificial Neural Networks
 
Basic communication operations - One to all Broadcast
Basic communication operations - One to all BroadcastBasic communication operations - One to all Broadcast
Basic communication operations - One to all Broadcast
 
[AIoTLab]attention mechanism.pptx
[AIoTLab]attention mechanism.pptx[AIoTLab]attention mechanism.pptx
[AIoTLab]attention mechanism.pptx
 
N-version programming
N-version programmingN-version programming
N-version programming
 
Round robin apa
Round robin apaRound robin apa
Round robin apa
 
Semana 7 y 8 the linux filesystem guia de ejercicios resuelta
Semana 7 y 8   the linux filesystem guia de ejercicios resueltaSemana 7 y 8   the linux filesystem guia de ejercicios resuelta
Semana 7 y 8 the linux filesystem guia de ejercicios resuelta
 
Lecture 3 parallel programming platforms
Lecture 3   parallel programming platformsLecture 3   parallel programming platforms
Lecture 3 parallel programming platforms
 
Administración de Base de Datos
Administración de Base de DatosAdministración de Base de Datos
Administración de Base de Datos
 

Destacado

Extendiendo aplicaciones en C y C++ con Python
Extendiendo aplicaciones en C y C++ con PythonExtendiendo aplicaciones en C y C++ con Python
Extendiendo aplicaciones en C y C++ con PythonAngel Freire
 
Integrando C com Python
Integrando C com PythonIntegrando C com Python
Integrando C com Pythongsroma
 
Introduction to the rapid prototyping with python and linux for embedded systems
Introduction to the rapid prototyping with python and linux for embedded systemsIntroduction to the rapid prototyping with python and linux for embedded systems
Introduction to the rapid prototyping with python and linux for embedded systemsNaohiko Shimizu
 
Python and sysadmin I
Python and sysadmin IPython and sysadmin I
Python and sysadmin IGuixing Bai
 
Programming Under Linux In Python
Programming Under Linux In PythonProgramming Under Linux In Python
Programming Under Linux In PythonMarwan Osman
 
Python en Android,Charla del FUDcon Latam 2012
Python en Android,Charla del FUDcon Latam 2012Python en Android,Charla del FUDcon Latam 2012
Python en Android,Charla del FUDcon Latam 2012Ernesto Crespo
 
Python for Linux System Administration
Python for Linux System AdministrationPython for Linux System Administration
Python for Linux System Administrationvceder
 
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux EmbarcadoTDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux Embarcadotdc-globalcode
 
Python for-unix-and-linux-system-administration
Python for-unix-and-linux-system-administrationPython for-unix-and-linux-system-administration
Python for-unix-and-linux-system-administrationVictor Marcelino
 
Problemas resueltos de c++
Problemas  resueltos de c++Problemas  resueltos de c++
Problemas resueltos de c++johnny herrera
 

Destacado (13)

Extendiendo aplicaciones en C y C++ con Python
Extendiendo aplicaciones en C y C++ con PythonExtendiendo aplicaciones en C y C++ con Python
Extendiendo aplicaciones en C y C++ con Python
 
Integrando C com Python
Integrando C com PythonIntegrando C com Python
Integrando C com Python
 
Programación Segura en python. Owasp Venezuela
Programación Segura en python. Owasp  VenezuelaProgramación Segura en python. Owasp  Venezuela
Programación Segura en python. Owasp Venezuela
 
Introduction to the rapid prototyping with python and linux for embedded systems
Introduction to the rapid prototyping with python and linux for embedded systemsIntroduction to the rapid prototyping with python and linux for embedded systems
Introduction to the rapid prototyping with python and linux for embedded systems
 
Python and sysadmin I
Python and sysadmin IPython and sysadmin I
Python and sysadmin I
 
Programming Under Linux In Python
Programming Under Linux In PythonProgramming Under Linux In Python
Programming Under Linux In Python
 
Python en Android,Charla del FUDcon Latam 2012
Python en Android,Charla del FUDcon Latam 2012Python en Android,Charla del FUDcon Latam 2012
Python en Android,Charla del FUDcon Latam 2012
 
Python for Linux System Administration
Python for Linux System AdministrationPython for Linux System Administration
Python for Linux System Administration
 
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux EmbarcadoTDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux Embarcado
 
Python for-unix-and-linux-system-administration
Python for-unix-and-linux-system-administrationPython for-unix-and-linux-system-administration
Python for-unix-and-linux-system-administration
 
Problemas resueltos de c++
Problemas  resueltos de c++Problemas  resueltos de c++
Problemas resueltos de c++
 
C++ y sus librerias
C++ y sus libreriasC++ y sus librerias
C++ y sus librerias
 
Vim python-mode
Vim python-modeVim python-mode
Vim python-mode
 

Similar a Integrando mis librerías C++ con Python

Acceder a C desde Python (O viceversa)
Acceder a C desde Python (O viceversa)Acceder a C desde Python (O viceversa)
Acceder a C desde Python (O viceversa)Juan Rodríguez
 
Python y la POO, en una clase, UNNe-Corrientes
Python y la POO, en una clase, UNNe-CorrientesPython y la POO, en una clase, UNNe-Corrientes
Python y la POO, en una clase, UNNe-Corrientesalexis ibarra
 
Introduccion a Python para la web
Introduccion a Python para la webIntroduccion a Python para la web
Introduccion a Python para la webArsys
 
Introducción a Python
Introducción a Python Introducción a Python
Introducción a Python Eddie Malca
 
Historia de c++
Historia de c++Historia de c++
Historia de c++edwin562
 
Transparencias taller Python
Transparencias taller PythonTransparencias taller Python
Transparencias taller PythonSergio Soto
 
Historia de c++
Historia de c++Historia de c++
Historia de c++edwin562
 
Sesión 1: Python
Sesión 1: PythonSesión 1: Python
Sesión 1: Pythonmaluacsa
 
Python Enterprise
Python EnterprisePython Enterprise
Python Enterprisepythonchile
 
Python_Module_01_Courtesy.pdf
Python_Module_01_Courtesy.pdfPython_Module_01_Courtesy.pdf
Python_Module_01_Courtesy.pdfCeth1
 
.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0Luis Ruiz Pavón
 
historia del lenguaje c++
historia del lenguaje c++historia del lenguaje c++
historia del lenguaje c++Carlota Guzman
 
Pycon es 17 noviembre 2014
Pycon es 17 noviembre 2014Pycon es 17 noviembre 2014
Pycon es 17 noviembre 2014Sergio Soto
 
Infraestructura como código
Infraestructura como códigoInfraestructura como código
Infraestructura como códigoJuanje Ojeda
 

Similar a Integrando mis librerías C++ con Python (20)

Acceder a C desde Python (O viceversa)
Acceder a C desde Python (O viceversa)Acceder a C desde Python (O viceversa)
Acceder a C desde Python (O viceversa)
 
Python-01.pdf
Python-01.pdfPython-01.pdf
Python-01.pdf
 
Python y la POO, en una clase, UNNe-Corrientes
Python y la POO, en una clase, UNNe-CorrientesPython y la POO, en una clase, UNNe-Corrientes
Python y la POO, en una clase, UNNe-Corrientes
 
Yudy Centeno M
Yudy Centeno MYudy Centeno M
Yudy Centeno M
 
Pucela testingdays testing_en_php
Pucela testingdays testing_en_phpPucela testingdays testing_en_php
Pucela testingdays testing_en_php
 
Introduccion a Python para la web
Introduccion a Python para la webIntroduccion a Python para la web
Introduccion a Python para la web
 
Programador Jr. para Python Primera Parte
Programador Jr. para Python Primera ParteProgramador Jr. para Python Primera Parte
Programador Jr. para Python Primera Parte
 
Introducción a Python
Introducción a Python Introducción a Python
Introducción a Python
 
Python power 1
Python power 1Python power 1
Python power 1
 
Historia de c++
Historia de c++Historia de c++
Historia de c++
 
Transparencias taller Python
Transparencias taller PythonTransparencias taller Python
Transparencias taller Python
 
Historia de c++
Historia de c++Historia de c++
Historia de c++
 
Sesión 1: Python
Sesión 1: PythonSesión 1: Python
Sesión 1: Python
 
¿Por qué usar Python?
¿Por qué usar Python?¿Por qué usar Python?
¿Por qué usar Python?
 
Python Enterprise
Python EnterprisePython Enterprise
Python Enterprise
 
Python_Module_01_Courtesy.pdf
Python_Module_01_Courtesy.pdfPython_Module_01_Courtesy.pdf
Python_Module_01_Courtesy.pdf
 
.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0
 
historia del lenguaje c++
historia del lenguaje c++historia del lenguaje c++
historia del lenguaje c++
 
Pycon es 17 noviembre 2014
Pycon es 17 noviembre 2014Pycon es 17 noviembre 2014
Pycon es 17 noviembre 2014
 
Infraestructura como código
Infraestructura como códigoInfraestructura como código
Infraestructura como código
 

Más de Carlos Gustavo Ruiz

Bases de Datos Libres desde 40.000 pies de altura
Bases de Datos Libres desde 40.000 pies de alturaBases de Datos Libres desde 40.000 pies de altura
Bases de Datos Libres desde 40.000 pies de alturaCarlos Gustavo Ruiz
 
Por qué hacemos persistencia de datos
Por qué hacemos persistencia de datosPor qué hacemos persistencia de datos
Por qué hacemos persistencia de datosCarlos Gustavo Ruiz
 
Geomática Libre en Venezuela - Presentación a José Sosa (CNTI)
Geomática Libre en Venezuela - Presentación a José Sosa (CNTI)Geomática Libre en Venezuela - Presentación a José Sosa (CNTI)
Geomática Libre en Venezuela - Presentación a José Sosa (CNTI)Carlos Gustavo Ruiz
 
mini-taller de Base de Datos y PostgreSQL
mini-taller de Base de Datos y PostgreSQLmini-taller de Base de Datos y PostgreSQL
mini-taller de Base de Datos y PostgreSQLCarlos Gustavo Ruiz
 
Alta Disponibilidad con PostgreSQL
Alta Disponibilidad con PostgreSQLAlta Disponibilidad con PostgreSQL
Alta Disponibilidad con PostgreSQLCarlos Gustavo Ruiz
 
Mejores prácticas para migración de Bases de Datos
Mejores prácticas para migración de Bases de DatosMejores prácticas para migración de Bases de Datos
Mejores prácticas para migración de Bases de DatosCarlos Gustavo Ruiz
 
Mapa Colaborativo con OpenStreetMap
Mapa Colaborativo con OpenStreetMapMapa Colaborativo con OpenStreetMap
Mapa Colaborativo con OpenStreetMapCarlos Gustavo Ruiz
 
GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)
GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)
GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)Carlos Gustavo Ruiz
 

Más de Carlos Gustavo Ruiz (12)

Bases de Datos Libres desde 40.000 pies de altura
Bases de Datos Libres desde 40.000 pies de alturaBases de Datos Libres desde 40.000 pies de altura
Bases de Datos Libres desde 40.000 pies de altura
 
Por qué hacemos persistencia de datos
Por qué hacemos persistencia de datosPor qué hacemos persistencia de datos
Por qué hacemos persistencia de datos
 
Geomática Libre en Venezuela - Presentación a José Sosa (CNTI)
Geomática Libre en Venezuela - Presentación a José Sosa (CNTI)Geomática Libre en Venezuela - Presentación a José Sosa (CNTI)
Geomática Libre en Venezuela - Presentación a José Sosa (CNTI)
 
mini-taller de Base de Datos y PostgreSQL
mini-taller de Base de Datos y PostgreSQLmini-taller de Base de Datos y PostgreSQL
mini-taller de Base de Datos y PostgreSQL
 
Web Mapping con Django
Web Mapping con DjangoWeb Mapping con Django
Web Mapping con Django
 
Requerimientos de PostgreSQL
Requerimientos de PostgreSQLRequerimientos de PostgreSQL
Requerimientos de PostgreSQL
 
Alta Disponibilidad con PostgreSQL
Alta Disponibilidad con PostgreSQLAlta Disponibilidad con PostgreSQL
Alta Disponibilidad con PostgreSQL
 
Guía de pgpool Paso a Paso
Guía de pgpool Paso a PasoGuía de pgpool Paso a Paso
Guía de pgpool Paso a Paso
 
Mejores prácticas para migración de Bases de Datos
Mejores prácticas para migración de Bases de DatosMejores prácticas para migración de Bases de Datos
Mejores prácticas para migración de Bases de Datos
 
Mapa Colaborativo con OpenStreetMap
Mapa Colaborativo con OpenStreetMapMapa Colaborativo con OpenStreetMap
Mapa Colaborativo con OpenStreetMap
 
Python vs El Mundo
Python vs El MundoPython vs El Mundo
Python vs El Mundo
 
GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)
GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)
GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)
 

Integrando mis librerías C++ con Python

  • 1. Integrando mis Librerí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?
  • 6. El problema del PVP Ok, si.. No dice BsF.
  • 7. El problema del PVP Como Ingeniero yo pienso en...
  • 8. El problema del PVP Productivity vs Performance (Productividad contra Desempeño)
  • 9. El problema del PVP Hablar de Performance es hablar de C – Fortran – C++
  • 10. El problema del PVP Hablar de Productividad es hablar de Python – Ruby Perl – PHP
  • 11. El problema del PVP Hablar de Productividad es hablar de Python – Ruby Perl – PHP ¿C# – Java?
  • 12. El problema del PVP Desempeño
  • 13. El problema del PVP Desempeño Productividad
  • 14. El problema del PVP Desempeño Productividad The Dark Side
  • 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 Python Finalmente es un hecho irrefutable que el mundo está escrito sobre C y C++.
  • 20. Por qué C++ con Python Finalmente 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 Python Extendiendo 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.84270079294971489 http://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.0 http://creativecommons.org/licenses/by-nc-sa/3.0/