史蒂夫·克拉布尼克,他因撰写了《Rust编程语言》而闻名,同时他在过去13年里为Rust项目做出了巨大贡献。现在,他推出了一种名为Rue的系统编程语言。这种语言注重内存安全性,同时避免了垃圾回收机制带来的复杂性问题,同时还考虑了开发者的使用体验。该项目的开发得到了Claude AI的大力支持。Rue旨在解决高性能系统语言与垃圾回收型语言之间的空白领域。

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

该语言的名称采用了“Ru”作为前缀的模式(如Ruby、Rust、Rue),同时它也有双重含义——既可以是“花朵”,也可以是“遗憾的表达”。

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

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

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

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

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

这种开发方法是一种实验性的尝试,试图回答克拉布尼克多年来一直思考的问题:“如果没有资金支持或团队的支持,一个人能否真正开发出一种编程语言?”这种方法标志着克拉布尼克的转变,因为他原本认为自己是AI的怀疑者,直到2025年才改变这一观点。他第一次尝试在没有利用AI的情况下开发Rue,但在经过几个月的努力后不得不放弃。这次,他利用了Claude AI的力量,在两周内编写出了大约7万行有效的Rust编译器代码,远远超过了之前的几个月时间。

这种合作不仅仅是一般的编码辅助工作。在克拉布尼克和Claude共同撰写的博客文章中,AI负责编写大部分实现代码,而克拉布尼克则负责指导架构设计和决策。克拉布尼克强调,有效使用AI工具需要很高的技能水平。“仅仅知道如何编写代码是不够的,还需要能够很好地利用大型模型。它们本身就是一种新的工具类别。”他的方法是反复试验,编写短小的代码片段,然后测试不同的提示策略。不过,这种模型是否能够消除历史上那些需要大量资金才能实现的语言项目的需求,还有待观察。

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

克拉布尼克对自己的期望并不高:“我不指望它能成为什么了不起的东西,只能算是一个业余爱好而已。”不过,他指出,PHP和Rust的创造者Rasmus Lerdorf和Graydon Hoare也是从个人实验开始起步的。

随着AI辅助开发工具的兴起,软件工程也发生了巨大的变化。虽然GitHub Copilot等工具可以帮助人们进行增量式编码,但克拉布尼克的做法则是利用AI来处理复杂的编译器任务。如果成功的话,这可能会让那些需要大量团队才能完成的复杂基础设施项目变得可行,即使只有具备一定技能的人也能完成这些项目。

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

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

Comments are closed.