Rust系列(1)Rust的宏图渐展:诞生缘起与初露锋芒


 

开场白

                                                 

陶渊明先生在其《读山海经》谈及“刑天舞干戚,猛志固常在”,意在表明刑天大神因其所修成的强大能力,可与天帝争锋。

于今时下,有些被称作新一代编程语言的,如Julia,Crystal,Kotlin 和 Go等,皆有不可一世的气派,但观其志向似乎都定位在成一方诸侯,而Rust 作为新一代的系统语言,发展至今,以其快速,高并发,安全和强大的特征与实力,王者之气已然显现。

在一个充满修辞意味的段落过后,我还是好好说话吧。

该系列文章的目的在于介绍一下Rust的发展历程,特色,前景,用法以及项目实践,而本文作为该系列的首篇,先会着重谈一下Rust语言的产生背景,以及该语言所表现出的一些基本特征和重要优势。有人说其出现是为了替代C/C++。

但是否真的是这样呢,让我们来看看该语言是如何产生和发展的,以及表现如何。

 

产生背景

 

Rust程序语言的开发始于2006年, 最初是由Mozilla资助的问题解决项目,其目的在于减少存在于火狐(Firefox)浏览器引擎中的内存安全问题,该引擎名为Gecko,当时是由 C++来写的。

众所周知,C++并非一种容易学习或掌握的编程语言,即使是该领域的专家级人物,也难免会在内存管理等方面犯错;

而且,很少有Python或其他脚本语言的使用者,会真正用C++来进行代码调优以提升执行效率,虽然经常被鼓励这么做,其实他们也不是不想,只是因为难度确实过大,无此信心罢了。

相比之下,C语言的学习和掌握难度还会更大一些。

造成这种困难的原因,不是学习的人不够聪明或不努力或时间不足,而是来自C/C++语言本身的结构缺陷,细言之,这两种语言的规则和判准不够严格和精密,因而难于全面操控。

 

 

当时,Gecko面临的问题是:用C++写的并发模块,经常出现内存泄漏问题。

在2009-2011年间,该团队依然使用C++做了不少努力来进行优化,利用多个CPU的并行来实现cascading style sheets ( CSS )的解析代码,由于用C++很难进行持续的维护和推进,团队成员逐步意识到:在Gecko如此庞大的框架和不少历史遗留问题的背景下,用C++写并发程序,已变得极为艰辛。

于是大家商议,是否需要重新设计Gecko框架?如果选择重新设计,会比现在持续更长时间,但C++的维护和推进中的难题还会存在,而且新旧框架的过渡永远都是一个实践中的痛处。

这种选择意味着:框架不会改进语言的缺陷,隐患始终存在,并迟早爆发。

C或C++语言本身存在的问题也很难在近期得到彻底的解决。于是,似乎一种新的语言应该出现了,那么Rust也就是在这种背景下真正得以提出。

Rust的开发团队,对于新语言的设计讨论再三,精心设计,采取了所能利用的最高端的技术手段和思维方法;并且从零开始,用这种新语言来编写火狐浏览器的引擎Gecko.

2017年,当由Rust编写的部分引擎模块被置于当时火狐浏览器的最新版本时,使得安全系数和运行效率提升了不止两倍。自那时起,这种新语言引擎开始逐步替代原有的C++引擎。

需要补充一点的是,Rust语言曾经是Mozilla内部项目,但其成员大多来自开源社区,现在也已成为开源项目,其资助者已经不再限于其老东家,这就使得在疫情背景下的Mozila裁员,并未对该项目的运行造成实质影响。

 

 

博采众家 独树一帜

                  

就Rust的语言版本演进而言,经历了两个阶段:

一个是2015年的1.0,主题是稳定性(stability);

另一个是2018年的1.31,焦点转至生产力(productivity)。

目前的最新版本还是在这个大版本背景的进程当中。发展依然迅速。

许多新的功能与特色也在不断添加之中,平均每六周,就会有一个新的稳定版本发布。而且配套的生态系统和学习资源,也都足够完备,精益求精。

具体可见该项目的地地址:

https://github.com/rust-lang/rust​github.com

 

 

 

事实上,Rust借鉴了很多程序语言或思想的优势,比如:

Cyclone(可以看作C语言的安全版本),蕴含着基于区域的内存管理技术的思想;

C ++的RAIL原理, 亦即资源获取就是初始化,该范式意味着:资源必须在对象初始化期间获取,并且必须在调用析构函数或解除资源分配时释放;RALL(Resource Acquisition Is Initialization)

Haskell(一种标准化的,通用的纯函数编程语言,有非限定性语义和强静态类型),的类型系统(type system),错误处理类型(error handling types)和抽象类(type class)

就运行时间而已,Rust已经与C/C++位于同一梯队,在安全方面又技高不止一筹。

该语言不需要垃圾收集(garbage collection),并且对于程序中声明的任何值,默认情况下倾向于栈分配而不是堆分配。

此外,Rust编译器目前已经完全由Rust来写,这就进一步减少了不同语言之间的磨合。

 

           

 

这样的特色和实力使得Rust能够写操作系统,游戏引擎,实时数据系统,以及很多要求效率与安全并重的应用产品,如此一来,确实动摇了C/C++在这一领域的地位。

同时,由于其颇具表现力的语法,Rust也可以渗透到诸多脚本语言擅长的领域当中。目前也有相当多的公司开始采取Rust来编写产品,如:Microsoft,Cloudflare,Dropbox等,并寄以厚望。

 

结语

当然,没有一种语言是完美的,Rust中严格语法和编译规则有时确实令人头疼。

但正如该语言的最初开发者Graydon Hoare所说:"Rust is technology from the past came to save the future from itself."或许可以如此做一番推论:用Rust先来莫使旧疾复发,再来集中处理新的问题。

下一篇文章,会详细谈一下Rust的几个重要特色

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值