潜在的不兼容性
- ERTS
- 非 SMP Erlang VM 已被弃用,并且默认情况下不构建
- 移除已弃用的
erlang:hash/2
- 带有 scheduler_wall_time 的 erlang:statistics/1 现在也包括关于脏 CPU 调度器的信息。
- 在 OTP 19.1 中引入的新的清除策略是强制性的,并且对于持有 fun 的进程略有不兼容,请参阅
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。
- 用于控制次要或主要 GC 的 erlang:garbage_collect/2
- 发送消息时不再复制 Erlang 字面量。
- 改进了大型 ETS 表(>256 个条目,ordered_set 除外)的性能
- 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 信号的子集
- 优化了 sets 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
: API 中记录了 DTLS,实验性的
ssh
: 提高安全性,删除和添加算法
- 新的
math:fmod/2
- 扩展了 crypto API,以使用存储在引擎中的私钥/公钥进行签名/验证或加密/解密操作。(20.2)