1.1 缘起
任何一门新技术的兴起,都是为了解决一个问题。
自操作系统诞生以来,系统级主流编程语言,从汇编语言到 C++,已经发展了近 50 个年头,但依然存在两个难题:
· 很难编写内存安全的代码。
· 很难编写线程安全的代码。
这两个难题存在的本质原因是C/C++属于类型不安全的语言,它们薄弱的内存管理机制导致了很多常见的漏洞。其实20世纪80年代也出现过非常优秀的语言,比如Ada语言。Ada拥有诸多优秀的特性:可以在编译期进行类型检查、无GC式确定性内存管理、内置安全并发模型、无数据竞争、系统级硬实时编程等。但它的性能和同时期的C/C++相比确实是有差距的。那个时代计算资源匮乏,大家追求的是性能。所以,大家都宁愿牺牲安全性来换取性能。这也是C/C++得以普及的原因。
时间很快到了2006年,自称“职业编程语言工程师”的Graydon Hoare(简称为GH),开始开发一门名为Rust的编程语言。
什么是“职业编程语言工程师”?用GH自己的话说,职业编程语言工程师的日常工作就是给其他语言开发编译器和工具集,但并未参与这些语言本身的设计。自然而然地,GH萌生了自己开发一门语言的想法,这门语言就是Rust。
“Rust”这个名字包含了GH对这门语言的预期。在自然界有一种叫作锈菌(Rust Fungi)的真菌,这种真菌寄生于植物中,引发病害,而且号称“本世纪最可怕的生态病害”之一。这种真菌的生命力非常顽强,其在生命周期内可以产生多达5种孢子类型,这5种生命形态还可以相互转化,如果用软件术语来描述这种特性,那就是“鲁棒性超强”。可以回想一下Rust的Logo形状(如图1-1所示),像不像一个细菌?Logo上面有5个圆圈,也和锈菌这5种生命形态相对应,暗示了Rust语言的鲁棒性也超强。“Rust”也有“铁锈”的意思,暗合“裸金属”之意,代表了Rust的系统级编程语言属性,有直接操作底层硬件的能力。此外,“Rust”在字形组合上也糅合了“Trust”和“Robust”,暗示了“信任”与“鲁棒性”。因此,“Rust”真可谓一个好名字。事实证明,Rust语言不仅仅是名字起得好。
图1-1:Rust语言的Logo
GH认为,未来的互联网除了关注性能,还一定会高度关注安全性和并发性。整个世界对C和C++的设计方式的青睐在不断地发生改变。其实20世纪七八十年代涌现了很多优秀的语言,拥有很多优秀的特性,但它们的内存模型非常简易,不能保证足够的安全。比如Ada语言的动态内存管理虽然是高规格的安全设计,但还是引起了非常重大的安全事故[1]。
所以,GH对这门语言的期望如下。
· 必须是更加安全、不易崩溃的,尤其在操作内存时,这一点更为重要。
· 不需要有垃圾回收这样的系统,不能为了内存安全而引入性能负担。
· 不是一门仅仅拥有一个主要特性的语言,而应该拥有一系列的广泛特性,这些特性之间又不乏一致性。这些特性可以很好地相互协作,从而使该语言更容易编写、维护和调试,让程序员写出更安全、更高效的代码。
总而言之,就是可以提供高的开发效率,代码容易维护,性能还能与C/C++媲美,还得保证安全性的一门语言。正是因为GH以这种观点作为基石,才使得今天的Rust成为了一门同时追求安全、并发和性能的现代系统级编程语言。
GH 确实找对了本质问题——互联网发展至今,性能问题已经不再是其发展瓶颈,安全问题才是阻碍其发展的“重疾”。但凭什么说Rust就能解决这个问题呢?