开发者生态
morning
Erlang/OTP 29.0
2026-05-16
1 阅读
pyinstallwoes
Erlang/OTP 29.0 2026 年 5 月 13 日 · 作者:Henrik Nord OTP 29.0 # Erlang/OTP 29 是一个新的主要版本,具有新功能、改进以及一些不兼容性。下面重点介绍了一些新功能。非常感谢所有贡献者!亮点 # 添加了对 -unsafe 属性的支持,用于将函数标记为使用不安全。默认情况下,编译器将针对调用 Erlang/OTP 中已知始终不安全的函数生成警告。此外,外部参照现在可用于查找对不安全函数和缺乏文档的函数的调用。 SSH 守护进程现在默认禁用 shell 和 exec 服务,实现“默认安全”原则。这可以防止经过身份验证的用户执行任意 Erlang 代码,除非明确配置。启动 SSH 守护程序时,默认情况下不再启用 SFTP 子系统。在 SSL 中,后量子混合算法 x25519mlkem768 现在是默认配置中最优选的密钥交换组。 io_ansi 模块允许用户向终端发出虚拟终端序列(也称为 ANSI 序列),以便为文本添加颜色/样式或创建成熟的终端应用程序。新的 ct_doctest 模块允许用户测试 Erlang 模块文档和文档文件中的文档示例。 ignore_xref 属性已被 Rebar3 等构建工具作为分析后过滤器进行处理。在此版本中,[ xref ] 本身进行过滤,确保出于任何目的调用外部引用的所有工具都可以依赖这些声明来正常工作。 General # 在 Erlang 系统的默认代码路径中,当前工作目录 ( . ) 现在位于最后一个位置,而不是第一个位置。 Windows 不再有 32 位 Erlang/OTP 版本。新语言功能 # EEP-79 中描述的本机记录已实现。本机记录是一种与传统的基于元组的记录类似的数据结构,不同之处在于它是真正的数据类型。本机记录在 Erlang/OTP 29 中被认为是实验性的,也可能在 Erlang/OTP 30 中被认为是实验性的。新的 is_integer/3 保护 BIF 可以轻松验证某个值是否为整数且在某个范围内。例如: is_integer(I, 0, 100) 现在支持根据 EEP 78 的多值推导式。例如,[-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] 编译器和 JIT 改进 # 在 [compile] 模块的文档中,现在有一个部分为在 BEAM 上运行的语言的实现者提供了建议。 JIT 现在生成更好的代码,用于匹配或创建具有多个小端字节序段的二进制文件。编译器将为具有不依赖于生成器的常量值的映射理解生成更有效的代码。示例:#{K => 42 || K <- List} 编译器警告 # 默认情况下启用了几个新的编译器警告。对于每个此类警告,都有一个禁用它的选项。现在使用已弃用很长时间的 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 # 有用于随机排列列表的新函数: rand:shuffle/1 和 rand:shuffle_s/2 。 SSH # 现在默认的密钥交换算法是mlkem768x25519-sha256,一种将 ML-KEM-768 与 X25519 相结合的混合抗量子算法,可防止经典计算机攻击和量子计算机攻击,同时在同行不支持时通过自动回退到其他算法来保持向后兼容性。有关新功能和潜在不兼容性的完整列表和更多详细信息,请参阅自述文件。