Erlang/OTP 20.0 发布

2017年6月21日 · 作者:Kenneth Lundin

Erlang/OTP 20.0 是一个包含新特性的主要版本,其中包含相当多的(特性)改进,以及一些不兼容之处。

与第二个候选版本相比,只有一些小的更改,其中一些列在下面

  • ERTS: * erlang:term_to_binary/1 更改了所有原子的编码,从 ATOM_EXT 更改为 ATOM_UTF8_EXTSMALL_ATOM_UTF8_EXT。 现在已更改为仅使用 UTF8 标签编码实际包含 Unicode 字符的原子,而其他原子则像以前一样编码为 ATOM_EXT

以下是 OTP 20 中一些最重要的更新:

潜在的不兼容性 #

  • ERTS
  • 非 SMP Erlang VM 已被弃用,默认情况下不构建
  • 删除已弃用的 erlang:hash/2
  • 带有 scheduler_wall_time 的 erlang:statistics/1 现在还包括关于 dirty 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 上启用并支持 dirty 调度器。
  • 支持“dirty”BIF 和“dirty”GC。
  • 用于控制次要或主要 GC 的 erlang:garbage_collect/2
  • 发送消息时不再复制 Erlang 字面量。
  • 改进了大型 ETS 表(>256 个条目)的性能(ordered_set 除外)
  • erlang:system_info/1 atom_count 和 atom_limit
  • 通过在 GC 期间将子二进制转换为堆二进制来减少内存压力
  • enif_select,将外部事件映射到消息
  • 改进了 VM 内部的定时器,从而减少了内存消耗并提高了定时器的管理效率

编译器: #

  • 改进了复杂保护的代码生成。
  • 重复的相同映射键的警告。 #{'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 添加到 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

有关更多详细信息,请参阅 https://erlang.ac.cn/download/otp_src_20.0.readme

Erlang/OTP 源代码也可以在 GitHub 上的官方 Erlang 存储库中找到,https://github.com/erlang/otp,标签为 OTP-20.0

可以在此处获取 Windows 的预构建版本: https://erlang.ac.cn/download/otp_win32_20.0.exe https://erlang.ac.cn/download/otp_win64_20.0.exe

可以在此处浏览在线文档:https://erlang.ac.cn/documentation/doc-9.0-rc2/doc/

感谢所有贡献者。