2011-07-29 14 views

Respuesta

13

Inline :: C genera XS y crea el módulo generado. Lo hace en tiempo de ejecución, aunque guarda en memoria caché las compilaciones pasadas.

Inline :: C es posiblemente más fácil de usar, pero hay algunas desventajas. La primera vez que se ejecuta, ralentiza el inicio, requiere permisos para crear archivos en tiempo de ejecución y requiere las herramientas para compilar el módulo. Además, dificulta la instalación de un administrador de sistema.

Lo bueno es que puedes agarrar el XS generado y eliminar Inline :: C una vez que las cosas comienzan a modelarse. Esto lo hace útil para la creación de prototipos.

+3

La parte difícil de "XS" es entender la API perl. Y tendrá que hacer eso ya sea que use XS o Inline :: C. – jrockway

+1

Cf. el InlineX :: XS experimental para una forma de usar Inline :: C para prototipos y XS para implementación. – tsee

2

Inline compila el código C al mismo tiempo cuando se compila su Perl, y se volverá a compilar cada vez que se cambie el código fuente. XS se compila una vez y el binario se guarda como un archivo .so como una biblioteca.

Perl está escrito en C, por lo que XS utiliza los tipos de Perl nativos y los mecanismos de subrutina. Un módulo que usa XS funciona casi tan eficientemente como una función de lenguaje incorporado. Es más difícil hacer algunas cosas en Inline, y habrá un paso de conversión cuando llame o regrese desde su código. Una vez dicho esto, Inline hace un buen trabajo al no recompilar cuando no es necesario, y las conversiones dentro y fuera del código Inline no son un golpe de rendimiento notable.

Finalmente, al escribir XS se supone que está empaquetando un módulo. Hay una gran cantidad de configuración y conocimiento de las agallas Perl y el embalaje del módulo requerido. Si solo necesita llamar a una biblioteca de C desde Perl, es mejor que use Inline.

+1

Re "se volverá a compilar cada vez que se cambie el código fuente", eso es algo bueno. aún necesita recompilar cuando el código fuente cambia cuando usa XS directamente, pero no es automático entonces. – ikegami

+1

Re "y habrá un paso de conversión cuando llame o regrese de su código". El mismo paso de conversión necesariamente existe para XS e Inline :: C. De hecho, Inline :: C permite a XS hacer toda la conversión. – ikegami