Elixir语言创始人José Valim于6月3日正式发布了Elixir v1.20,这是一个里程碑式的版本——Elixir正式成为一个渐进式类型(Gradually Typed)语言。这意味着开发者可以在不添加任何类型注解的情况下获得类型推断和类型检查的能力,同时也可以选择性地添加类型注解来获得更精确的类型验证。
这次类型系统的实现采用了基于集合论的设计,支持并集、交集和否定运算等集合操作。这种设计使得类型表达更加精确和灵活,开发者可以更自然地描述复杂的数据结构和函数签名。引入的dynamic()类型是另一个重要特性,它提供了兼容性和类型收窄的能力,让渐进类型系统的过渡更加平滑。
def percentage_or_error(value) when is_integer(value) do
value_or_error =
if value > 1 do
value
else
"not well"
end
# ... more code ...
if value > 1 do
value_or_error / 100
else
String.upcase(value_or_error)
end
end
值得注意的是,这个类型系统能够发现"已验证bug"——即运行时必定失败的类型违规。开发者强调,这类验证的误报率极低,不会给开发者带来过多的噪音。Valim在公告中提到,他们通过"if T"基准测试对类型系统进行了评估,在13个类别中通过了12个,显示出相当高的可靠性。
在编译改进方面,v1.20针对多核机器进行了优化,编译速度有显著提升。新引入的:module_definition编译器选项为开发者提供了更细粒度的编译控制能力。这些改进对于大型项目的开发体验有直接帮助。
Valim也明确表示,类型签名的引入将分步骤进行。当前的v1.20实现了类型推断和基础类型检查,下一步将是递归类型、参数化类型和地图键值遍历等功能。在这些功能完善之后,类型签名才会被正式引入语言。这种渐进式的演进策略是Elixir社区的一贯风格——不追求一步到位,而是确保每个阶段的功能都稳定可用。
这个版本得到了CNRS、Remote等机构的支持,Fresha和Tidewave也提供了赞助。对于已经在使用Elixir的开发者来说,v1.20是一个值得尽快升级的版本;而对于考虑使用Elixir的开发者来说,渐进类型的加入让这门语言在保持灵活性的同时,获得了更强的静态分析能力。
参考来源:https://elixir-lang.org/blog/2026/06/03/elixir-v1-20-0-released/