使用XS和Inline::C模块有什么区别?有人在这个问题中提到了这一点,这让我很好奇。
Inline::C生成XS并构建生成的模块。它在运行时执行此操作,尽管它会缓存过去的构建。
Inline::C可能更容易使用,但也有一些缺点。第一次运行时,它会减慢启动速度,它需要在运行时创建文件的权限,并且它需要工具来编译模块。此外,它使系统管理员更难安装。
的好处是,一旦事情开始成形,您可以获取生成的XS并消除Inline::C。
内联在编译Perl的同时编译C代码,并且在每次更改源代码时重新编译。XS编译一次,二进制文件被保存为.so文件,就像库一样。
Perl是用C编写的,所以XS使用本地Perl类型和子例程机制。使用XS的模块的运行效率几乎与内置语言特性一样高。在内联中做一些事情比较困难,并且在调用或从代码返回时会有一个转换步骤。也就是说,内联在没有必要的时候不会重新编译,并且内联代码的转换不太可能对性能造成明显的影响。
最后,编写XS假设您正在打包一个模块。需要进行大量的设置,并了解Perl内部结构和模块打包。如果您只需要从Perl调用C库,那么最好使用Inline。