潜在不兼容性
- 所有 Corba 应用程序现在都已从 OTP 存储库中移出
- 将创建一个新的 Corba 存储库 https://github.com/erlang
- 新的应用程序 ftp 和 tftp,从 inets 移动
- ssl 默认不再支持 3_DES 密码套件或 RSA 密钥交换密码套件
- 在原始节点(
erl_interface
、jinterface
等)上使用erlang:monitor
将不再因 badarg 异常而失败。相反,将创建一个监视器,但它只会监视与节点的连接。
有关完整列表,请参阅OTP 21.0 - 潜在不兼容性。
亮点
Erts
- 增强的 IO 可扩展性
- 支持使用分布控制器进程进行替代传输、路由等
- 64 位系统上的精简指令,用于 4GB 以下的代码,已加载代码的内存减少 20%
- 使用 NIF 和“Dirty schedulers”重写 efile-driver,从而加快文件操作速度,删除了非 SMP VM
- 为可扩展性优化了链接和监视器
os:getenv/putenv
现在在线程安全的模拟中工作。不再与libc getenv(3)
同步。需要手动同步。- 新的 counters 和 atomics 模块提供了对可变固定字大小变量进行高效操作的访问权限。(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 服务器。旧选项保留以实现兼容性,但现在在 stderror 上给出错误。
标准库
- 新的日志记录 API,logger
- 新的 uri_string 模块,用于根据“标准”解析 URI
- 新函数
lists:search(list,fun/1) -> {ok, Value} | false
- 更改了 .erlang 加载的默认行为。escript、erlc、dialyzer 和 typer 不再加载 .erlang。