问题标签 [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.
perl - 如何使用 B::Hooks 来操作 perl 解析器
我正在寻找玩 perl 解析器操作。看起来各种B::Hooks
模块都是人们使用的。我想知道:
对于没有
XS
经验的人来说,最好的起点(还)。有没有相关的博文?创建一个新的算子需要做多少工作,例如:
$a~>one~>two~>three
~>
会正常工作,->
但它不会尝试调用,undef
而是简单地返回undef
LHS。
尽管源过滤器可以工作——我更感兴趣的是了解如何在更深层次上操作解析器。
perl - Perl SV 值来自没有副本的指针
如何从空终止字符串创建 SV 值而无需复制?类似newSVpv(const char*, STRLEN)
但没有副本,并且将所有权转移到 Perl(因此 Perl 必须释放该字符串内存)。我需要这个来避免巨大的内存分配和复制。
我找到了以下示例:
但是我对 XS 的内部知识并不深入,并且有一些疑问。
c - 在 Perl XS 中使用 64 位整数
我想将使用 64 位整数的 C 函数移植到 Perl 代码。为此,我使用 Perl XS。
我的问题是 Perl XS 类型中没有 64 位整数(只有 U32、U16 和 U8)。
那么,在 Perl XS 代码中使用 64 位整数的最佳方法是什么?
这是我想要做的代码示例:
foo() 具有 C 原型:
我在 perlxs 文档和 stackoverflow.com 中没有发现任何有用的东西。
perl - Makefile.PL 检查是否找到源目录
我正在使用 ExtUtils::MakeMaker 创建 Makefile.PL 我将以下函数添加到 makefile.PL 以检查源目录是否存在
现在当我运行perl MakeFile.pl --source=/opt/src一切正常
但在那之后,当我运行make/dmake时,一切编译正常,但我总是收到“找不到目录”消息和“错误代码 255”,知道为什么我得到它,以及是否有不同的方法来检查在编写 MakeFile 时是否找到目录.PL 值得一提的是,如果我删除上面的代码,编译成功完成。
perl - Perl XS 对字符串的内存处理
我有一个这样的 XSUB:
但这在 valgrind 中的 New() 上显示为内存泄漏,如果我在循环中运行它,常驻内存将继续增长。
如果我也使用这个,我也会得到同样的结果:
我可以通过执行以下操作来防止泄漏和增加内存大小:
但是这个解决方案的问题是,当我使用 -Werror 进行编译时,会收到以下警告/错误。
c 文件使用未使用的 RETVAL 构建:
那么有没有更好的方法来处理 XS 中分配的字符串的返回?有没有办法使用 RETVAL 返回字符串并释放内存?我很感激任何帮助。
perl - 如何在 Perl 哈希中存储 null
我想在我的 C 代码 (XS) 中使用 Perl 哈希作为一个集合,所以我只需要将键保存在哈希中。是否可以存储诸如 null 或其他常量值之类的内容以避免创建不必要的值?
像这样的东西:
一种可能的解决方案可能是存储值本身,但也许有特殊的常量 forundef
或 null。
perl - 在 Perl 构建脚本中测试 LibreSSL
我Net::NSCAng::Client
前一阵子发布了,在 OpenBSD 上遇到了很多测试失败。原因是 NSCAng 协议在预共享密钥模式 (RFC4279) 中使用 OpenSSL,LibreSSL(现在 OpenBSD 上的默认设置)的人们已经淘汰了这一点。然而,他们似乎一心想以最不透明的方式做到这一点:包含文件定义了所有函数,只是共享库缺少相应的符号,所以编译工作正常但测试失败。
OpenBSD 上有一个名为 eopenssl 的兼容性包,通过首先在 Makefile.PL 中进行测试(使用),如果安装了兼容性库,ExtUtils::PkgConfig
我可以使其工作。如果不是,事情仍然失败。
我可以检查 CPP 符号 OPENSSL_NO_PSK,但由于包含始终来自 LibreSSL,因此即使与 eopenssl 链接可以正常工作,它也会失败。我剩下的唯一想法是尝试让测试程序像 autoconf 那样作为编译阶段的一部分运行。这甚至可能ExtUtils::MakeMaker
(或其他东西 - 如果必要的话我不介意切换构建系统)?
windows - 无法安装 perl 模块 Crypt::TEA
当我尝试在 Windows 7 上将 Crypt::TEA 模块安装到 perl 5.18 时,显示错误:
TEA.xs:在函数“XS_Crypt__TEA_crypt”中:TEA.xs:58:9:错误:无效使用无效表达式
list - 唯一元素存储的数据结构
我正在寻找一个最好执行等于 O(1) 的数据结构?在添加/删除/检索元素时适用于任意数量的元素。
这里有一些额外的指导方针,
- 检索元素不应涉及缓慢
keys()
- 元素必须始终唯一且已定义
- 元素顺序不重要
- 添加或删除元素不应涉及对其他元素的迭代
- 检索到的元素列表中的间隙是可以容忍的,并且可以用
undef
值表示
请提出更好的解决方案,
更新(使用)
perl - “.../auto/List/Util/Util.so: undefined symbol: PL_stack_sp at .../XSLoader.pm”仅在 Travis CI 上使用 CGI::Test _and_ 运行测试套件时
我有一个名为CGI::Github::Webhook的 Perl 模块,它的测试套件到目前为止在分支 master 上的 Travis CI 上运行良好。但是因为它是一个用于编写 CGI 脚本的模块,所以我想用CGI::Test对其进行测试,因为这将更接近现实生活中的场景。
但是到目前为止,在分支中运行的每个 Travis CI 都cgi-test
失败了。除了使用 Perl 5.24 及更高版本的运行外,每个失败的运行都包含这些行,只是路径中的 Perl 版本号不同:
示例取自当前在 Perl 5.22 下运行的最新版本。Perl 5.24 上的症状大致相同,只是最初的错误消息似乎措辞不同。
有人知道这里出了什么问题吗?我什至有机会解决这个问题吗?对我来说似乎是一个错误。但是在哪个模块中?我没有发现针对 CGI-Test、Scalar-List-Utils或XSLoader的匹配错误报告,但预计已经报告了这样的问题,因为它似乎不是新问题。(几个月前第一次注意到。)
如果我在 Debian Unstable(当前为 Perl 版本 5.22)上使用系统提供的 Perl 和 Perl 模块运行该测试套件,它不会失败,所以我无法在本地真正重现该问题。