12

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

4

2 回答 2

13

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

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

好处是一旦事情开始成形,您就可以抓住生成的 XS 并消除 Inline::C。这使得它对原型设计很有用。

于 2011-07-29T21:10:17.643 回答
2

内联在编译 Perl 的同时编译 C 代码,并且每次更改源代码时都会重新编译。XS 编译一次,二进制文件像库一样保存为 .so 文件。

Perl 是用 C 编写的,因此 XS 使用本机 Perl 类型和子例程机制。使用 XS 的模块的运行效率几乎与内置语言功能一样有效。在 Inline 中做一些事情比较困难,并且从你的代码调用或返回时会有一个转换步骤。话虽这么说,Inline 在不需要时不重新编译方面做得很好,并且进出 Inline 代码的转换不太可能对性能造成明显影响。

最后,编写 XS 假设您正在打包一个模块。需要大量关于 Perl 胆量和模块打包的设置和知识。如果只需要从 Perl 调用 C 库,最好使用 Inline。

于 2011-07-29T21:31:11.983 回答