Erlang/OTP 27.0 发布候选版本 3
OTP 27.0-rc3 #
Erlang/OTP 27.0-rc3 是 OTP 27.0 发布之前的第三个也是最后一个候选版本。
此版本旨在收集用户的反馈。欢迎所有反馈,即使只是说它对您有效。我们鼓励用户尝试并向我们提供反馈,可以在 https://github.com/erlang/otp/issues 上创建 issue,或者在 Erlang 论坛 上发帖。
此版本的所有工件都可以从 Erlang/OTP Github 发布页面下载,您可以在 https://erlang.ac.cn/documentation/doc-15.0-rc3/doc 查看新文档。您也可以使用 kerl 安装最新版本,如下所示
kerl build 27.0-rc3 27.0-rc3.
Erlang/OTP 27 是一个新的主要版本,包含新特性、改进以及一些不兼容之处。下面突出显示一些新特性。
非常感谢所有贡献者!
RC3 中的显著变化 #
- 对多个跟踪会话的支持 现在已记录在案 并可供使用。
RC2 的亮点 #
-
编码和解码都可以自定义。解码可以以类似 SAX 的方式完成,并处理多个文档和数据流。
新的
json
模块被 ASN.1 的jer
(JSON 编码规则)用于编码和解码 JSON。因此,不再需要提供外部 JSON 库。
RC2 中的其他显著变化 #
-
对存档文件的现有实验性支持将在未来的版本中更改。保留在 escript 中使用存档的支持,但在发行版中使用存档的支持将受到更多限制或完全删除。
从 Erlang/OTP 27 开始,函数
code:lib_dir/2
、-code_path_choice
标志以及使用erl_prim_loader
读取存档成员的功能已被弃用。为了与未来版本的 Erlang/OTP 保持兼容,需要从其存档中检索数据文件的
escript
脚本应该使用escript:extract/2
而不是erl_prim_loader
和code:lib_dir/2
。 -
编译器查找选项的顺序已更改。
当
-compile()
属性中给出的编译器选项与传递给编译器的选项发生冲突时,-compile()
属性中给出的选项会覆盖传递给编译器的选项,而传递给编译器的选项又会覆盖ERL_COMPILER_OPTIONS
环境变量中给出的选项。示例
如果
some_module.erl
具有以下属性-compile([nowarn_missing_spec]).
并且编译器像这样调用
% erlc +warn_missing_spec some_module.erl
则不会为没有任何规范的函数发出警告。
-
configure
现在自动启用对 2038 年安全时间戳的支持。默认情况下,构建 OTP 时使用的
configure
脚本现在将尝试启用 2038 年 1 月中旬之后仍然有效的时间戳的支持。这通常只是在 32 位平台上才存在问题。如果
configure
无法找出如何启用此类时间戳,它将中止并显示错误消息。如果您仍然想构建系统,并且知道该系统在 2038 年 1 月中旬之后将无法正常工作,您可以将--disable-year2038
选项传递给configure
,这将允许configure
在没有 2038 年 1 月中旬之后时间戳支持的情况下继续。
RC1 的亮点 #
文档 #
EEP-59 已实现。源代码文件中的文档属性现在可用于记录函数、类型、回调和模块。
整个 Erlang/OTP 文档现在都使用新的文档系统。
新的语言特性 #
-
已按照 EEP 64 实现了三引号字符串,以允许字符串包含完整的段落。
-
没有中间空格的相邻字符串文字现在是语法错误,以避免与三引号字符串可能造成的混淆。
-
已按照 EEP 66 实现了字符串文字(普通和三引号)上的 Sigil。例如,
~"Björn"
或~b"Björn"
现在等效于<<"Björn"/utf8>>
。
编译器和 JIT 改进 #
-
编译器现在将合并对同一记录的连续更新。
-
编译器和运行时系统中已实现了元组的安全破坏性更新。这允许 VM 在安全的情况下就地更新元组,从而通过减少复制并减少垃圾产生来提高性能。
-
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()
来打开与外部资源的端口的过时且未记录的支持,该支持由 vanilla 驱动程序实现。自从发布 OTP 26 以来,此功能已计划在 OTP 27 中删除。 -
已从
erlang:fun_info/1,2
中删除pid
字段。 -
现在支持多个跟踪会话。
STDLIB #
-
已将几个接受 fun 的新函数添加到模块
timer
。 -
已将函数
is_equal/2
、map/2
和filtermap/2
添加到模块sets
、ordsets
和gb_sets
。 -
有新的高效
ets
遍历函数,并保证原子性。例如,ets:next/2
后跟ets:lookup/2
现在可以用ets:next_lookup/1
替换。 -
新函数
ets:update_element/4
类似于ets:update_element/3
,但将默认元组作为第四个参数,如果不存在具有该键的先前记录,则会插入该参数。 -
binary:replace/3,4
现在支持使用 fun 来提供替换二进制文件。 -
可以使用新函数
proc_lib:set_label/1
为任何没有注册名称的进程添加描述性术语。该名称将显示在诸如c:i/0
和observer
之类的工具中,并且它将包含在使用gen_server
、gen_statem
、gen_event
和gen_fsm
的进程生成的崩溃报告中。 -
添加了从
gb_trees
和gb_sets
检索下一个较高或较低键/元素的功能,以及返回从给定键/元素开始的迭代器的功能。
common_test #
-
对
ct:capture_start/0
和ct:capture_stop/0
的调用现在是同步的,以确保捕获所有输出。 -
如果浏览器首选,默认 CSS 现在将包括基本的暗模式处理。
crypto #
- 已删除在 Erlang/OTP 25 中标记为已弃用的函数
crypto_dyn_iv_init/3
和crypto_dyn_iv_update/3
。
dialyzer #
- 已删除 Dialyzer 的
--gui
选项。
ssl #
ssl
客户端可以协商和处理证书状态请求(客户端的 OCSP 装订支持)。
tools #
- 有一个新工具
tprof
,它在一个接口下结合了eprof
和cprof
的功能。它还添加了堆分析。
xmerl #
- 作为
xmerl_xml
的替代方案,添加了一个新的导出模块xmerl_xml_indent
,它提供了开箱即用的缩进输出。
有关新功能和潜在不兼容性的更多详细信息,请参阅 README。