Perl XS 和 Inline::C

13

使用XS和Inline::C模块有什么区别?某人在此问题中提到了这一点,这让我很好奇。

2个回答

14

Inline::C生成XS并构建生成的模块。尽管它会缓存过去的构建,但是它是在运行时执行此操作。

Inline::C可能更易于使用,但也有一些不足之处。第一次运行时会减慢启动速度,需要权限才能在运行时创建文件,并且需要编译模块的工具。此外,它使系统管理员更难安装。

优点是您可以获取生成的XS,并在事情开始成形后消除Inline::C。这使其对原型设计非常有用。


3
“XS”的难点在于理解Perl API。不管你使用XS或Inline::C,你都需要做到这一点。 - jrockway
1
请参考实验性的InlineX::XS,以使用Inline::C进行原型设计和XS进行部署。 - tsee

3

Inline会在编译Perl代码时同时编译C代码,每当源代码发生改变时就会重新编译。XS只需编译一次,将二进制文件保存为类似于库的.so文件。

Perl是用C语言编写的,因此XS使用本地Perl类型和子例程机制。 使用XS的模块几乎与内置语言特性一样高效。 在Inline中进行某些操作更加困难,并且调用或从您的代码返回时需要进行转换。 尽管如此,Inline很好地避免了不必要的重新编译,并且进入和退出Inline代码的转换不太可能对性能造成明显影响。

最后,编写XS假定您正在打包一个模块。 需要对Perl内部结构和模块打包有很多设置和知识。 如果您只需要从Perl调用C库,则最好使用Inline。


1
关于“每次源代码更改都会重新编译”,这是一件好事。当您直接使用XS时,源代码更改后仍需要重新编译,但那时不会自动进行。 - ikegami
1
关于“在调用或从您的代码返回时将进行转换步骤”的问题,XS和Inline::C都必须存在相同的转换步骤。实际上,Inline::C让XS完成所有的转换工作。 - ikegami

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接