[Madrid-pm] FFI::Platypus y funciones en C++ con tipos de la STL

Pablo Rodriguez pablo.rodriguez.gonzalez en gmail.com
Lun Abr 11 06:46:59 PDT 2016


Genial!! Muchas gracias a los dos!!

El punto más importante es que el estándar C++ solo se refiere a la API, en
este caso de la STL. Y respecto a la ABI no dice nada, de tal forma que
cada compilador puede implementar los tipos de la STL como le de la gana.
Incluso la implementación de gcc puede cambiar en otra plataforma.
Es decir, FFI::Platypus <https://metacpan.org/pod/FFI::Platypus> puede
tener problemas ya que trabaja a nivel binario, y como bien decía Salva en
la reunión anterior, necesitamos conocer los tipos (tamaño, estructura,
...).

En mi caso, toda la comunicación entre C++ y perl la hago gracias a
ExtUtils::XSpp <https://metacpan.org/pod/ExtUtils::XSpp>
Este módulo extiende el concepto de los typemaps de XS para utilizarlos con
XSpp.

Si quereis ver un ejemplo con ExtUtils::XSpp
<https://metacpan.org/pod/ExtUtils::XSpp> en el directorio examples de la
presentación hice un ejemplo mínimo: MinimalXSpp
<https://bitbucket.org/pablorodriguez/slidesperlinteroperability/src/7ef0f4f8a53e/examples/XSpp/Cpp/?at=master>
(Copiare un poco a Salva lo subire a CPAN ;)
Además Steffen Mueller facilitó la interacción con la STL añadiendo el
módulo:ExtUtils::Typemaps::STL
<https://metacpan.org/pod/ExtUtils::Typemaps::STL> que forma parte de
ExtUtils::Typemaps::Default
<https://metacpan.org/pod/ExtUtils::Typemaps::Default>
Estos módulos añaden los typemaps de los tipos más habituales de la STL,
incluyendo std::string via: ExtUtils::Typemaps::STL::String
<https://metacpan.org/pod/ExtUtils::Typemaps::STL::String>

En unas cuantas ocasiones he tenido que intercomunicar C++ y Perl para
diversos proyectos, y tengo una colección de typemaps que estoy poniendo en
orden y limpiando para que puedan ser utilizados en XSpp igual de bien que
con ExtUtils::Typemaps::Default
<https://metacpan.org/pod/ExtUtils::Typemaps::Default>. Incluyendo typemaps
para las extensiones C++11 de la STL, un poco de combinatoria (tipo
vector<vector<double>>) e incluso tipos de la Boost <http://www.boost.org/>
Si os interesa podeis seguir aquí el desarrollo:
https://github.com/pablrod/p5-ExtUtil-Typemaps-STL-Extra (todavía no está
en CPAN...)










El 11 de abril de 2016, 12:02, salvador fandino <sfandino en gmail.com>
escribió:

> He creado un pequeño módulo que muestra como hacer un wrapper de una
> función que toma y devuelve std::string en XS.
>
>   https://github.com/salva/p5-Acme-WrappingTheSTLFromXS
>
> El código XS queda muy simple:
>
>
> https://github.com/salva/p5-Acme-WrappingTheSTLFromXS/blob/master/WrappingTheSTLFromXS.xs
>
> El truco en realidad está en los typemaps, que son fragmentos de código
> donde se define como convertir los datos entre los tipos de C/C++ y las
> estructuras de datos usadas internamente por Perl:
>
>
> https://github.com/salva/p5-Acme-WrappingTheSTLFromXS/blob/master/typemap
>
> En mi opinión, los typemaps son una de los puntos clave para conseguir que
> el código XS no se complique.
>
> 2016-04-03 22:28 GMT+02:00 Pablo Rodriguez <
> pablo.rodriguez.gonzalez en gmail.com>:
>
>> Hola
>>
>> En la reunión del otro día comente que no había conseguido que funcionara
>> FFI::Platypus con funciones con tipos de la STL en C++, ni siquiera con el
>> más básico: std::string.
>>
>> Joaquin apuntó a un parrafo en la documentación:
>> https://metacpan.org/pod/FFI::Platypus::Lang::CPP#the-standard-C-library
>>
>> Tampoco he conseguido hacerlo funcionar.
>>
>> ¿Alguien más se anima a probar?
>>
>> El código básico para probarlo está en el repo con las transparencias:
>> https://bitbucket.org/pablorodriguez/slidesperlinteroperability/src/7ef0f4f8a53e0bbd8d28ea01e10e0d37ddbd0a50/examples/Platypus/Cpp/?at=master
>>
>> Un saludo
>>
>> _______________________________________________
>> Madrid-pm mailing list
>> Madrid-pm en pm.org
>> http://mail.pm.org/mailman/listinfo/madrid-pm
>>
>
>
> _______________________________________________
> Madrid-pm mailing list
> Madrid-pm en pm.org
> http://mail.pm.org/mailman/listinfo/madrid-pm
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.pm.org/pipermail/madrid-pm/attachments/20160411/1fe0606d/attachment-0001.html>


Más información sobre la lista de distribución Madrid-pm