Erlang/OTP 20

此版本的 Erlang/OTP 可以从 源代码 构建,也可以使用 预构建包 为您的操作系统或第三方工具(如 kerlasdf)安装。

docker run -it erlang:20

潜在的不兼容性

  • 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:已弃用的模块和函数已删除(asn1rtasn1ct:encode/3decode/3
  • Ssh:在调用启动守护程序的调用中,客户端专用选项现在将失败

亮点

Erts

  • 在支持 SMP 的 VM 上启用并支持脏调度程序。
  • 支持“脏”BIF 和“脏”GC。
  • erlang:garbage_collect/2 用于控制次要或主要 GC
  • Erlang 字面量在发送消息时不再被复制。
  • 大型 ETS 表(>256 个条目,除有序集外)的性能得到提升
  • erlang:system_info/1 中的 atom_countatom_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_elementdel_elementunion
  • 添加了 rand:jump/0-1
  • gen_server 崩溃时,将为客户端打印堆栈跟踪,以方便调试。
  • take/2 已添加到 dictorddictgb_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)