使用XS和Inline::C模块有什么区别?某人在此问题中提到了这一点,这让我很好奇。
Inline::C生成XS并构建生成的模块。尽管它会缓存过去的构建,但是它是在运行时执行此操作。
Inline::C可能更易于使用,但也有一些不足之处。第一次运行时会减慢启动速度,需要权限才能在运行时创建文件,并且需要编译模块的工具。此外,它使系统管理员更难安装。
优点是您可以获取生成的XS,并在事情开始成形后消除Inline::C。这使其对原型设计非常有用。
Inline会在编译Perl代码时同时编译C代码,每当源代码发生改变时就会重新编译。XS只需编译一次,将二进制文件保存为类似于库的.so文件。
Perl是用C语言编写的,因此XS使用本地Perl类型和子例程机制。 使用XS的模块几乎与内置语言特性一样高效。 在Inline中进行某些操作更加困难,并且调用或从您的代码返回时需要进行转换。 尽管如此,Inline很好地避免了不必要的重新编译,并且进入和退出Inline代码的转换不太可能对性能造成明显影响。
最后,编写XS假定您正在打包一个模块。 需要对Perl内部结构和模块打包有很多设置和知识。 如果您只需要从Perl调用C库,则最好使用Inline。