亮点
Parsetools
Leex
已扩展,支持可选的列号。
Stdlib
- 模块
lists
中的枚举函数系列已扩展,其中包含enumerate/3
,它允许提供步长值。 - 将 Unicode 更新到版本 15.0.0。
proc_lib:start*/*
在启动进程失败时变为同步。这要求失败的进程使用新的函数proc_lib:init_fail/2,3
或退出以指示失败。所有 OTP 行为都已修复为执行此操作。
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/1
和maps:next/1
返回的顺序。新顺序是不可预测的,并且可能在 Erlang VM 的不同调用之间发生变化。 -
引入新的函数
maps:iterator/2
用于创建迭代器,该迭代器以确定性顺序返回映射元素。io:format()
格式字符串中也有新的修饰符k
和K
来支持以排序方式打印映射元素。
Dialyzer
-
添加了新的内置类型
dynamic()
,该类型在 EEP 61、引入 EEP 61 的 PR 中引入,改进了对逐步类型检查器的支持。 -
Dialyzer 具有新的增量模式,可以通过在运行 Dialyzer 时给出
--incremental
选项来调用它。这种新的增量模式很可能会在将来的版本中成为默认模式。
Misc ERTS、Stdlib、内核、编译器
-
支持 NIF 接口中的 UTF-8 原子和字符串,包括新的函数
enif_make_new_atom
、enif_make_new_atom_len
和enif_get_string_length
。 -
BIF
min/2
和max/2
现在允许在保护和匹配规范中使用。 -
改进了选择性接收优化,现在可以为从其他函数返回的引用启用它。这极大地提高了
gen_server:send_request/3
、gen_server:wait_response/2
和类似函数的性能。 -
新的跟踪功能
call_memory
。类似于call_time
跟踪,但不是测量跟踪函数中累积的时间,而是测量跟踪函数消耗的累积堆空间。它可以用来比较不同的函数对触发垃圾收集的贡献程度。 -
不再需要在运行时系统中启用功能才能加载使用它的模块。在编译时在编译器中启用该功能就足够了。
-
inet:setopts/2
有 3 个新选项:reuseport
、reuseport_lb
和exclusiveaddruse
。 -
修复了在使用 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
-
将客户端默认
verify
选项更改为verify_peer
。注意,这使得必须同时提供受信任的 CA 证书或显式将verify
设置为verify_none
。这在使用在 TLS 版本前 TLS-1.3 中定义的所谓匿名测试密码套件时也适用。 - SSL 应用程序已添加对内核 TLS (kTLS) 的支持,用于 TLS 分发 (
-proto_dist
inet_tls
),SSL 选项{ktls, true}
。 - 改进了 ssl 选项的错误检查和处理。
-
通过降低最大握手大小来减轻来自大型证书链的内存使用。这不会影响常见情况,如果需要,可以将其配置为更高的值。
-
出于安全原因,
SHA1
和DSA
算法不再是默认值中的算法。 - 添加
use_srtp
hello 扩展的编码和解码以方便DTLS
用户实现SRTP
功能。
感谢所有贡献者!