1

Erlang R15B 添加了ErlDrvSSizeTtypedef,R16B 添加了erl_drv_output_term函数并弃用了旧的等效项。有没有办法用预处理器宏测试这些差异,以支持具有相同代码的旧 Erlang 版本?

4

1 回答 1

2

您可以使用 中提供的ERL_DRV_EXTENDED_MAJOR_VERSIONERL_DRV_EXTENDED_MINOR_VERSION宏值erl_driver.h来做出有关功能的决策。每当驱动程序 API 更改时,这些值都会适当地递增。这些增量总是在 Erlang/OTP 发行说明中解释。

例如,Erlang/OTP R15B 将一些 API 函数参数类型从int更改为新类型ErlDrvSizeT,以更好地应对 64 位平台。您可以使用以下代码对此进行测试并针对较旧的 R15B 之前的版本进行补偿:

#if ERL_DRV_EXTENDED_MAJOR_VERSION < 2
typedef int ErlDrvSizeT;
#endif

此 typedef 允许您使用该类型ErlDrvSizeT,即使是较旧的驱动程序版本。

在撰写本文时,Erlang 运行时系统 (erts) 的 Erlang/OTP 版本 17.3 和版本 6.2 是最新的。对于 erts 6.2,ERL_DRV_EXTENDED_MAJOR_VERSION分别ERL_DRV_EXTENDED_MINOR_VERSION具有值 3 和 1。此 Erlang/OTP 提交中的更改创建了这些版本值。

于 2014-10-10T12:27:57.533 回答