【问题标题】:What is the modern way of creating an XS module from scratch?从头开始创建 XS 模块的现代方法是什么?
【发布时间】:2012-04-19 23:42:22
【问题描述】:

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

【问题讨论】:

    标签: perl perl-xs


    【解决方案1】:

    不,不推荐使用 h2xs。如果您创建许多纯 Perl 模块,Module::Starter 肯定更方便,但没有理由避免使用 h2xs。不过,我建议您在使用它之前通读它的文档,以便您知道您希望它做什么或不做什么。

    【讨论】:

    • 我几年前用过,我只是觉得它已经被替换了。
    • 它只被不做 XS 的人(大多数作者)替换。
    【解决方案2】:

    我个人只是使​​用 Module::Starter 并自己添加 .xs 文件。这取决于您的目标是什么:如果您要对 C api 进行一对一的映射,那么 h2xs 可以为您做很多样板文件,但是如果您要制作一个全新的界面,或者当您re 只用 perl 本身(而不是一些外部库)做事,它不会增加太多但麻烦恕我直言。

    【讨论】:

    • 很高兴知道。我从来没有注意到 pm 文件中发生的魔法,但看起来你只需要添加两行到它需要 XSLoader; XSLoader::load('Pax::PerlHash', $VERSION);这是对的吗,你只是从另一个模块复制ppport.h,还是没有必要?
    • ppport.h 用于移植到旧版本的 Perl。我所做的那种事情通常使这成为不可能(我的大多数 XS 模块无论如何都需要 5.8,甚至需要 5.10),但在你的情况下可能会有所不同。生成 ppport.h 的正确方法是使用 Devel::PPPort。
    【解决方案3】:

    就我个人而言,每当我开始制作一个新模块时,我都会通过cping 并从我的另一个与之类似的模块中编辑文件,并根据需要进行编辑。当然,这种方法中没有任何内容表明它必须是我的一种。 CPAN 上有很多代码,您可以复制并从中获得灵感……

    【讨论】:

      【解决方案4】:

      你也应该看看使用Inline::C

      【讨论】:

      • 好吧,既然我正在重写一些不需要/使用 Inline::C 的东西,那将是愚蠢的(笑)。 Inline::C 非常适合快速原型设计,但不适合部署到生产环境(有些用户没有主目录,因此目标文件会出现 /_Inline 和其他问题)。
      猜你喜欢
      • 2010-10-08
      • 2018-09-06
      • 2020-05-03
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 2017-07-24
      相关资源
      最近更新 更多