Erlang/OTP 26.0 候选版本 1

2023 年 2 月 15 日 · 作者:Henrik Nord

OTP 26.0-rc1 #

Erlang/OTP 26.0-rc1 是 OTP 26.0 发布之前的三个候选版本中的第一个。

此版本的目的是获得用户的反馈。 欢迎所有反馈,即使只是说它对您有效。 我们鼓励用户尝试并在此处创建问题 https://github.com/erlang/otp/issues 或在 Erlangforums 上发帖,向我们提供反馈。

可以从 Erlang/OTP Github 版本下载该版本的所有工件,您可以在 https://erlang.ac.cn/documentation/doc-14.0-rc1/doc/ 查看新文档。 您还可以使用 kerl 安装最新版本,如下所示:kerl build 26.0-rc1 26.0-rc1。

Erlang/OTP 26 是一个全新的主要版本,具有新功能、改进以及一些不兼容之处。 下面突出显示了一些新功能。

非常感谢所有贡献者!

以下是此版本的一些亮点

亮点 #

Shell #

Erlang shell 中有很多新功能和改进

  • 变量、记录名称、记录字段名称、映射键、函数参数类型和文件名的自动完成。
  • 在 shell 中打开外部编辑器以编辑当前表达式。
  • 在 shell 中定义记录(带有类型)、函数、规范和类型。

新的终端 #

  • TTY/终端子系统已重写。 Windows 用户会注意到 erl.exe 具有与普通 Unix shell 相同的功能,并且 werl.exe 只是 erl.exe 的一个符号链接。 这使得 Windows Erlang 终端体验与 Unix 相同。

编译器和 JIT 优化:#

  • 已优化创建和匹配具有固定大小段的二进制文件。

  • 已优化创建和匹配 UTF-8 段。

  • 已优化向二进制文件追加内容。

  • 编译器和 JIT 现在为创建所有键在编译时已知的小映射生成更好的代码。

  • 由于上述优化,base64 模块的性能得到了显着提高。 例如,在带有 JIT 的 x86_64 系统上,编码和解码速度都比 Erlang/OTP 25 快了近三倍。

映射 #

  • 现在已实现 EEP 58 中建议的映射推导。

  • 通过更改原子键的内部排序顺序,优化了一些映射操作。 这会更改小映射中原子键的(未记录的)打印顺序,以及 maps:to_list/1maps:next/1 返回的顺序。 新顺序是不可预测的,并且可能会在 Erlang VM 的不同调用之间发生变化。

  • 引入了新函数 maps:iterator/2,用于创建以确定性顺序返回映射元素的迭代器。 io:format() 中的格式字符串还有新的修饰符 kK,以支持按顺序打印映射元素。

Dialyzer #

  • Dialyzer 具有新的增量模式,可以通过在运行 Dialyzer 时提供 --incremental 选项来调用。 这种新的增量模式很可能在未来的版本中成为默认模式。

其他 ERTS、Stdlib、Kernel、编译器 #

  • 时间扭曲模式 现在默认启用。 这假设系统上执行的所有代码都是 时间扭曲安全的

  • 支持 NIF 接口中的 UTF-8 原子和字符串,包括新函数 enif_make_new_atomenif_make_new_atom_lenenif_get_string_length

  • 现在允许在保护和匹配规范中使用 BIF min/2max/2

  • 改进了选择性接收优化,现在可以为从其他函数返回的引用启用此优化。 这大大提高了 gen_server:send_request/3gen_server:wait_response/2 和类似函数的性能。

  • 新的跟踪功能 call_memory。 类似于 call_time 跟踪,但不是测量被跟踪函数中累积的时间,而是测量被跟踪函数消耗的累积堆空间。 它可用于比较不同函数对触发垃圾回收的贡献程度。

  • 不再需要在运行时系统中启用一项功能才能加载使用该功能的模块。 在编译时在编译器中启用该功能就足够了。

  • inet:setopts/2 有 3 个新选项:reuseportreuseport_lbexclusiveaddruse

  • 修复了在使用 JIT 时将 -fno-omit-frame-pointer 应用于所有 Erlang VM 的问题,以便诸如 perf 之类的工具可以爬取进程堆栈。

  • lists 模块中,zip 系列函数现在采用选项来允许处理不同长度的列表。

  • 添加了 zip:zip_get_crc32/2 函数,以从打开的 ZIP 存档中检索 CRC32 校验和。 通过缓存回调函数优化 gen_server

  • Erlang DNS 解析器 inet_res 和辅助模块已针对 RFC6891 进行了更新;处理带有 DNSSEC OK (DO) 位的 OPT RR。

  • 引入了 application:get_supervisor/1

  • 缓存 OTP 引导代码路径,以限制模块查找期间访问的文件夹数量。 可以使用 -cache_boot_path false 禁用。

SSL #

  • 已将对内核 TLS (kTLS) 的支持添加到 SSL 应用程序,用于 TLS 分发 (-proto_dist inet_tls),SSL 选项为 {ktls, true}
  • 改进了 ssl 选项的错误检查和处理。
  • 通过降低最大握手大小来缓解大型证书链的内存使用。 这不应影响常见情况,如果需要,可以将其配置为更高的值。

  • 出于安全原因,SHA1DSA 算法不再属于默认值。

  • 添加了 use_srtp hello 扩展的编码和解码,以方便 DTLS 用户实现 SRTP 功能。

有关新功能和潜在不兼容性的更多详细信息,请参阅 readme