Erlang/OTP 21

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

Erlang/OTP 21 亮点 博客文章

docker run -it erlang:21

潜在的不兼容性

  • 所有 Corba 应用程序现在已从 OTP 存储库中移出
  • 将创建新的 Corba 存储库 https://github.com/erlang
  • 新的应用程序 ftp 和 tftp 已从 inets 中移出
  • ssl 默认情况下不再支持 3_DES 密码套件或 RSA 密钥交换密码套件
  • 在原始节点(erl_interfacejinterface 等)上对 erlang:monitor 的调用不再会以 badarg 异常失败。相反,将创建监控器,但它只监控与节点的连接。

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

亮点

Erts
  • 增强了 IO 可扩展性
  • 支持将分布式控制器进程用于替代传输、路由等
  • 64 位系统上的紧凑指令(适用于小于 4GB 的代码) 已为加载的代码节省了 20% 的内存
  • 使用 NIF 和“脏调度器”重写了 efile 驱动程序,从而使文件操作速度更快,并移除了非 SMP VM
  • 为可扩展性优化了链接和监控
  • os:getenv/putenv 现在适用于线程安全仿真。不再与 libc getenv(3) 同步。将需要手动同步。
  • 新的计数器和原子模块提供对可变固定字大小变量的高效操作的访问。(21.2)
  • 新模块 persistent_term!。查找时间为常数!不再复制项!(21.2)
编译器
  • 包括来自 Elixir 团队的贡献的各种编译器优化,在基准测试中提高了 10% 的性能
  • 已从运行时系统中删除“元组调用”。
  • 类似 f({ok, Val}) -> {ok, Val} 的代码现在会自动重写为 f({ok, Val} = Tuple) -> Tuple。这减少了代码大小、执行时间,并降低了 GC 压力。
  • 从多个操作符获得的堆栈跟踪中提供更多信息
  • erlang:get_stacktrace/0 已弃用,将用 try … catch C:R:Stacktrace -> … 替换
  • 优化了使用文字键创建的小型映射。
  • 新的预定义宏 OTP_RELEASE 和预处理器指令 -if-elif
安全性
  • SSL 应用程序现在支持 DTLS
  • 增强了对通过 TLS 进行分布式处理的支持
  • 从 SSL 和 SSH 中的默认设置中删除了“不安全”密码。
  • 定义了一个新的选项值,以方便实现 exec 服务器。旧选项保留用于兼容性,但现在会在 stderr 上给出错误。
标准库
  • 新的日志记录 API,logger
  • 新的 uri_string 模块,用于根据“标准”解析 URI
  • 新函数 lists:search(list,fun/1) -> {ok, Value} | false
  • 更改了 .erlang 加载的默认行为。escript、erlc、dialyzer 和 typer 不再加载任何 .erlang。