使用XS和Inline :: C模块有什么区别? this问题中有人提到了这一点,这让我很好奇。
答案 0 :(得分:13)
Inline :: C生成XS并构建生成的模块。它在运行时执行此操作,但它会缓存过去的版本。
Inline :: C可能更容易使用,但有一些缺点。第一次运行时,它会降低启动速度,它需要在运行时创建文件的权限,并且需要工具来编译模块。此外,它使系统管理员更难安装。
好处是你可以抓住生成的XS并在事情开始形成时消除Inline :: C.这使它可用于原型设计。
答案 1 :(得分:2)
Inline在编译Perl的同时编译C代码,并且每次更改源代码时都会重新编译。 XS编译一次,二进制文件保存为.so文件,如库。
Perl是用C语言编写的,因此XS使用本机Perl类型和子例程机制。使用XS的模块几乎与内置语言功能一样高效运行。在Inline中执行某些操作比较困难,并且在调用代码或从代码返回时会有转换步骤。话虽这么说,Inline在没有必要的情况下很好地不重新编译,并且内联代码的转换不太可能是一个明显的性能损失。
最后,编写XS假设您正在打包模块。 Perl胆量和模块包装需要很多设置和知识。如果您只需要从Perl调用C库,最好使用Inline。