MULTIPLICITY
Perl API 宏和之间有什么关系PERL_IMPLICIT_CONTEXT
?
根据perlguts
:
一个宏控制主要的 Perl 构建风格:
MULTIPLICITY
. 该MULTIPLICITY
构建具有一个 C 结构,用于打包所有解释器状态。对于启用多重性的 perls,PERL_IMPLICIT_CONTEXT
通常也进行了定义,并启用了对传入表示所有三种数据结构的“隐藏”第一个参数的支持。
(顺便问一下,这里指的是哪一个“三种数据结构”?)
我注意到,当我使用以下命令构建 perl 时usethreads
:
./Configure -des -Dusethreads
宏PERL_IMPLICIT_CONTEXT
和MULTIPLICITY
都将被设置(定义)。此外,embedvar.h
还有一条可能相关的评论:
MULTIPLICITY
支持和 的以下组合PERL_IMPLICIT_CONTEXT
:
1) 无
2) MULTIPLICITY # 支持兼容性
3) MULTIPLICITY && PERL_IMPLICIT_CONTEXT这些标志的所有其他组合都是错误的。
只有#3 被直接支持,而#2 是#3 的特例(通过适当地重新定义 vTHX 来支持)。
那么,在编写 XS 代码时,写
#ifdef MULTIPLICITY
和写有什么区别#ifdef PERL_IMPLICIT_CONTEXT
吗?这两个变量背后的历史是什么?似乎他们今天可以减少到一个单一的。例如,如果在 perl 源代码中将所有出现的
MULTIPLICITY
替换为会发生什么?PERL_IMPLICIT_CONTEXT
它会破坏什么?