Erlang/OTP 29.0 发布

Lobsters Hottest 产品

摘要

Erlang/OTP 29.0 是一个重要版本,引入了原生记录、多值推导式、改进的编译器警告,以及增强的安全默认设置(如禁用 SSH 守护进程)。此外,该版本还包含了 JIT 改进以及诸如后量子加密支持等实验性功能。

<p><a href="https://lobste.rs/s/rnpff5/erlang_otp_29_0_release">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/05/13 12:18

# Erlang/OTP 29.0 - Erlang/OTP Source: https://www.erlang.org/news/188 Erlang/OTP 29 是一个包含新功能、改进以及少量不兼容变更的重大版本。以下突出展示了一些新功能。 感谢所有贡献者! ## Highlights# (https://www.erlang.org/news/188#highlights) - 新增对 `-unsafe` 属性的支持,用于标记函数为不安全。编译器现在默认会对调用 Erlang/OTP 中已知始终不安全的函数的行为生成警告。此外,`xref` 现在可用于查找对不安全函数以及缺乏文档的函数的调用。 - SSH 守护进程现在默认禁用 shell 和 exec 服务,遵循“默认安全”原则。这防止了经过身份验证的用户在未经明确配置的情况下执行任意 Erlang 代码。 - 启动 SSH 守护进程时,SFTP 子系统不再默认启用。 - 在 SSL 中,后量子混合算法 x25519mlkem768 现在是默认配置中最优先的密钥交换组。 - 模块 `io_ansi` 允许用户向终端输出虚拟终端序列(也称为 ANSI 序列),以便为文本添加颜色/样式,或创建功能齐全的终端应用程序。 - 新的 `ct_doctest` 模块允许用户测试 Erlang 模块文档和文档文件中的文档示例。 - 构建工具(如 Rebar3)此前将 `ignore_xref` 属性作为后分析过滤器处理。在此版本中,[`xref`] 本身执行过滤,确保所有出于任何目的调用 `xref` 的工具都能依赖这些声明正常工作。 ## General# (https://www.erlang.org/news/188#general) - 在 Erlang 系统的默认代码路径中,当前工作目录 (`.`) 现在位于最后位置,而不是第一位置。 - 不再提供适用于 Windows 的 32 位 Erlang/OTP 构建版本。 ## New language features# (https://www.erlang.org/news/188#new-language-features) - 已实现 EEP-79 (https://github.com/erlang/eep/pull/81) 中描述的本地记录(native records)。本地记录是一种类似于传统基于元组的记录的数据结构,只不过它是一种真正的数据类型。本地记录在 Erlang/OTP 29 以及可能在 Erlang/OTP 30 中被视为实验性功能。 - 新的 `is_integer/3` 守卫 BIF 使得轻松验证值既是整数又位于特定范围内成为可能。例如:`is_integer(I, 0, 100)` - 现在支持根据 EEP 78 (https://www.erlang.org/eeps/eep-0078) 的多值推导式。例如,`[-I, I || I <- [1, 2, 3]]` 将产生 `[-1,1,-2,2,-3,3]`。 - 通过启用 `compr_assign` 特性,现在可以在推导式中绑定变量。例如:`[H || E <- List, H = erlang:phash2(E), H rem 10 =:= 0]` ## Compiler and JIT improvements# (https://www.erlang.org/news/188#compiler-and-jit-improvements) - 在 [`compile`] 模块的文档中,现在有一个部分专门针对在 BEAM 上运行的语言实现者提供建议。 - JIT 现在会为匹配或创建包含多个小端段的二进制数据生成更好的代码。 - 编译器将为不依赖于生成器的常量值的映射推导式生成更高效的代码。示例:`#{K => 42 || K <- List}` ## Compiler warnings# (https://www.erlang.org/news/188#compiler-warnings) 默认启用了几个新的编译器警告。对于每个此类警告,都有一个选项可将其禁用。 - 使用 `catch` 运算符时现在会发出警告,该运算符已弃用很长时间。建议改用 `try`...`catch`,也可以通过使用 `nowarn_deprecated_catch` 选项来禁用此警告。 - 从子表达式中导出变量时现在会发出警告。例如:`file:open(File, AllOpts = [write, {encoding,utf8}])`。可以使用 `nowarn_export_var_subexpr` 编译器选项禁用此警告。 - 编译器现在会对使用 `and` 和 `or` 运算符发出警告。可以使用 `nowarn_obsolete_bool_op` 编译器选项禁用此警告。 - 编译器现在会对诸如 `{a,B} = {X,Y}` 之类的匹配发出警告,这最好写作 `{a=X,B=Y}`。可以使用 `nowarn_match_alias_pats` 选项禁用此警告。 长期以来,使用过时守卫测试(如使用 `list(L)` 而不是 `is_list(L)`)会发出警告。在 Erlang/OTP 30 中,旧守卫将从语言中移除。 ## STDLIB# (https://www.erlang.org/news/188#stdlib) - 新增用于随机置换列表的函数:`rand:shuffle/1` 和 `rand:shuffle_s/2`。 ## SSH# (https://www.erlang.org/news/188#ssh) - 默认密钥交换算法现在为 mlkem768x25519-sha256,这是一种将 ML-KEM-768 与 X25519 结合的后量子抗算法混合算法。这提供了针对经典计算机和量子计算机攻击的保护,同时通过对不支持它的对等端自动回退到其他算法来保持向后兼容性。 有关新功能以及潜在不兼容性完整列表和更多详细信息,请参阅 README (https://erlang.org/download/otp_src_29.0.readme)。

相似文章

OpenSSH 10.4

Lobsters Hottest

OpenSSH 10.4 于 2026 年 7 月 6 日发布,包含安全修复以及对一种结合 ML-DSA 44 和 Ed25519 的复合后量子签名方案的实验性支持。

Racket v9.2

Lobsters Hottest

Racket v9.2 发布,改进包括更安全的模式匹配检查、Typed Racket 修复、Unicode 17.0 支持,以及许多其他修复和文档更新。

perldelta - Perl v5.44.0 的新特性

Lobsters Hottest

Perl v5.44.0 已发布,新增了包括子例程签名中的命名参数、带别名引用的多变量 foreach、/xx 下的增强正则表达式、Unicode 17.0 支持,以及针对缓冲区溢出和正则表达式 trie 溢出的多项安全修复等功能。