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)。

相似文章

Java 27 发布

Hacker News Top

Java 27 (JDK 27) 现已正式发布,主要增强功能包括将G1设为默认垃圾回收器、为TLS 1.3提供后量子混合密钥交换以及多种预览功能。

JDK 27 已发布

Lobsters Hottest

JDK 27 作为 Java SE 平台版本 27 的参考实现已发布,包含的更新包括将 G1 设为默认垃圾回收器和 TLS 1.3 的后量子混合密钥交换。

发布 v0.29.0 · warp-tech/warpgate

Lobsters Hottest

Warpgate v0.29.0 是一个智能堡垒主机的版本,提供对SSH、HTTPS、Kubernetes、MySQL、PostgreSQL、RDP和VNC等协议的透明访问,并具有会话录制、2FA、SSO和暴力破解保护等功能。

OpenSSH 10.4

Lobsters Hottest

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