Erlang/OTP 23

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

Erlang/OTP 23 亮点博客文章

docker run -it erlang:23

潜在的不兼容性

  • Erlang 运行时系统
    • 已弃用的 erlang:get_stacktrace/0 BIF 现在返回一个空列表而不是堆栈跟踪。 erlang:get_stacktrace/0 计划在 OTP 24 中移除。
  • ssl
    • 完全移除了对 SSL 3.0 的支持。
    • TLS 1.3 已添加到默认支持的版本列表中。
  • erl_interface
    • 移除了 erl_interface 中已弃用的部分(erl_interface.h 和所有带有前缀 erl_ 的 C 函数)。
  • stdlib
    • 在 OTP-23.2 中,uri_string 中的一个错误修复导致百分号编码字符的解码可能不再像以前那样工作。

有关完整列表,请参阅 OTP 23.0 - 潜在的不兼容性

亮点

ssh
  • OpenSSH 6.5 引入了一种新的密钥文件表示形式,称为 openssh-key-v1。 现在支持此表示形式,但不包括处理加密密钥。
  • 现在可以在 .config 文件中完成算法配置。 这对于例如启用默认禁用的算法而无需更改代码非常有用。
  • 实现了对 TCP/IP 端口转发(也称为隧道或 tcp-forward/direct-tcp)的支持。 在 OpenSSH 客户端中,这对应于选项 -L 和 -R。
ssl
  • 对中间盒兼容模式的支持使 TLS 1.3 握手看起来更像 TLS 1.2 握手,并增加了通过旧中间盒成功建立 TLS 1.3 连接的机会。
  • 支持使用 Edward 曲线进行密钥交换和在签名验证中使用 PSS-RSA 填充
语言和运行时
  • 在二进制匹配中,现在允许要匹配的段的大小为 guard 表达式 (EEP-52)
  • 当使用映射匹配时,键现在可以是 guard 表达式 (EEP-52)。
  • 允许在数字文字中使用下划线以提高可读性。 示例:123_456_78916#1234_ABCD
  • shell 中用于显示 Erlang 模块、函数和类型文档的新函数。 这些函数是
    • h/1,2,3 – 打印 Module:Function/Arity 的文档。
    • ht/1,2,3 – 打印 Module:Type/Arity 的类型文档。
      构建 Erlang/OTP 文档时,嵌入式文档创建为 docchunks (EEP 48)。
  • 用于构建 Windows 软件包的工具链已使用新的 C++ 编译器、Java 编译器、OpenSSL 库和 wxWidgets 版本进行了升级。 我们现在使用 WSL(用于构建的 Windows Linux 子系统),这使得处理构建环境更加容易。
网络
  • 在不依赖 EPMD 的情况下运行 Erlang 分布的可能性已经扩大。 为了实现这一点,已向 inet 分布添加了几个新选项。
    • -dist_listen false 设置分发通道,但不侦听传入连接。
    • -erl_epmd_port Port 配置内置 EPMD 客户端应返回的默认端口。
  • 已经实现了 gen_tcpinet 的第一个 EXPERIMENTAL socket 后端。 gen_udpgen_sctp 将会跟进。 将 {inet_backend, socket} 作为 listen()connect() 的第一个选项,可以很容易地为现有代码尝试此操作
  • 内核中的一个新模块 erpc,它实现了 rpc 模块提供的操作的增强子集。增强之处在于,它可以区分返回值、引发的异常和其他错误。 与原始 rpc 实现相比,erpc 还具有更好的性能和可伸缩性。这是通过利用新引入的 spawn_request() BIF 来实现的。此外,rpc 模块在可能的情况下通过利用 erpc 也受益于这些改进。
  • 关于分布式 spawn 操作的可扩展性和性能改进以及新功能。
  • 引入了具有分布式命名进程组的新实现的模块 pg。 旧模块 pg2 已被弃用,计划在 OTP 24 中删除。