相同版本但具有不同配置选项的两个 perls 之间的兼容性?
Compatibility between two perls of the same version but with different config options?
例如,如果我有两个相同版本的 Perl 配置,
- 一个用
-Dusethreads
编译
- 没有它的编译
这两个版本能否共享同一个 corelist modules?或者我也需要一个单独的包裹吗?这种方法是否存在已知的 XS 代码编译异常?是否有可能针对线程 Perl 构建的任何东西都可以与非线程 Perl 一起使用?假设版本相同。
一般来说,XS 模块在不同的构建选项之间(以及不同的 perl 版本之间)不是二进制兼容的。因为如果没有别的,不同的构建选项可能会导致结构的大小和对齐方式在 perl 核心和编译模块之间发生变化,如果两者都可以访问相同的结构(例如 perl 标量变量),这将导致崩溃。同样在 MULTIPLICITY 构建中,包括线程构建,大多数 perl 核心 API 函数都添加了一个额外的参数(指向当前解释器的指针),并且在没有该指针的情况下调用该函数或反之亦然将再次导致崩溃。
例如,如果我有两个相同版本的 Perl 配置,
- 一个用
-Dusethreads
编译
- 没有它的编译
这两个版本能否共享同一个 corelist modules?或者我也需要一个单独的包裹吗?这种方法是否存在已知的 XS 代码编译异常?是否有可能针对线程 Perl 构建的任何东西都可以与非线程 Perl 一起使用?假设版本相同。
一般来说,XS 模块在不同的构建选项之间(以及不同的 perl 版本之间)不是二进制兼容的。因为如果没有别的,不同的构建选项可能会导致结构的大小和对齐方式在 perl 核心和编译模块之间发生变化,如果两者都可以访问相同的结构(例如 perl 标量变量),这将导致崩溃。同样在 MULTIPLICITY 构建中,包括线程构建,大多数 perl 核心 API 函数都添加了一个额外的参数(指向当前解释器的指针),并且在没有该指针的情况下调用该函数或反之亦然将再次导致崩溃。