问题标签 [xs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
4295 浏览

c++ - 如何使用 Perl 的 C++ 类?

我有一组用 C++ 编写的类。从 Perl 脚本调用它们的最佳方法是什么?谢谢。

0 投票
3 回答
348 浏览

perl - 如何使用 Perl XS 中的 C 链表?

我用 Perl 和 XS 编写程序。我需要显示并执行一些使用 C 中的链表的操作。我怎样才能做到这一点?

0 投票
1 回答
154 浏览

perl - 在 XS 中,如何从变量名中获取变量地址?

在 XS 中,如何将包含变量名称的字符串转换为其地址,我想做类似以下 perl 代码的操作:

0 投票
2 回答
350 浏览

perl - 为什么我的 Perl 对象找不到它的 skip() 方法,即使我可以将它作为子例程调用?

我正在研究一个 Perl 模块,每当我调用skip()我以下列方式编写的方法时:

我得到:

当我这样称呼它时:

Perl 找到了!

奇怪的是,如果我将“ ”命名为skip其他任何名称(“ skipper”、“ hello”),则此语法有效:

我想可能skip()是一个“秘密”的保留关键字或其他东西,但我也有名为sort()and的方法next()(我知道它们是保留的),并且这些工作正常。

我真的很想将此方法命名为“ skip。” 有谁知道为什么 Perl 找不到它?

0 投票
2 回答
2795 浏览

perl - 如何将数组传递给 Perl XS 中的 C 函数?

如何通过引用 C XS 模块来传递 Perl 数组?

我在 XS 中该怎么做才能看到数组?

0 投票
4 回答
829 浏览

perl - 在 XS 中创建线程回调

编辑:我为此创建了一张票,其中包含有关这种做事方式的替代方法的数据。

更新了代码以尝试使用 MY_CXT 的回调,因为 gcxt 没有跨线程存储。但是,这在 ENTER 处出现段错误。

一旦我进入 ENTER 进行回调,这个段错误就会出现。

输出是

它应该是

0 投票
2 回答
808 浏览

perl - 在 XS 中为 C 库注册多个 Perl 子引用

perlcall (在“存储回调上下文信息的策略”部分)和扩展和嵌入 Perl(在“回调”部分)列出了 3 种不同的方法来处理从 XS/C 调用 Perl 子例程:

  1. 立即:XS 调用
  2. Deferred:将子 ref 保存为 SV* 以供以后使用
  3. 多个:保存 n 个子参考以供以后使用

上面 #3 列出的示例和详细信息使用 XS 中的哈希将 sub ref 与特定的 C 函数相关联,但它们预定义了固定数量的 C 函数,这是不够的。

我正在使用带有可选参数的回调/函数指针的 C 库的 XS 接口,例如:

这个库中的 C blah 最终将调用传递给它的函数以及传入的数据。

如果可能的话,我想做一个 C API 到 Perl 的一对一映射。例如

目前,我上面有#2,但是对 blah() 的另一个调用会覆盖保存的 SV *。

我将如何实现上面的#3?

0 投票
3 回答
383 浏览

perl - Perl 的 Data::Dumper 中的 DumpXS 有什么作用?

我已经浏览了Data::Dumper的源代码。在这个包中,我不明白 DumpXS 发生了什么。这个 DumpXS 有什么用?

我已经搜索过这个并且我读到了,它等于Dump函数并且它比Dump. 但我不明白。

0 投票
3 回答
612 浏览

perl - 如何有条件地将 C 代码片段编译到我的 Perl 模块?

我有一个模块将针对几个不同的操作系统和配置。有时,一些 C 代码可以使这个模块的任务更容易一些,所以我有一些 C 函数我想绑定代码。不必绑定 C 函数——例如,我不能保证最终用户甚至有一个 C 编译器,而且优雅地故障转移到完成相同事情的纯 Perl 方式通常不是问题-- 但如果我能从 Perl 脚本中调用 C 函数就更好了。

还在我这儿?这是另一个棘手的部分。几乎所有的 C 代码都是系统特定的——为 Windows 编写的函数无法在 Linux 上编译,反之亦然,而在 Solaris 上执行类似操作的函数看起来完全不同。


此外,即使对于针对同一系统的本机代码,也可能只有其中一些可以在任何特定配置上编译。

但理想情况下,我们仍然可以使用可以使用该配置进行编译的 C 函数。所以我的问题是:

  • 如何有条件地编译 C 函数(仅编译适合 的当前值的代码$^O)?

  • 如何单独编译 C 函数(有些函数可能无法编译,但我们仍想使用可以编译的函数)?

  • 我可以在构建时(最终用户安装模块时)还是在运行时(Inline::C例如,使用 )执行此操作?哪种方式更好?

  • 我如何知道哪些函数已成功编译并且可以从 Perl 中使用?

所有想法表示赞赏!


更新:感谢所有回复的人。所以这就是我所做的:

Inline::C我考虑了一种使用inside of 语句的运行时绑定方案eval,但最终选择了子类Module::Build 化和自定义ACTION_build方法:

检查$@可能非常脆弱。它适用于我尝试过的系统(全部使用 gcc),但它可能无法正常工作,因为它到处都是写的。

0 投票
3 回答
372 浏览

regex - 如何在 Perl 5.12 中从 C 创建一个 qr//?

这在 5.8 和 5.10 中一直为我工作,但在 5.12 中,我的代码创建了这个奇怪的非 qr 对象:

而打印一个不是由我的代码创建的 qr// 看起来像这样:

我的代码基本上是:

任何人都知道如何从 5.12 中的字符串正确创建正则表达式?