潜在的不兼容性
- ERTS
- 非 SMP Erlang VM 已弃用,默认情况下不构建
- 删除已弃用的
erlang:hash/2
erlang:statistics/1
中的 scheduler_wall_time
现在还包括有关脏 CPU 调度程序的信息。
- OTP 19.1 中引入的新清除策略是强制性的,对于保存函数的进程来说略有不兼容,请参阅
erlang:check_process_code/3
。
- NIF 库重新加载不再受支持。
- 原子现在可以包含任意 Unicode 字符,这意味着如果 OTP 20 节点要接受与另一个节点或库的连接,则必须支持分布协议中的
DFLAG_UTF8_ATOMS
功能。使用分布协议的第三方库需要更新此功能。
- Asn1:已弃用的模块和函数已删除(
asn1rt
、asn1ct:encode/3
和 decode/3
)
- Ssh:在调用启动守护程序的调用中,客户端专用选项现在将失败
亮点
Erts
- 在支持 SMP 的 VM 上启用并支持脏调度程序。
- 支持“脏”BIF 和“脏”GC。
erlang:garbage_collect/2
用于控制次要或主要 GC
- Erlang 字面量在发送消息时不再被复制。
- 大型 ETS 表(>256 个条目,除有序集外)的性能得到提升
erlang:system_info/1
中的 atom_count
和 atom_limit
- 通过在 GC 期间将子二进制转换为堆二进制来减少内存压力
enif_select
,将外部事件映射到消息
- VM 中计时器的内部改进,导致减少内存消耗和更有效的计时器管理
- 添加锁计数的运行时切换(20.1)
- 添加用于管理 I/O 队列的新 NIF API 函数。(20.1)
-
编译器
- 改进对复杂防护的代码生成。
- 对重复的相同映射键发出警告。
#{'a'=>1, 'b'=>2, 'a'=>3}
将对重复的键 a
发出警告。
- 默认情况下,现在在使用
export_all
时会发出警告。可以禁用
- 映射的模式匹配得到优化
- 新的选项
deterministic
用于省略 BEAM 文件中的源路径+选项信息。
- 原子现在可以包含任意 Unicode 字符。
compile:file/2
具有一个选项,可以在 BEAM 文件中包含额外的块。
其他各种应用程序
string
模块得到显著更新,具有 Unicode 支持和许多新函数
- crypto 现在支持 OpenSSL 1.1
- 未命名 ets 表优化
gen_fsm
已弃用,由 gen_statem
替代
- 一个新的事件管理器,用于处理 Erlang 中的一组 OS 信号
- 优化了集合
add_element
、del_element
和 union
- 添加了
rand:jump/0-1
- 当
gen_server
崩溃时,将为客户端打印堆栈跟踪,以方便调试。
take/2
已添加到 dict
、orddict
和 gb_trees
中。
take_any/2
已添加到 gb_trees
中
erl_tar
支持长路径名和新文件格式
asn1
:新的 maps
选项将 SEQUENCE
的表示更改为映射而不是记录
- TLS 客户端默认情况下会调用
public_key:pkix_verify_hostname/2
来验证主机名
ssl
:DTLS 在 API 中有文档记录,处于实验阶段
ssh
:提高安全性,删除和添加算法
- 新的
math:fmod/2
- crypto API 已扩展为使用存储在引擎中的私钥/公钥进行签名/验证或加密/解密操作。(20.2)