¿Cuál es la diferencia entre usar XS y el módulo Inline :: C? Esto fue mencionado por alguien en la pregunta this y me ha causado curiosidad.Perl XS e Inline :: C
Respuesta
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.
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.
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
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
- 1. Perl XS y C++ pasando el puntero al almacenamiento intermedio
- 2. Detener los módulos Perl XS cayendo silenciosamente a pure-perl
- 3. C++ formato macro/inline ostringstream
- 4. Inline declaración de delegado (C#)
- 5. Método Inline throw() en C++
- 6. Usando xs: extension & xs: ¿restricción junto?
- 7. ¿Cómo puedo pasar una matriz a una función C en Perl XS?
- 8. Registrando múltiples referencias secundarias de Perl para una biblioteca C en XS
- 9. Perl Inline :: Módulo Python, cómo poner código en una cadena
- 10. Uso de Inline :: CPP vs SWIG: ¿cuándo?
- 11. ¿Cómo instalar manualmente los módulos XS?
- 12. ASP.net Inline Expresión Edición
- 13. ¿Cuándo es "inline" ineficaz? (en C)
- 14. CSS display: inline vs inline-block
- 15. Nombre estándar para (filtro p xs, filtro (no.p) xs)
- 16. Inline Definiciones
- 17. XS vs tipos xsd
- 18. ¿Por qué obtengo errores de "referencia no definida" cuando compilo mi XS con Perl 5.10?
- 19. ¿Cómo funciona F # inline?
- 20. Inline struct declaration
- 21. tipo de conversión perl, javascript, JSON.parse JSON :: XS - ideas de necesidad
- 22. jquery load with inline javascript
- 23. XML xs: int valor hexadecimal
- 24. Inline Argumentos función de propagación
- 25. Jade Inline Conditional
- 26. Inline array inicialización
- 27. 'inline' en JavaScript?
- 28. Delphi 2010 inline inútil?
- 29. formfield_for_foreignkey y Inline Admin
- 30. Django admin inline
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
Cf. el InlineX :: XS experimental para una forma de usar Inline :: C para prototipos y XS para implementación. – tsee