Erlang/OTP 27.0 候选版本 1

2024 年 2 月 14 日 · 作者:Björn Gustavsson

OTP 27.0-rc1 #

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

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

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

kerl build 27.0-rc1 27.0-rc1.

Erlang/OTP 27 是一个新的主要版本,具有新功能、改进以及一些不兼容之处。下面重点介绍一些新功能。

非常感谢所有贡献者!

亮点 #

文档 #

已实现 EEP-59。源文件中的文档属性现在可用于记录函数、类型、回调和模块。

整个 Erlang/OTP 文档现在都使用新的文档系统。

新语言特性 #

  • 已按照 EEP 64 实现了三引号字符串,允许一个字符串包含完整的段落。

  • 没有中间空格的相邻字符串文字现在是一个语法错误,以避免可能与三引号字符串混淆。

  • 已按照 EEP 66 在字符串文字(普通和三引号)上实现了 Sigils。例如,~"Björn"~b"Björn" 现在等效于 <<"Björn"/utf8>>

编译器和 JIT 改进 #

  • 编译器现在将合并同一记录的连续更新。

  • 已在编译器和运行时系统中实现元组的安全破坏性更新。这允许虚拟机在安全的情况下就地更新元组,从而通过减少复制和产生更少的垃圾来提高性能。

  • maybe 表达式现在默认启用,无需启用 maybe_expr 功能。

  • 已在 JIT 中实现本机覆盖率支持。它将自动被 cover 工具使用,以减少运行覆盖率编译代码时的执行开销。还有新的 API 支持本机覆盖率,而无需使用 cover 工具。

  • 当更新记录/映射文字以捕获常见错误时,编译器现在会引发警告。例如,编译器现在会为 #r{a=1}#r{b=2} 发出警告。

ERTS #

  • erl 命令现在支持 -S 标志,它类似于 -run 标志,但消除了一些粗糙的边缘。

  • 默认情况下,escript 现在将被编译而不是解释。这意味着必须安装 compiler 应用程序。

  • 默认进程限制已提高到 1048576 个进程。

  • erlang:system_monitor/2 功能现在能够监视系统中的长消息队列。

  • 已删除通过传递原子(或字符串)作为 open_port() 的第一个参数来打开到外部资源的端口的过时且未记录的支持,该支持由原始驱动程序实现。自 OTP 26 发布以来,此功能已计划在 OTP 27 中删除。

  • 已从 erlang:fun_info/1,2 中删除了 pid 字段。

  • 现在支持多个跟踪会话。

STDLIB #

  • 已向模块 timer 添加了几个接受 fun 的新函数。

  • 已将函数 is_equal/2map/2filtermap/2 添加到模块 setsordsetsgb_sets

  • 有新的高效 ets 遍历函数,具有保证的原子性。例如,现在可以用 ets:next_lookup/1 替换 ets:next/2 后跟 ets:lookup/2

  • 新函数 ets:update_element/4 类似于 ets:update_element/3,但将默认元组作为第四个参数,如果不存在具有该键的先前记录,则会插入该元组。

  • binary:replace/3,4 现在支持使用 fun 来提供替换二进制数据。

  • 可以使用新函数 proc_lib:set_label/1 向任何没有注册名称的进程添加描述性术语。该名称将由 c:i/0observer 等工具显示,并且它将包含在使用 gen_servergen_statemgen_eventgen_fsm 的进程生成的崩溃报告中。

  • 添加了从 gb_treesgb_sets 获取下一个较高或较低键/元素的函数,以及返回从给定键/元素开始的迭代器的函数。

common_test #

  • ct:capture_start/0ct:capture_stop/0 的调用现在是同步的,以确保捕获所有输出。

  • 如果浏览器首选,默认 CSS 现在将包括基本的暗模式处理。

crypto #

  • 已删除在 Erlang/OTP 25 中标记为已弃用的函数 crypto_dyn_iv_init/3crypto_dyn_iv_update/3

dialyzer #

  • 已删除 Dialyzer 的 --gui 选项。

ssl #

  • ssl 客户端可以协商和处理证书状态请求(客户端的 OCSP 封装支持)。

tools #

  • 有一个新工具 tprof,它在一个界面下结合了 eprofcprof 的功能。它还添加了堆分析。

xmerl #

  • 作为 xmerl_xml 的替代方案,添加了一个新的导出模块 xmerl_xml_indent,它提供了开箱即用的缩进输出。

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