查看源代码 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

已知错误和问题

  • 用于解码/编码术语的 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_BINARIESDFLAG_EXPORT_PTR_TAGDFLAG_MAP_TAGSDFLAG_NEW_FLOATSDFLAG_FUN_TAGS。这主要涉及自行实现分发协议的库或应用程序。

    自有 ID:OTP-17318 辅助 ID:PR-4972

  • autoconf 2.71 调整的 configure 脚本的输入。

    自有 ID:OTP-17414 辅助 ID:PR-4967

  • 删除了使用节点创建值 0 作为通配符。还防止 erl_interfacejinterface 节点将 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_interfaceregistry 功能。它自 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

  • 各种错误修复

    自有 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_bitstringei_encode_bitstring,用于解码和编码比特串,其中比特数不一定能被 8 整除(即不是整数个字节)。现有的函数 ei_decode_funei_encode_fun 现在也可以处理导出函数 (export funs)。

    在此更改之前,发送到 erl_interface C 节点的比特串和导出函数使用未文档化的回退元组格式进行编码。对于比特串,使用 {Binary,BitsInLastByte},对于导出函数,使用 {M,F}。期望这些元组的现有 C 节点实现必须更改为使用 ei_decode_bitstringei_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

改进和新特性

Erl_Interface 3.10.4

已修复的错误和故障

  • 使 ei_connect 及其相关函数在握手期间也接受状态 ok_simultaneous,这意味着另一个节点已发起连接设置,该设置将被取消,以支持此连接。

    自有 ID:OTP-15161 辅助 ID:ERIERL-191

  • 修复了 ei_receive_msgei_xreceive_msgei_receive_msg_tmoei_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_interfacejinterface 之间的分发中使用旧的 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_initei_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_ulongei_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_piderlang_porterlang_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 中的 toto_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_initei_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 文件。
    • 顶层 Makefilerelease 目标的文档。有关更多信息,请参阅 $ERL_TOP/INSTALL.md 文件。
    • make install 现在默认创建相对符号链接而不是绝对符号链接。有关更多信息,请参阅 $ERL_TOP/INSTALL.md 文件。
    • $ERL_TOP/configure --help=recursive 现在可以工作,并为所有带有 configure 脚本的应用程序打印帮助。
    • 直接在 make all 之后执行 make installmake release 不再触发其他重新构建。
    • 在没有先前的 make all 的情况下执行 make installmake release 时,现在使用现有的引导系统。
    • cryptossl 应用程序在动态链接 libssl.solibcrypto.so 时使用相同的运行时库路径。运行时库搜索路径也已扩展。
    • erl_interfaceodbcconfigure 脚本现在以与 erts 相同的方式搜索线程库和线程库怪癖。
    • odbc 应用程序的 configure 脚本现在在 64 位系统上构建时还在 lib64lib/64 目录中查找 odbc 库。
    • erl_interface 应用程序中的 config.h.in 文件现在自动生成,而不是静态更新,这降低了 configure 测试无效的风险。

    (感谢 Henrik Riomar 的建议和测试)

    (感谢 Winston Smith 的 AVR32-Linux 交叉配置和测试)

    *潜在的不兼容性*

    自身 ID:OTP-8323

  • 更改文档文件 erl_notes.xmlerl_eterm.xml 中错误的 "\\0"。

    自身 ID:OTP-8326

  • 允许 erl_match() 匹配 ERL_LONGLONGERL_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_bigei_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 和故障

  • ertserl_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_interfaceeijinterface 库现在仅保证与来自同一版本的其他 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