Erlang/OTP 25.0 发布


Erlang/OTP 25 是一个新的主要版本,具有新特性、改进以及一些不兼容性。

有关新功能、错误修复和潜在不兼容性的详细信息,请参阅Erlang 25.0 README或Erlang/OTP 25.0 下载页面。

非常感谢所有贡献者!

Erlang/OTP 25.0 亮点#
标准库#
新功能filelib:ensure_path/1将确保给定路径的所有目录都存在
新功能 groups_from_list/2和模块groups_from_list/3maps
模块uniq/1 uniq/2中的新功能 lists
新的 PRNG 添加到rand模块中,用于快速伪随机数。
编译器、内核、stdlib、syntax_tools #
添加了对可选功能的支持,如EEP-60. 可以在编译期间使用选项(普通和+术语)erlc以及文件中的指令启用/禁用功能。类似的选项可erl用于启用/禁用运行时允许的功能。 完全支持新maybe表达式作为特性 maybe_expr。EEP-49
erts 和 JIT #
JIT 现在适用于 64 位 ARM 处理器。
JIT 现在根据 BEAM 文件中的类型信息进行基于类型的优化。
perf 改进了 JIT 对和等外部工具的支持gdb,允许它们显示行号,甚至可以找到原始的 Erlang 源代码。
erts、stdlib、内核#
用户现在可以使用该 {write_concurrency, auto}选项配置 ETS 表。此选项强制表根据检测到的并发量自动更改在运行时使用的锁数。该{decentralized_counters, true}选项在激活时默认启用{write_concurrency, auto}。
将此选项与其他 ETS 优化选项进行比较的基准测试结果可在此处获得: 基准测试。
为了实现更多优化,使用 OTP 21 及更早版本编译的 BEAM 文件无法在 OTP 25 中加载。
带有进程标志的进程的信号队列message_queue_data=off_heap已经过优化,允许并行接收来自多个进程的信号。当许多进程并行发送到一个进程时,这可以提高性能。见基准。
Erlang 安装目录现在可以在文件系统上重新定位,因为安装的 RELEASES 文件中的路径是相对于安装根目录的路径。
一个名为的新选项short已添加到函数erlang:float_to_list/2和 erlang:float_to_binary/2. 此选项创建给定浮点数的最短正确舍入字符串表示形式,可以再次转换回相同的浮点数。
quote/1模块中的和unquote/1功能介绍uri_string- 替代已弃用的功能http_uri:encode 和http_uri:decode.
新模块peer取代了该slave模块。该 slave模块现已弃用,将在 OTP 27 中删除。
global现在将默认防止由于网络问题导致的重叠分区。这是通过主动断开与报告已失去与其他节点的连接的节点的连接来完成的。这将导致形成完全连接的分区,而不是使网络处于具有重叠分区的状态。可以通过将配置参数设置为来
关闭新行为。这样做将保留与 OTP 24 及更早版本相同的行为。kernelprevent_overlapping_partitionsfalse
和的format_status/2回调已被弃用,取而代之的是新的 gen_server回调。 新的回调增加了限制和改变更多东西的可能性,而不仅仅是状态。gen_statemgen_eventformat_status/1
该timer模块已进行了现代化改造并提高了效率,这使得计时器服务器不易过载。该timer:sleep/1 函数现在接受一个任意大的整数。
编译器#
建议的maybe ... end建设EEP-49 已经实施。它可以简化复杂的代码,否则必须使用深度嵌套的案例。
要启用maybe,请将选项{enable_feature,maybe_expr}提供给编译器。使用的确切选项将在即将发布的候选版本中更改,然后也可以从正在编译的模块内部使用。
当记录匹配或记录更新失败时, {badrecord, ExpectedRecordTag}通常会引发异常。在此版本中,异常已更改为{badrecord, ActualValue},其中ActualValue是找到的值而不是预期的记录。
添加 compile 属性-nifs()以赋予编译器和加载器有关哪些函数可能被erlang:load_nif/2.
当使用二进制语法的二进制构造失败时,改进和更详细的错误消息。这适用于 shell 中的错误消息和 erl_error:format_exception/3,4.
更改功能选项和指令的格式以获得更好的一致性。erlc 和-compile(..)指令的选项现在具有格式{feature, feature-name, enable | disable}. 现在-feature(..)有格式-feature(feature-name, enable | disable)。
加密#
添加crypto:hash_equals/2它是哈希值的恒定时间比较。
ssl #
引入一个新的(仍然是实验性的)选项{certs_keys,[cert_key_conf()]}。有了这个证书列表及其关联的密钥,可用于验证客户端或服务器。将选择被认为最佳且与协商的连接参数匹配的证书密钥对。
public_key #
添加了用于检索操作系统提供的 CA 证书的功能。
透析器#
优化erl_types模块中的操作。并行化 Dialyzer pass 远程。
添加了missing_return和extra_return选项以在规范与推断类型不同时发出警告。这些与高规格和低规格相似,但不像规格那么冗长。
Dialyzer 现在可以更好地理解min/2、 max/2和的类型erlang:raise/3。因此,Dialyzer 可能会产生新的警告。特别是,使用的函数erlang:raise/3现在可能需要带有no_return()返回类型的规范以避免不必要的警告。
杂项#
添加了一个新的DEVELOPMENT HOWTO 指南 ,描述了在修复错误或开发新功能时如何构建和测试 Erlang/OTP。
测试已添加到为每个打开的 PR 运行的 Github 操作中,以便在提出错误修复和新功能时更早发现更多错误。
此版本和以前版本的下载链接可在此处找到

https://www.erlang.org/downloads

 

分类: 编程语言 标签: 编译器 Erlang 发布于: 2022-05-19 09:13:43, 点击数: