在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开场白
陶渊明先生在其《读山海经》谈及“刑天舞干戚,猛志固常在”,意在表明刑天大神因其所修成的强大能力,可与天帝争锋。 于今时下,有些被称作新一代编程语言的,如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/rustgithub.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的几个重要特色 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论