Erlang/OTP 20

此版本的 Erlang/OTP 可以通过源代码构建,也可以使用适用于您的操作系统或第三方工具(例如 kerlasdf)的预构建软件包进行安装。

docker run -it erlang:20

潜在的不兼容性

  • 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/3decode/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 已添加到 dictorddictgb_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)