查看源代码 Erl_interface 发行说明
本文档描述了对 Erl_interface 应用程序所做的更改。
Erl_Interface 5.5.2
改进和新功能
文档已迁移为使用 Markdown 和 ExDoc。
自有 ID:OTP-18955 辅助 ID:PR-8026
已知错误和问题
用于解码/编码术语的
ei
API 未完全兼容 64 位,因为外部术语格式表示大于 2 GB 的术语无法处理。自有 ID:OTP-16607 辅助 ID:OTP-16608
Erl_Interface 5.5.1
已修复的错误和故障
修复了系统安装的 openssl/md5.h 会与 vendor 的 md5.h 混淆的错误。
自有 ID:OTP-18931 辅助 ID:GH-7987 PR-7989
Erl_Interface 5.5
已修复的错误和故障
修复了 Windows 上的一些无害的编译警告。
自有 ID:OTP-18895
改进和新功能
添加了使用
ei_x_format
编码 map 的支持。自有 ID:OTP-18764 辅助 ID:PR-7602
将旧的 md5 实现替换为 OpenSSL 的实现。
自有 ID:OTP-18877
已知错误和问题
用于解码/编码术语的
ei
API 未完全兼容 64 位,因为外部术语格式表示大于 2 GB 的术语无法处理。自有 ID:OTP-16607 辅助 ID:OTP-16608
Erl_Interface 5.4
改进和新功能
自从 OTP 24 发布以来,已经宣布了对
- 外部术语格式中的版本 4 节点容器类型的支持现在是强制性的。也就是说,引用支持最多 5 个 32 位整数标识符,以及支持 64 位数据存储的进程和端口标识符。因此,分发标志
DFLAG_V4_NC
现在也是强制性的。自 OTP 24 以来,OTP 一直支持这一点。另请注意,term_to_binary()
和term_to_iovec()
生成的外部格式将无条件地生成支持此较大格式的 pid、端口和引用。 - OTP 23.3 中引入的新链接协议现在是强制性的。因此,分发标志
DFLAG_UNLINK_ID
现在也是强制性的。
由于上述原因,OTP 26 节点将拒绝连接到 OTP 24 之前版本的 OTP 节点。
*潜在的不兼容性*
自有 ID:OTP-18140 辅助 ID:PR-6072
- 外部术语格式中的版本 4 节点容器类型的支持现在是强制性的。也就是说,引用支持最多 5 个 32 位整数标识符,以及支持 64 位数据存储的进程和端口标识符。因此,分发标志
已知错误和问题
用于解码/编码术语的
ei
API 未完全兼容 64 位,因为外部术语格式表示大于 2 GB 的术语无法处理。自有 ID:OTP-16607 辅助 ID:OTP-16608
Erl_Interface 5.3.2.1
改进和新功能
将旧的 md5 实现替换为 OpenSSL 的实现。
自有 ID:OTP-18877
Erl_Interface 5.3.2
已修复的错误和故障
修复了几个 ARM 特定指令的配置测试,这些指令阻止了模拟器在某些平台上构建。
自有 ID:OTP-18554
Erl_Interface 5.3.1
已修复的错误和故障
接受来自未使用 epmd 的 OTP 23 和 24 节点的连接设置。
自有 ID:OTP-18404 辅助 ID:GH-6595, PR-6625
已知错误和问题
用于解码/编码术语的
ei
API 未完全兼容 64 位,因为外部术语格式表示大于 2 GB 的术语无法处理。自有 ID:OTP-16607 辅助 ID:OTP-16608
Erl_Interface 5.3
已修复的错误和故障
在 libc 提供
gethostbyname
的平台上,erl_call
不再链接nsl
。自有 ID:OTP-17846 辅助 ID:PR-5558
改进和新功能
以下分发标志现在是强制性的:
DFLAG_BIT_BINARIES
、DFLAG_EXPORT_PTR_TAG
、DFLAG_MAP_TAGS
、DFLAG_NEW_FLOATS
和DFLAG_FUN_TAGS
。这主要涉及自行实现分发协议的库或应用程序。自有 ID:OTP-17318 辅助 ID:PR-4972
为
autoconf
2.71 调整的configure
脚本的输入。自有 ID:OTP-17414 辅助 ID:PR-4967
删除了使用节点创建值 0 作为通配符。还防止
erl_interface
和jinterface
节点将 0 用作创建。自有 ID:OTP-17682 辅助 ID:PR-5347
将函数
ei_connect_init
及其朋友的creation
参数类型从short
更改为unsigned int
,以获得完整的 32 位范围。自有 ID:OTP-17802 辅助 ID:PR-5347
已知错误和问题
用于解码/编码术语的
ei
API 未完全兼容 64 位,因为外部术语格式表示大于 2 GB 的术语无法处理。自有 ID:OTP-16607 辅助 ID:OTP-16608
Erl_Interface 5.2.2.1
改进和新功能
将旧的 md5 实现替换为 OpenSSL 的实现。
自有 ID:OTP-18877
Erl_Interface 5.2.2
已修复的错误和故障
如果未给出配置选项
--enable-ei-dynamic-lib
,则避免尝试构建动态库。自有 ID:OTP-17987 辅助 ID:GH-5781, PR-5787
Erl_Interface 5.2.1
已修复的错误和故障
修复了 Android 上关于
gethostbyaddr_r
的编译错误。错误在 OTP 24.3 中引入。自有 ID:OTP-17975 辅助 ID:PR-5763
Erl_Interface 5.2
改进和新功能
添加
--enable-ei-dynamic-lib
配置选项,该选项将使 erl_interface 也发布 libei 的动态库版本。自有 ID:OTP-17883 辅助 ID:PR-5601 ERIERL-724
已知错误和问题
用于解码/编码术语的
ei
API 未完全兼容 64 位,因为外部术语格式表示大于 2 GB 的术语无法处理。自有 ID:OTP-16607 辅助 ID:OTP-16608
Erl_Interface 5.1
改进和新功能
当无法解析参数时,erl_call 现在会打印错误。
自有 ID:OTP-17626
已知错误和问题
用于解码/编码术语的
ei
API 未完全兼容 64 位,因为外部术语格式表示大于 2 GB 的术语无法处理。自有 ID:OTP-16607 辅助 ID:OTP-16608
Erl_Interface 5.0.1
已修复的错误和故障
生成的
configure
脚本的提交。自有 ID:OTP-17420 辅助 ID:OTP-17398, GH-4821
Erl_Interface 5.0
已修复的错误和故障
已向
erl_call
添加了两个选项。-fetch_stdout
选项会获取erl_call
调用的代码产生的 stdout 数据。-fetch_stdout
选项会禁用结果术语的打印。为了实现这两个选项中的第一个,erl_interface 中添加了一个名为ei_xrpc_from
的新函数。有关详细信息,请参阅erl_call
文档和erl_interface
文档。自有 ID:OTP-17132
改进和新功能
接受来自外部节点的 64 位进程标识符。这是在未来的 OTP 版本中使用 64 位 pid 的升级路径中的第一步。
自有 ID:OTP-16720 辅助 ID:PR-2680
已删除实验性的 HiPE 应用程序以及其他应用程序中的所有相关功能。
*潜在的不兼容性*
自有 ID:OTP-16963
已删除
erl_interface
的registry
功能。它自 OTP 23 起已弃用,并计划在 OTP 24 中删除。*潜在的不兼容性*
自有 ID:OTP-16970
接受来自远程节点的最大 160 位大小的引用。这是在未来的 OTP 版本中使用最大 160 位引用的升级路径中的第一步。
自有 ID:OTP-17005 辅助 ID:OTP-16718
接受来自外部节点的 64 位端口标识符。这是在未来的 OTP 版本中使用 64 位端口标识符的升级路径中的第一步。
自有 ID:OTP-17007
支持新的链接协议,以便将来能够逐步淘汰旧的链接协议。
erl_interface
不支持从erl_interface
端设置或移除链接,因此旧协议中存在的错误不会影响erl_interface
。这是因为链接的双方需要同时操作链接才能触发该错误。自有 ID:OTP-17270 辅助 ID:OTP-17127
已知错误和问题
用于解码/编码术语的
ei
API 未完全兼容 64 位,因为外部术语格式表示大于 2 GB 的术语无法处理。自有 ID:OTP-16607 辅助 ID:OTP-16608
Erl_Interface 4.0.3.1
已修复的错误和故障
生成的
configure
脚本的提交。自有 ID:OTP-17420 辅助 ID:OTP-17398, GH-4821
已知错误和问题
用于解码/编码术语的
ei
API 未完全兼容 64 位,因为外部术语格式表示大于 2 GB 的术语无法处理。自有 ID:OTP-16607 辅助 ID:OTP-16608
Erl_Interface 4.0.3
已修复的错误和故障
修复了当 TCP 缓冲区满时,使用无限超时发送大数据的 ei_send*/ei_rpc 可能失败的错误。
该故障自 OTP-21 版本起就已存在。
自有 ID:OTP-17358 辅助 ID:ERLERL-610
已知错误和问题
用于解码/编码术语的
ei
API 未完全兼容 64 位,因为外部术语格式表示大于 2 GB 的术语无法处理。自有 ID:OTP-16607 辅助 ID:OTP-16608
Erl_Interface 4.0.2.1
已修复的错误和故障
修复了当 TCP 缓冲区满时,使用无限超时发送大数据的 ei_send*/ei_rpc 可能失败的错误。
该故障自 OTP-21 版本起就已存在。
自有 ID:OTP-17358 辅助 ID:ERLERL-610
Erl_Interface 4.0.2
已修复的错误和故障
之前,超出范围 [-(1 bsl 32) - 1, (1 bsl 32) -1] 的整数应由
ei_print_term()
和ei_s_print_term()
以内部大数格式打印。不幸的是,自 OTP R13B02 以来,该实现一直存在错误,并且此后产生的内容随机的结果,这还可能导致调用程序崩溃。此修复将内部格式的打印替换为十六进制格式的打印,并扩展了十进制格式的打印范围。目前,范围 [-(1 bsl 64), (1 bsl 64)] 内的整数以十进制格式打印,超出此范围的整数以 Erlang 十六进制格式打印。
自有 ID:OTP-17099 辅助 ID:ERIERL-585
已知错误和问题
用于解码/编码术语的
ei
API 未完全兼容 64 位,因为外部术语格式表示大于 2 GB 的术语无法处理。自有 ID:OTP-16607 辅助 ID:OTP-16608
Erl_Interface 4.0.1
已修复的错误和故障
修复了 Windows 上的 erl_interface,使其使用正确的标志进行编译,从而使内部原语可重入。
自有 ID:OTP-16740
修复了
ei_get_type
,使其根据文档将 floats、pids、port 和 refs 的*size
设置为零。自有 ID:OTP-16753 辅助 ID:ERL-1288,PR-2678
修复了当使用动态节点名称时,强制使用分发版本 6 的 ei_connect。
此错误导致
erl_call -R -address
无法正常工作。自有 ID:OTP-16786
改进和新功能
为了在 Haiku 操作系统上构建而进行的更改。
感谢 Calvin Buckley
自有 ID:OTP-16707 辅助 ID:PR-2638
已知错误和问题
用于解码/编码术语的
ei
API 未完全兼容 64 位,因为外部术语格式表示大于 2 GB 的术语无法处理。自有 ID:OTP-16607 辅助 ID:OTP-16608
Erl_Interface 4.0
已修复的错误和故障
修复了 64 位 Windows 上的各种编译器警告。
自有 ID:OTP-15800
erl_call
现在可以在无法解析其自身主机名的系统上正常工作。自有 ID:OTP-16604
各种错误修复
- 各种函数中的内部错误检查。
ei_rpc()
接受任何 2 元组消息作为 rpc 响应。ei_decode_ref()
现在拒绝在解码巨大引用时写入已分配内存之外的区域。ei_decode_ei_term()
现在报告与ei_get_type()
相同的项类型。
自有 ID:OTP-16623
改进和新功能
客户端节点可以从其首次连接的节点动态接收其节点名称。此功能可以通过以下方式使用:
- 使用
erl -sname undefined
启动 - erl_interface 函数
ei_connect_init
及其相关函数 erl_call -R
自有 ID:OTP-13812
- 使用
将节点化身号(又名“创建”)的大小从 2 位增加到 32 位。这将减少来自具有相同名称的不同节点化身的 pids/ports/refs 被混淆的风险。
自有 ID:OTP-15603
修复了将 Erlang/OTP 编译到 IBM AIX 平台时的各种构建问题。
自有 ID:OTP-15866 辅助 ID:PR-2110
改进了节点连接设置握手协议。使得可以在不依赖
epmd
或其他对等节点版本预先了解的情况下就协议版本达成一致。还添加了节点化身值(“创建”)的交换,并将分发能力标志字段从 32 位扩展到 64 位。自有 ID:OTP-16229
新的
erl_call
选项-address [Host]:Port
,可以直接连接到节点,而无需依赖epmd
来解析节点名称。自有 ID:OTP-16251
正如在 OTP 22.0 中宣布的那样,
erl_interface
中已弃用的部分现在已被删除(本质上是所有带有前缀erl_
的 C 函数)。*潜在的不兼容性*
自有 ID:OTP-16328
正如在 OTP 22.0 中宣布的那样,之前对 VxWorks 的有限支持现已被删除。
*潜在的不兼容性*
自有 ID:OTP-16329 辅助 ID:OTP-15621
新函数
ei_connect_host_port
及其相关函数,允许在不依赖epmd
进行节点名称解析的情况下进行节点连接。自有 ID:OTP-16496 辅助 ID:OTP-16251
已向
erl_interface
API 添加了许多新函数自有 ID:OTP-16594
为
erl_call
添加了-timeout
选项。自有 ID:OTP-16624
从 OTP 23 开始,
erl_interface
registry
功能已被弃用,并将从 OTP 24 中删除。合理的新gcc
编译器在使用此功能时会发出弃用警告。为了禁用这些警告,请定义宏EI_NO_DEPR_WARN
。*潜在的不兼容性*
自有 ID:OTP-16630
文档改进。
自有 ID:OTP-16633
已知错误和问题
用于解码/编码术语的
ei
API 未完全兼容 64 位,因为外部术语格式表示大于 2 GB 的术语无法处理。自有 ID:OTP-16607 辅助 ID:OTP-16608
Erl_Interface 3.13.2.2
已修复的错误和故障
生成的
configure
脚本的提交。自有 ID:OTP-17420 辅助 ID:OTP-17398, GH-4821
已知错误和问题
用于解码/编码术语的
ei
API 未完全兼容 64 位,因为外部术语格式表示大于 2 GB 的术语无法处理。自有 ID:OTP-16607 辅助 ID:OTP-16608
Erl_Interface 3.13.2.1
已修复的错误和故障
修复了当 TCP 缓冲区满时,使用无限超时发送大数据的 ei_send*/ei_rpc 可能失败的错误。
该故障自 OTP-21 版本起就已存在。
自有 ID:OTP-17358 辅助 ID:ERLERL-610
已知错误和问题
用于解码/编码术语的
ei
API 未完全兼容 64 位,因为外部术语格式表示大于 2 GB 的术语无法处理。自有 ID:OTP-16607 辅助 ID:OTP-16608
Erl_Interface 3.13.2.0.1
已修复的错误和故障
修复了当 TCP 缓冲区满时,使用无限超时发送大数据的 ei_send*/ei_rpc 可能失败的错误。
该故障自 OTP-21 版本起就已存在。
自有 ID:OTP-17358 辅助 ID:ERIERL-610
Erl_Interface 3.13.2
已修复的错误和故障
修复了 gcc 版本 10 或使用 gcc 选项 -fno-common 构建时出现的链接错误“`ei_default_socket_callbacks` 的多重定义”。该错误自 OTP-21.3 起就已存在。
自有 ID:OTP-16412 辅助 ID:PR-2503
Erl_Interface 3.13.1
已修复的错误和故障
修复了 Windows 和其他没有 gcc 原子的平台的用户提供的套接字实现。
自有 ID:OTP-16308
Erl_Interface 3.13
已修复的错误和故障
修复了
ei_print_term
中二进制文件和位字符串的错误,这些错误导致了不正确的输出。自有 ID:OTP-15917
修复了
ei_decode_fun
中针对非常旧的 fun 编码格式的错误。该错误自 OTP 22.0 起就已存在。自有 ID:OTP-15996
改进和新功能
ei_print_term()
现在支持打印 map 和 fun。自有 ID:OTP-15814
Erl_Interface 3.12
已修复的错误和故障
vxworks 配置已更新为遵循环境变量 CFLAGS。
自有 ID:OTP-15773
改进和新功能
对并行配置的构建系统进行了小的调整。
自有 ID:OTP-15340 辅助 ID:OTP-14625
从 OTP 22 开始,对 VxWorks 的有限支持已弃用,并将从 OTP 23 中删除。
*潜在的不兼容性*
自有 ID:OTP-15621
从 OTP 22 开始,旧的遗留
erl_interface
库(带有前缀erl_
的函数)已被弃用,并将从 OTP 23 中删除。这不适用于ei
库。合理的新gcc
编译器将发出弃用警告。为了禁用这些警告,请定义宏EI_NO_DEPR_WARN
。*潜在的不兼容性*
自有 ID:OTP-15622
添加了对接收、解码、编码和发送位字符串和导出 funs(
fun M:F/A
)的支持。新增了函数
ei_decode_bitstring
和ei_encode_bitstring
,用于解码和编码比特串,其中比特数不一定能被 8 整除(即不是整数个字节)。现有的函数ei_decode_fun
和ei_encode_fun
现在也可以处理导出函数 (export funs)。在此更改之前,发送到 erl_interface C 节点的比特串和导出函数使用未文档化的回退元组格式进行编码。对于比特串,使用
{Binary,BitsInLastByte}
,对于导出函数,使用{M,F}
。期望这些元组的现有 C 节点实现必须更改为使用ei_decode_bitstring
和ei_decode_fun
。作为临时解决方案,您也可以使用宏EI_COMPAT=21
构建 erl_interface,或者调用ei_set_compat_rel(21)
来接收旧的回退元组。*潜在的不兼容性*
自有 ID:OTP-15712 辅助 ID:OTP-15774
Erl_Interface 3.11.3.2
已修复的错误和故障
修复了当 TCP 缓冲区满时,使用无限超时发送大数据的 ei_send*/ei_rpc 可能失败的错误。
该故障自 OTP-21 版本起就已存在。
自有 ID:OTP-17358 辅助 ID:ERLERL-610
已知错误和问题
用于解码/编码术语的
ei
API 未完全兼容 64 位,因为外部术语格式表示大于 2 GB 的术语无法处理。自有 ID:OTP-16607 辅助 ID:OTP-16608
Erl_Interface 3.11.3.1
已修复的错误和故障
修复了 gcc 版本 10 或使用 gcc 选项 -fno-common 构建时出现的链接错误“`ei_default_socket_callbacks` 的多重定义”。该错误自 OTP-21.3 起就已存在。
自有 ID:OTP-16412 辅助 ID:PR-2503
已知错误和问题
用于解码/编码术语的
ei
API 未完全兼容 64 位,因为外部术语格式表示大于 2 GB 的术语无法处理。自有 ID:OTP-16607 辅助 ID:OTP-16608
Erl_Interface 3.11.3
已修复的错误和故障
erl_interface
/ei
拒绝使用活节点名称(节点名称中 @ 符号之前的部分)长度超过 63 个字符,主机名长度超过 64 个字符的节点名称。因此,节点名称(活节点名称@主机名)中允许的总字符数被限制为 128 个字符。这些限制既适用于自身节点名称,也适用于其他节点的节点名称。普通的 Erlang 节点将节点名称长度限制为 256 个字符,这意味着您可能由于其使用的节点名称而无法与某些 Erlang 节点通信。erl_interface
/ei
现在允许节点名称中的总字符数最多为 256 个字符。这些字符可以在活节点名称和主机名之间任意分配。也就是说,活节点名称中的最大字符数可以是 254 个,主机名中的最大字符数可以是 254 个,但节点名称总共不得超过 256 个字符。自有 ID:OTP-15781 辅助 ID:ERIERL-356
Erl_Interface 3.11.2.1
已修复的错误和故障
erl_interface
/ei
拒绝使用活节点名称(节点名称中 @ 符号之前的部分)长度超过 63 个字符,主机名长度超过 64 个字符的节点名称。因此,节点名称(活节点名称@主机名)中允许的总字符数被限制为 128 个字符。这些限制既适用于自身节点名称,也适用于其他节点的节点名称。普通的 Erlang 节点将节点名称长度限制为 256 个字符,这意味着您可能由于其使用的节点名称而无法与某些 Erlang 节点通信。erl_interface
/ei
现在允许节点名称中的总字符数最多为 256 个字符。这些字符可以在活节点名称和主机名之间任意分配。也就是说,活节点名称中的最大字符数可以是 254 个,主机名中的最大字符数可以是 254 个,但节点名称总共不得超过 256 个字符。自有 ID:OTP-15781 辅助 ID:ERIERL-356
Erl_Interface 3.11.2
已修复的错误和故障
修复 Makefile 依赖项的处理,以便并行 make 正常工作。
自有 ID:OTP-15757
Erl_Interface 3.11.1
已修复的错误和故障
修复了
erl_call
程序中的两个错误。一个是缺少初始化(在erl_interface-3.11
中引入),导致崩溃或无法连接到或启动节点;另一个是不正确计算的超时,可能导致无法启动 Erlang 节点。这些错误仅在某些平台上导致失败。自有 ID:OTP-15676 辅助 ID:OTP-15442,ERL-881
Erl_Interface 3.11
改进和新特性
增加了对 用户提供的套接字实现的插件的支持。
自有 ID:OTP-15442 辅助 ID:ERIERL-258
Erl_Interface 3.10.4
已修复的错误和故障
使
ei_connect
及其相关函数在握手期间也接受状态ok_simultaneous
,这意味着另一个节点已发起连接设置,该设置将被取消,以支持此连接。自有 ID:OTP-15161 辅助 ID:ERIERL-191
修复了
ei_receive_msg
、ei_xreceive_msg
、ei_receive_msg_tmo
和ei_xreceive_msg_tmo
中的错误。x->index
被设置为整个缓冲区大小,而不是实际接收到的字节数。自有 ID:OTP-15171
修复了如果被并发线程调用可能引发的
ei_connect_init
中的错误。ei_connect_init
调用了 posix 接口gethostbyname
,该接口被文档化为非线程安全的。自有 ID:OTP-15191
修复了 erl_compare_ext() 忽略内容相同的列表的尾部的错误。示例:
[a | b]
和[a | c]
被认为相等,{[a], b}
和{[a], c}
被认为相等。自有 ID:OTP-15277 辅助 ID:PR-1929
Erl_Interface 3.10.3
已修复的错误和故障
修复了在某些平台上调用 erl_init 可能导致缓冲区溢出错误的错误。
自有 ID:OTP-15033
修复了
erl_call -m
,使其不会在读取模块源二进制文件之前释放该文件。自有 ID:OTP-15105 辅助 ID:ERL-629
改进和新特性
程序
erl_call
调用erl_eval:eval_str/1
,而不是之前的lib:eval_str/1
。这意味着当尝试与运行 Erlang/OTP 20 或更早版本的 Erlang 节点交互时,erl_call
将失败。自有 ID:OTP-15114 辅助 ID:OTP-15072,ERL-634
Erl_Interface 3.10.2.2
已修复的错误和故障
修复 Makefile 依赖项的处理,以便并行 make 正常工作。
自有 ID:OTP-15757
Erl_Interface 3.10.2.1
已修复的错误和故障
使
ei_connect
及其相关函数在握手期间也接受状态ok_simultaneous
,这意味着另一个节点已发起连接设置,该设置将被取消,以支持此连接。自有 ID:OTP-15161 辅助 ID:ERIERL-191
Erl_Interface 3.10.2
已修复的错误和故障
修复了
ei_connect
函数中可能由于 gethostbyname_r 的缓冲区空间不足而导致失败的错误。自有 ID:OTP-15022 辅助 ID:ERIERL-163
优化了纯 7 位 ASCII 原子编码/解码。
自有 ID:OTP-15023 辅助 ID:ERIERL-150
Erl_Interface 3.10.1
已修复的错误和故障
删除了文档中所有旧的未使用文件。
自有 ID:OTP-14475 辅助 ID:ERL-409,PR-1493
Erl_Interface 3.10
已修复的错误和故障
修复了 gethostname 在 Linux 上可能错误地返回 enametoolong 的错误。
自有 ID:OTP-14310
改进和新特性
删除了在 Erlang 节点、
erl_interface
和jinterface
之间的分发中使用旧的 latin1 外部格式生成原子的功能。新的原子 utf8 格式在 OTP R16 中引入。因此,OTP 20 节点无法连接到早于 R16 的节点。可以使用 latin1 编码的原子仍然使用
term_to_binary()
进行 latin1 编码。请注意,在未来的 Erlang/OTP 版本中,所有原子默认都将使用 utf8 进行编码。有关更多信息,请参阅erlang:term_to_binary/2
的文档。自有 ID:OTP-14337
Erl_Interface 3.9.3
改进和新特性
小的文档更新
自有 ID:OTP-14233 辅助 ID:PR-1343
Erl_Interface 3.9.2
已修复的错误和故障
修复
ei_connect_init
和ei_connect_xinit
,以调整creation
参数,使其与早于 OTP-19 的节点兼容。自有 ID:OTP-13981
改进和新功能
编辑文档变更
自有 ID: OTP-13980
Erl_Interface 3.9.1
已修复的 Bug 和故障
如果未设置 HOMEDRIVE 和 HOMEPATH,则在 Windows 系统目录中查找 .erlang.cookie。与 VM 的行为相同。
自有 ID: OTP-13849
Erl_Interface 3.9
已修复的 Bug 和故障
修复 erl_decode 中 LLONG_MIN 的解码
自有 ID: OTP-13666 辅助 ID: ERL-158
在 Windows 上,当尝试解码不适合 long 的数字时,
ei_decode_ulong
和ei_decode_long
现在会正确返回错误。修复了在 Windows 上启用 ei 跟踪会导致段错误的 Bug。自有 ID: OTP-13673
改进和新功能
处理来自“创建”值大于 3 的节点的术语(pid、端口和引用)。这是分发协议的准备工作,允许 OTP 19 节点与未来的节点(20 或更高版本)正确通信。“创建”值区分同一节点(名称)的不同化身。
自有 ID: OTP-13488
Erl_Interface 3.8.2
已修复的 Bug 和故障
修复 Debian/Hurd 和 Debian/kFreeBSD 上的 Erl_Interface 构建错误。(感谢 Sergei Golovan)
自有 ID: OTP-13328
改进和新功能
EPMD 支持 IPv4 和 IPv6
也影响最旧的支持 Windows 版本。
自有 ID: OTP-13364
Erl_Interface 3.8.1
改进和新功能
修复 gethostbyname_r 和 gethostbyaddr_r 的条件选择。
自有 ID: OTP-13188
Erl_Interface 3.8
改进和新功能
不接受 Nan 和 Infinity 值
Erlang 不接受这些值,因此我们在 C 接口中返回错误,而不是让它们传递到 Erlang VM,后者会以有点神秘的“bad external term”拒绝该消息。
自有 ID: OTP-12801
Erl_Interface 3.7.20
已修复的 Bug 和故障
在非 GCC 编译器上可用时,使用 C99 函数 isfinite() 而不是 finite()。
自有 ID: OTP-12268
改进和新功能
在构建时将
autoconf
帮助程序分发到应用程序,而不是在存储库中提交多个相同的副本。自有 ID: OTP-12348
为应用程序添加了一个 .appup 文件。
自有 ID: OTP-12358 辅助 ID: OTP-12178
Erl_Interface 3.7.19
已修复的 Bug 和故障
为应用程序添加了一个
.app
文件。自有 ID: OTP-12178
Erl_Interface 3.7.18
已修复的 Bug 和故障
实现 --enable-sanitizers[=sanitizers]。类似于使用 Valgrind 进行调试,启用 -fsanitize= 开关以在运行时捕获 Bug 非常有用。
自有 ID: OTP-12153
Erl_Interface 3.7.17
已修复的 Bug 和故障
现在可以使用 Visual Studio 了。
自有 ID: OTP-11984
Erl_Interface 3.7.16
已修复的 Bug 和故障
修复 gen_challange 中的内存检查警告(感谢 Olivier Girondel)
自有 ID: OTP-11608
Erl_Interface 3.7.15
已修复的 Bug 和故障
消除警告(感谢 Anthony Ramine)
自有 ID: OTP-11517
Erl_Interface 3.7.14
改进和新功能
引入了系统和构建配置的检查功能。
自有 ID: OTP-11196
来自 ic 和 erl_interface 的头文件和库文件现在安装到 usr/{include,lib} 中。请注意,这些目录是未版本化的,因此最新的安装版本将是目录中的版本。
自有 ID: OTP-11284
修复 Mac OSX 下的 true 二进制文件的位置。感谢 Simon Cornish。
自有 ID: OTP-11289
Erl_Interface 3.7.13
改进和新功能
添加了一个保护来检查文件描述符在关闭之前是否有效。
自有 ID: OTP-11167
Erl_Interface 3.7.12
已修复的 Bug 和故障
枚举 erlang_char_encoding 中的多余尾随逗号导致 g++ 使用 --pedantic 选项时出现编译错误。
自有 ID: OTP-10913 辅助 ID: seq12264
Erl_Interface 3.7.11
已修复的 Bug 和故障
将结构体
erlang_pid
、erlang_port
和erlang_ref
恢复为 R16A 之前的状态(没有node_org_enc
),以便向后兼容访问这些结构体字段的用户代码。自有 ID: OTP-10885 辅助 ID: seq12256
Erl_Interface 3.7.10
改进和新功能
在必要时,已将声明编码的注释添加到 Erlang 文件中。当 UTF-8 成为默认编码时,该注释将在 Erlang/OTP R17B 中删除。
自有 ID: OTP-10630
有限支持外部格式和 vm 内部表示中的 Unicode 原子。这是一个准备性功能,以支持与未来可能创建 Unicode 原子的 Erlang/OTP 版本进行通信。
自有 ID: OTP-10753
Erl_Interface 3.7.9
改进和新功能
教导 lib/erl_interface/configure.in 在 libc 中查找 pthreads 支持(在 QNX 上可以找到它)
一个小的调整,如果你传递 --enable-threads 并且找不到 pthreads 支持,则此配置将失败。
(感谢 Per Hedeland)
自有 ID: OTP-10581
Erl_Interface 3.7.8
改进和新功能
检测平台何时使用中间字节序双精度浮点数,并在解码浮点数时加以考虑。(感谢 Mike Sperber)
自有 ID: OTP-10209
Erl_Interface 3.7.7
已修复的 Bug 和故障
次要抑制和修复编译警告
自有 ID: OTP-10016
Erl_Interface 3.7.6
已修复的 Bug 和故障
修复了在 OS X Lion 上获取全局名称时出现的错误。该错误导致从函数返回截断的字符串。
自有 ID: OTP-9799
改进和新功能
如果限制作业数,例如使用 '
make -j6
' 或 'make -j10
',现在可以使用并行 make 构建 Erlang/OTP。由于缺少一些依赖项,目前 'make -j
' 无法工作。自有 ID: OTP-9451
消除已弃用的 regexp 模块的使用
自有 ID: OTP-9810
Erl_Interface 3.7.5
已修复的 Bug 和故障
根据指针大小对齐 ei 缓冲区
自有 ID: OTP-9390
已更正 XML 文件。
自有 ID: OTP-9550 辅助 ID: OTP-9541
使注释和文档反映 erl_interface/src/misc/ei_decode_term.c 中的代码(感谢 Anneli Cuss)
自有 ID: OTP-9559
改进和新功能
ei: 字符串/原子编码中的整数溢出
ei_encode_atom() 和 ei_encode_string() 使用 strlen() 获取缓冲区的长度。由于 strlen() 返回一个无符号长长整型,并且两个 ei 函数都采用有符号整数,因此长度字段可能会溢出。
检查 strlen 的结果是否可以保存在有符号整数中。(感谢 Michael Santos)
自有 ID: OTP-9530
Erl_Interface 3.7.4
已修复的 Bug 和故障
修复使用 sizeof() 作为函数参数给定的数组
当对作为函数参数给定的数组使用 sizeof() 运算符时,它会返回指针的大小。在这种情况下,受影响的函数 hex(char digest[16], char buff[33]) 将仅打印 4 或 8 个字节,而不是在 32 位和 64 位系统上分别为 16 个字节的完整长度。(感谢 Cristian greco)
自有 ID: OTP-9151
初始化
erl_receive_msg
中的to
和to_name
。(感谢 Göran Larsson)自有 ID: OTP-9241
erl_interface: 修复编译错误(感谢 Michael Santos)
自身 ID:OTP-9252
Erl_Interface 3.7.3
修复的 Bug 和故障
一些格式错误的分布式消息可能导致 VM 崩溃,此问题现已修复。
自身 ID:OTP-8993
加强字符串复制检查(感谢 Michael Santos)。
自身 ID:OTP-9071
在解码原子时加强原子长度检查(感谢 Michael Santos)。
自身 ID:OTP-9072
改进和新功能
修复全局注册。C 节点连接时需要设置 DFLAG_DIST_MONITOR_FLAT。修复 erl_compare_ext 中的列表比较以返回正确的结果。(感谢 Vitaliy Batichko 和 Evgeny Khirin)
自身 ID:OTP-9015
Erl_Interface 3.7.2
修复的 Bug 和故障
erl_call:移除 get_hostent
get_hostent 不能正确处理小端平台上的 IPv4 地址,并且在主机名以数字开头时会失败。移除 get_hostent 并直接使用 ei_gethostbyname,因为 gethostbyname 支持 IPv4 地址。
(感谢 Michael Santos)
自身 ID:OTP-8890
教导 ei_x_format 处理一元 - 和 +(感谢 Steve Vinoski)
自身 ID:OTP-8891
修复注册表中的零字节分配。(感谢 Michael Santos)
自身 ID:OTP-8893
检查节点名称的长度以防止溢出。ei_alloc_big 的内存错误控制。(感谢 Michael Santos)
自身 ID:OTP-8943
erl_interface 中的 erl_term_len() 对于整数可能返回过大的值(自 R14B 起),对于引用可能返回过小的值(自 R9B 起)。
自身 ID:OTP-8945
Erl_Interface 3.7.1.1
修复的 Bug 和故障
erl_interface
中 erlang 消息的跟踪级别不正确。此问题现已修复。自身 ID:OTP-8874
Erl_Interface 3.7.1
修复的 Bug 和故障
移除
ei_decode_term.c
中未使用的变量。修复
erl_call
中错误的释放。自身 ID:OTP-8748
ei_connect:更正手册页示例(感谢 Michael Santos)
自身 ID:OTP-8813
ei:防止
ei_connect_init
和ei_xconnect
中的溢出在复制之前添加缓冲区长度检查。(感谢 Michael Santos)
自身 ID:OTP-8814
移除在 Windows Vista 上失败的 DECLSPEC 功能,并使用回退实现。
自身 ID:OTP-8826
erl_call:修复多个缓冲区溢出(感谢 Michael Santos)
自身 ID:OTP-8827
改进和新功能
修复
erl_interface
中不正确的 writev iovec 缓冲区处理(感谢 Steve Vinoski)自身 ID:OTP-8837
Erl_Interface 3.7
改进和新功能
为 ei 压缩外部二进制格式中的 IEEE 754 双精度编码
- 为 ei 实现外部二进制格式中的压缩 IEEE 754 双精度编码。ei 的编码现在始终生成 NEW_FLOAT_EXT 格式。解码和项打印同时处理旧的 ERL_FLOAT_EXT 编码和新的 NEW_FLOAT_EXT 编码。
- 旧的 erl_interface 代码也处理新的编码,但默认情况下仍然生成 ERL_FLOAT_EXT 编码。
- 同时启用 DFLAG_NEW_FLOATS 分布标志。
- ei_get_type() 将返回 ERL_FLOAT_EXT,无论外部格式是使用 ERL_FLOAT_EXT 还是 NEW_FLOAT_EXT 编码双精度浮点数。
- 通过尽可能调用 ei 编码和解码函数,减少整个 ei 和 erl_interface 中用于编码和解码双精度浮点数的代码副本数量。
- 在 lib/erl_interface/test 中恢复 ei_decode_SUITE 和 ei_encode_SUITE 中注释掉的浮点数测试。修改它们以使其与同一套件中其他测试的风格相匹配。
这些更改基于 Serge Aleynikov 最初在 2008 年 7 月针对 R12B-2 提交的 ei 浮点数补丁,并由 Steve Vinoski 在 2010 年 5 月重新编写。
*潜在的不兼容性*
自身 ID:OTP-8684
Erl_Interface 3.6.5
改进和新功能
记录调试支持。
通过将跟踪级别设置为整数到 EI_TRACELEVEL 环境变量,可以启用连接活动的调试跟踪输出。此选项也可以使用 ei_get_tracelevel(void) 和 ei_set_tracelevel(int) 从正在运行的程序中读取和设置。
自身 ID:OTP-5037
交叉编译改进和其他构建系统改进。
最值得注意的是
- 大量的交叉编译改进。旧的交叉编译支持或多或少不存在并且已损坏。请注意,交叉编译支持仍应视为实验性的。另请注意,旧的交叉编译配置未经修改无法使用。有关交叉编译 Erlang/OTP 的更多信息,请参阅
$ERL_TOP/INSTALL-CROSS.md
文件。 - 支持使用 DESTDIR 进行分阶段安装。旧的损坏的
INSTALL_PREFIX
也已修复。有关更多信息,请参阅$ERL_TOP/INSTALL.md
文件。 - 顶层
Makefile
的release
目标的文档。有关更多信息,请参阅$ERL_TOP/INSTALL.md
文件。 make install
现在默认创建相对符号链接而不是绝对符号链接。有关更多信息,请参阅$ERL_TOP/INSTALL.md
文件。$ERL_TOP/configure --help=recursive
现在可以工作,并为所有带有configure
脚本的应用程序打印帮助。- 直接在
make all
之后执行make install
或make release
不再触发其他重新构建。 - 在没有先前的
make all
的情况下执行make install
或make release
时,现在使用现有的引导系统。 crypto
和ssl
应用程序在动态链接libssl.so
和libcrypto.so
时使用相同的运行时库路径。运行时库搜索路径也已扩展。erl_interface
和odbc
的configure
脚本现在以与erts
相同的方式搜索线程库和线程库怪癖。odbc
应用程序的configure
脚本现在在 64 位系统上构建时还在lib64
和lib/64
目录中查找 odbc 库。erl_interface
应用程序中的config.h.in
文件现在自动生成,而不是静态更新,这降低了configure
测试无效的风险。
(感谢 Henrik Riomar 的建议和测试)
(感谢 Winston Smith 的 AVR32-Linux 交叉配置和测试)
*潜在的不兼容性*
自身 ID:OTP-8323
- 大量的交叉编译改进。旧的交叉编译支持或多或少不存在并且已损坏。请注意,交叉编译支持仍应视为实验性的。另请注意,旧的交叉编译配置未经修改无法使用。有关交叉编译 Erlang/OTP 的更多信息,请参阅
更改文档文件
erl_notes.xml
和erl_eterm.xml
中错误的 "\\0"。自身 ID:OTP-8326
允许
erl_match()
匹配ERL_LONGLONG
和ERL_U_LONGLONG
项(感谢 Scott Lystig Fritchie)。自身 ID:OTP-8400
Erl_Interface 3.6.4
改进和新功能
文档现在使用大多数平台上存在的开源工具(xsltproc 和 fop)构建。一个可见的变化是框架被移除。
自身 ID:OTP-8201
Erl_Interface 3.6.3
修复的 Bug 和故障
手册指出 erl_receive() 在
ErlMessage
结构中返回原因。情况并非如此,该函数现已更正。*潜在的不兼容性*
自身 ID:OTP-4969
在
send_exit.c
中,重新分配缓冲区时可能会发生错误的内存分配大小。在
ei_decode_trace.c
中,解码失败时可能会更新索引。在
ei_printterm.c
中,在列表和元组中解码失败时可能会更新索引。在
ei_decode_term.c
中,解码双精度浮点数 (ERL_FLOAT_EXT) 时,未检查 31 个字节的最后一个是否以 null 结尾。在
ei_decode_term.c
中,解码引用时,只读取了前 3 个字节,但索引没有增加总大小。在
ei_decode_fun.c
中,未检查正确的缓冲区分配或数据长度。在
ei_decode_string.c
中,整数列表字符串的情况没有正确解码 NIL 尾部。这些错误现已修复。(感谢 Romain Lenglet、Paul Mineiro 和 Paul Guyot)。
自身 ID:OTP-6117
ei_decode_big
可以使用垃圾字节解码。ei_encode_big
和ei_x_encode_big
现在可用。自身 ID:OTP-7554
函数
erl_init_resolve()
不符合 C99 标准,这会导致某些平台上的构建错误。此问题现已修复。自身 ID:OTP-8093
Makefile.in
已更新为使用 LDFLAGS 环境变量(如果已设置)。(感谢 Davide Pesavento。)自身 ID:OTP-8157
改进和新功能
添加了对编码/解码 64 位整数的支持。
添加了对更好打印二进制文件的支持。
自身 ID:OTP-6091
Erl_Interface 3.6.2
修复的 Bug 和故障
erl_start.c
中的gethostbyname
问题可能会导致缓冲区溢出。此问题现已修复。清理代码并移除了编译器警告。
自身 ID:OTP-7978
Erl_Interface 3.6.1
修复的 Bug 和故障
ei_reg_getpval
中错误的验证导致它永远不会返回键值。此问题现已修复。(感谢 Matt Stancliff)自身 ID:OTP-7960
改进和新功能
对
configure
脚本的次要更新。自身 ID:OTP-7959
Erl_Interface 3.6.1
改进和新功能
对
configure
脚本的次要更新。自身 ID:OTP-7959
Erl_Interface 3.6
改进和新特性
借助新的环境变量设置 ERL_EPMD_PORT,属于不同独立集群的节点现在可以共存于同一主机上。
自有 ID: OTP-7826
Erl_Interface 3.5.9
修复的 Bug 和故障
现在已纠正了 64 位平台上 ei_skip_term 和 ei_printterm 中的类型转换错误,该错误会导致未定义的结果。
自有 ID: OTP-7577
现在已纠正了 MacOS X/Darwin 上 erl_interface 的 hostent 复制代码中的一个错误。
自有 ID: OTP-7593
已修复了在 FreeBSD 上构建
erl_interface
的问题(感谢 Akira Kitada)。自有 ID: OTP-7611
Erl_Interface 3.5.8
修复的 Bug 和故障
修复了 erl_interface 在解码损坏数据时的错误
自有 ID: OTP-7448
Erl_Interface 3.5.7
修复的 Bug 和故障
在 erl_interface 中使用
ei_x_format_wo_ver
时,可能会发生错误的内存释放,导致段错误。自有 ID: OTP-6795
现在已修复了
erl_marshal
中的错误比较。(感谢 Simon Cornish 和 Paul Mineiro)自有 ID: OTP-7368
Erl_Interface 3.5.6
修复的 Bug 和故障
小的文档修复。
自有 ID: OTP-7183 辅助 ID: OTP-7118
Erl_Interface 3.5.5.4
修复的 Bug 和故障
在 ei 库的单线程版本中,符号 __erl_errno 未定义,但现在已定义。
自有 ID: OTP-6887
更正了 FreeBSD 构建错误。
自有 ID: OTP-7093
Erl_Interface 3.5.5.3
改进和新特性
已删除 erl_marshal.c 中的 alloca 调用。现在使用静态缓冲区来临时存储节点名称。
自有 ID: OTP-6331 辅助 ID: seq10468
ei_print_term 将值从 0 到 255 的整数列表解释为字符串。如果原始列表包含整数 0,则将其视为字符串的终止符。这是不正确的。该函数现在已修改为不在字符串中查找 '\0',而是始终打印所有字符。
自有 ID: OTP-6339 辅助 ID: seq10492
Erl_Interface 3.5.5.2
修复的 Bug 和故障
xeon 处理器与 64 位 x86 扩展和 32 位 linux 的组合可能导致 ei_decode_long 和 ei_decode_longlong 对于值 LONG_MIN 和 LONGLONG_MIN 失败。现在转换更加可移植。
自有 ID: OTP-6216
Erl_Interface 3.5.5.1
改进和新特性
可移植性增强。
自有 ID: OTP-6132
Erl_Interface 3.5.5
修复的 Bug 和故障
erts
和erl_interface
应用程序中不同的(和旧的)config.guess
文件会导致在新基于 Intel 的 iMac 上出现构建问题。(感谢 Sebastion Strollo。)自有 ID: OTP-5967
在安装了 NPTL 和 Linuxthreads 库的 linux 系统(至少是一些 SuSE 和 Debian)上,pthread 头文件和库不匹配。
自有 ID: OTP-5981
改进和新特性
已添加对 C 节点连接到独立主机上的 Erlang 节点的支持。
自有 ID: OTP-5883 辅助 ID: seq10170
Erl_interface 3.5.2
改进和新特性
配置测试错误导致 erl_interface 在没有线程支持的情况下构建。此问题已得到纠正。
自有 ID: OTP-5456
Erl_interface 3.5.1
改进和新特性
已对构建和测试环境进行了更改和改进,以解决 erl_interface 测试用例失败的问题。
自有 ID: OTP-5295 辅助 ID: OTP-5387
Erl_interface 3.5
改进和新特性
进程标识符和端口标识符已变得更加唯一。以前,在进程和端口标识符的内部表示中使用 18 位作为 ID。现在使用 28 位。
由于 pid 的表示,并发存在进程的最大数量已增加到 268435456 个进程。端口也是如此。由于内存不足,至少在 32 位架构上,这个限制将是不可能达到的。
注意: 默认情况下,
ERTS
以及erl_interface
、ei
和jinterface
库现在仅保证与来自同一版本的其他 Erlang/OTP 组件兼容。但是,可以将每个组件设置为早期版本的兼容模式。有关如何设置兼容模式,请参阅相应组件的文档。*潜在的不兼容性*
自有 ID: OTP-4968 辅助 ID: OTP-4196
Erl_interface 3.4.5
修复的 Bug 和故障
更正了为补丁 erl_605/OTP-4874 所做的错误。
自有 ID: OTP-4995 辅助 ID: OTP-4874
Erl_interface 3.4.4
修复的 Bug 和故障
添加了 ei_rpc*() 中的一个小的优化,并更正了 ei_decode_longlong() 中的一个错误。
自有 ID: OTP-4784
Erl_interface 3.4.2
修复的 Bug 和故障
长度超过 65535 字节的字符串在 ei/erl_interface 中编码错误。
自有 ID: OTP-4865 辅助 ID: EABln07451
Erl_interface 3.4.1
修复的 Bug 和故障
由于 ei_format 中的一个错误,erl_call -a 错误地解析了 erlang 项,现在已更正。
自有 ID: OTP-4777 辅助 ID: seq8099