问题标签 [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 投票
1 回答
146 浏览

c++ - 防止 C++ 异常使我的 Perl 脚本崩溃

我有一个 Perl 脚本,它使用了一些可能使用 xs 包装的 C++ 库。当库抛出异常时,即使从内部调用它也会使我的 Perl 脚本崩溃eval。如何跳过异常并防止我的脚本崩溃?

Perl 版本是 v5.12.4

0 投票
2 回答
1045 浏览

c - 在 Perl XS 中使用 struct

我是 Perl XS 的新手,我正在尝试将 C 函数转换为 Perl 子例程。

我有以下 C 函数

其中parse函数接受指向的指针struct parser、字符串和字符串的长度。struct parser定义如下:

该函数将其结果存储在result参数中。

我想将此函数转换为 Perl XS。我正在做的是这样的:

如何更改上面的代码以parse_xs像这样在 Perl 代码中运行

其中$resultparseC 函数的结果。

0 投票
1 回答
54 浏览

multithreading - 是否可以在主线程之外使用/创建/修改 SV/HV/AV?

我正在尝试在使用 pthread_create() 创建的新线程中使用 newSVpvn() 创建 SV。此时我的程序崩溃了。发生崩溃的 C 函数如下所示

和 XSUB

测试示例

完整代码可以在这里找到:https ://github.com/olegwtf/p5-Net-DNS-Native/blob/fbc57dbe9e6832afed8d46cd369db6930bbd53bc/Native.xs

那么,有没有可能做我想做的事?

0 投票
0 回答
143 浏览

perl - when should I #define NO_XSLOCKS

NO_XSLOCKS allows the usage of some error checking macros in XS code when combined with #include XSUB.h. However, its use seems to go beyond that. It was recently suggested that I add it to my XS file for better compatibility with ActiveState perl, with this issue given as an example.

What else does #define NO_XSLOCKS do, and when should I use it in my XS code?

0 投票
2 回答
225 浏览

perl - Perl/XS 中的过程和面向对象的接口

我目前正在编写我的第一个 XS 模块(只是 C 数学库的一个包装器)并取得了不错的成功。最大的问题是文档很难理解和/或不完整。

我已经成功地在 XS 中编写了一个构造函数,并从库中实现了一些函数作为方法调用。这很好用。

现在我也想实现一个过程接口。出于这个原因,我需要知道它是否是一个方法调用。如果它是一个方法调用,则用函数计算的数字存储在实例中,如果它是对函数的过程调用,它的数字作为第一个参数给出。这是余弦函数的当前代码:

0 投票
1 回答
151 浏览

perl - sv_catpv() 和 sv_catpvs() 有什么区别?

根据perlapisv_catpv()工作原理如下:

NUL将- 终止的字符串连接到 SV 中字符串的末尾。如果 SV 设置了 UTF-8 状态,则附加的字节应该是有效的 UTF-8。处理“get”魔法,但不处理“set”魔法。

void sv_catpv(SV *const sv, const char* ptr)

不过,我发现的大多数 XS 教程都使用sv_catpvs()了 ,它是这样做的:

类似sv_catpvn,但采用文字字符串而不是字符串/长度对。

void sv_catpvs(SV* sv, const char* s)

好吧,这不是很有帮助,所以让我们看一下sv_catpvn()

将字符串连接到 SV 中字符串的末尾。指示要复制的len字节数。如果 SV 设置了 UTF-8 状态,则附加的字节应该是有效的 UTF-8。处理“get”魔法,但不处理“set”魔法。

void sv_catpvn(SV *dsv, const char *sstr, STRLEN len)

因此,除了将字符串长度作为单独的参数外,它的作用与它sv_catpvn相同,除了它采用文字字符串外。sv_catpvsv_catpvssv_catpvn

sv_catpv和我之间是否有一些微妙的区别sv_catpvs,或者它们只是做同一件事的两种方法?

0 投票
1 回答
95 浏览

c - 如何将 Perl 堆栈变成 AV?

注意:这是关于 Perl 内部,C 代码本身的问题。

我想将 Perl 堆栈(即 SP)的内容作为数组传递给 Perl 函数。

  1. 是否有将堆栈复制到 AV 的现有方法?
  2. 如果没有,如何实现它?该数组可以是只读的。
  3. 如何将 AV 变成参考?
0 投票
1 回答
281 浏览

c++ - 从 Perl 代码调用 C++ 程序

我编写了调用子模块数千万次的 perl 代码。子模块是计算密集型的,它的运行时间很慢。我找到了一个完全执行子模块功能的 C++ 程序,我想用 C++ 程序替换子模块。我想知道是否必须编写 XS 代码来接口程序。在 perl 代码中使用“system”命令直接调用 C++ 程序是否会大大降低性能?谢谢!

0 投票
1 回答
288 浏览

c - C程序在调用perl函数newSVpv()时不断崩溃

尝试使用 perl 数据结构(部分作为在 C 中支持关联数组的一种方式),但以下程序不断崩溃。它编译得很好,但会在使用 newSVpv() 时崩溃。不知道为什么。

编译它的行是

我拥有的 perl 是在 Ubuntu 12.04.4 LTS 上运行的 5.14.2。

感谢您的任何提示!

更新:添加了 gdb 跟踪。谢谢你的提问。gdb 跟踪:

0 投票
2 回答
107 浏览

windows - activestate perl windows - 查找所有已安装的 xs 模块

为了准备 perl 升级,我想知道为我的本地 activestate perl 5.16 安装安装了哪些perl xs 模块。

有人知道我怎么能得到这样的 perl 模块列表吗?