史蒂夫·克拉布尼克,他因编写了《Rust编程语言》而闻名,同时在过去13年里为Rust项目做出了巨大贡献。他推出了一种名为“Rue”的系统编程语言,该语言在确保内存安全的同时,避免了使用垃圾回收机制。同时,他还注重开发者的使用体验,而不是让Rust的复杂性变得过于复杂。这项项目的开发得到了Anthropic的Claude AI的大力支持。

为了庆祝自己创立Rust以来的第十三个年头,克拉布尼克在他的博客文章中解释了他的动机:“我一直想知道是否应该尝试自己创造一种编程语言。我真的很喜欢这种想法!这也是我开始接触Ruby以及后来选择Rust的原因。”

这种语言的名称遵循了他的“Ru”前缀模式(Ruby、Rust、Rue),但同时又具有双重含义——既可以是“花朵”,也可以是“遗憾的表达”。

克拉布尼克的核心设计理念是:如果Rust不试图与C和C++竞争最高性能的话,那么我们可以稍微降低一些性能,以换取更好的易用性。

在技术方面,Rue消除了Rust特有的特性——即“借用检查器”。以典型的Rust代码为例,当你试图修改一个向量时,由于引用可能无效,编译器会拒绝执行该操作。而Rue则通过使用“inout”参数来临时转移所有权,从而解决了这个问题。在Rust中,尝试在遍历向量时对其进行修改会导致编译失败。而Rue的inout参数则允许你暂时传递可变的引用,但同时禁止将其存储在数据结构中。这样,就不需要跟踪生命周期了,同时保持了内存安全性。

函数可以就地修改值,但这些值不能作为引用存储到堆分配的结构中。不需要进行生命周期注释。不过,这种方法也有一些缺点:某些模式无法被表达出来。正如设计文档中所提到的,Rue无法支持从容器中获取迭代器的功能,因为它们必须直接消耗这些容器。

Hacker News社区对这项技术表示了兴趣和怀疑。一位评论者指出:“Rust之所以能够成为一种无需垃圾回收且具备内存安全性的语言,是因为它引入了相当大的复杂性。除非放弃通用系统编程语言的要求,否则没人能找到其他可行的解决方案。”

根据GitHub上的设计提案,Rue实现了四种不同的所有权模式:值类型、仿射类型、线性类型和引用计数类型。克拉布尼克承认,这样做会带来一定的表达能力损失。没有简单的解决办法。

这种开发方法是一种实验性尝试,旨在解决克拉布尼克多年来一直思考的问题:“如果没有资金或团队的支持,一个人能否真正创造出一种编程语言?”这种方式意味着克拉布尼克从AI怀疑论者转变为实践者。他第一次尝试创建Rue时,因为缺乏有效的AI支持而不得不放弃。这次,他利用了Anthropic的Claude AI,在两周内就完成了大约7万行有效的Rust编译器代码,远远超过了之前的几个月时间。

这种合作不仅仅是普通的编码辅助。在克拉布尼克和Claude共同撰写的博客文章中,AI负责编写大部分实现代码,而克拉布尼克则负责指导架构设计和决策。克拉布尼克强调,有效利用AI工具需要很高的技能水平。“仅仅知道如何编写代码是不够的,还需要掌握如何使用大型模型。”他的方法是反复试验,编写短小的代码片段,尝试不同的提示策略。不过,这种模型是否能够消除传统上需要大量资金支持的语言项目的需求,还有待观察。

目前,Rue还处于早期发展阶段,只包含了基本的控制流、函数和不可泛化的枚举类型。它通过自定义后端生成本地可执行文件,从而实现快速的编译速度。堆分配功能正在开发中,而语言服务器协议支持、包管理和并发模型则尚未实现。该项目使用Buck2而不是Cargo来进行未来的编译器构建。

克拉布尼克保持谨慎的态度:“我不认为它会成为一项重要的项目。不过,他提到PHP和Rust的创造者Rasmus Lerdorf和Graydon Hoare也是从个人实验开始的。”

随着AI辅助开发工具的兴起,软件工程领域正在发生变革。虽然GitHub Copilot等工具可以帮助人们进行增量式编码,但克拉布尼克的做法则是利用AI来处理复杂的编译器问题。如果成功的话,这可能会让那些需要大量团队的复杂基础设施项目变得可行,只要有熟练的工程师和AI的帮助即可。

真正的考验在于,那些因为Rust的学习曲线而感到沮丧但又不愿意采用垃圾回收机制的开发者是否会接受Rue的权衡方案。正如一位Hacker News评论者所说:“如果他们能在设计中找到新的可能性,我会非常感兴趣。但目前来说,我还是持怀疑态度。”

Rue的语言文档可以在rue-lang.dev网站上找到,而其源代码则可以在GitHub上找到。

Comments are closed.