从零开始创建XS模块的现代方法是什么?

17

我需要为Perl编写一个XS模块。据我所知,h2xs在今天已经被基本弃用了,那么现在启动XS模块的首选方法是什么?我查看了Module::Starter,但它只处理纯Perl模块。

4个回答

16

不,h2xs并未被弃用。如果您创建许多纯Perl模块,那么Module::Starter肯定更方便,但没有理由避免使用h2xs。建议在使用之前完整阅读其文档,这样就可以知道您可能想要做什么或不想做什么。


我几年前用过它,只是认为它已经被取代了。 - Chas. Owens
它只被替换了那些不做 XS 工作的人使用(这是大多数作者)。 - brian d foy

5

就我个人而言,我只使用Module::Starter并自己添加.xs文件。这取决于您的目标:如果您正在进行一对一映射到C API,则h2xs可以为您执行许多样板文件操作,但是如果您正在创建全新接口或仅与Perl本身(而不是某些外部库)进行操作,那么在我看来它并没有什么用处,反而会带来麻烦。


1
好的,我知道了。我从来没有注意过 pm 文件中发生的神奇事情,但看起来你只需要添加两行代码:require XSLoader; XSLoader::load('Pax::PerlHash', $VERSION); 这样做是正确的吗?你只需要从另一个模块复制 ppport.h 吗?还是说这是不必要的? - Chas. Owens
2
ppport.h 用于实现对旧版本 Perl 的可移植性。然而,我通常所做的工作使得这几乎不可能(我的大多数 XS 模块都需要 5.8,甚至有一个需要 5.10),但在你的情况下可能会有所不同。生成 ppport.h 的正确方法是使用 Devel::PPPort。 - Leon Timmermans

0

个人而言,每当我开始制作新模块时,我只是通过复制和编辑与之相似的另一个模块的文件来完成,然后根据需要进行编辑。当然,这种方法并不一定要使用我的模块。你可以从 CPAN 上获取大量代码的副本,并从中获得灵感...


-1

1
好吧,既然我正在重写某些东西以不需要/使用Inline::C,那么这将是愚蠢的(微笑)。Inline::C非常适合快速原型设计,但在部署到生产环境时很糟糕(一些用户没有主目录,因此对象文件最终会出现在/_Inline和其他问题中)。 - Chas. Owens

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