Linux.中国 - 开源社区

 找回密码
 骑士注册

QQ登录

微博登录


为什么我说 Rust 是靠谱的编程语言

2015-5-19 10:19       

序言:本文试图帮您解答“我要不要(投入大量时间和精力)学习Rust语言?”这个问题。作者尽量较少的谈及Rust语言本身,反而尝试从Rust语言周边入手,长时间、大范围、多角度地考察,研判Rust语言是否靠谱,并给出尽可能客观的理由。为写成本文,作者@Liigo不惜“卧底”Rust“老巢”长达一年多,收集整理总结了大量信息。如果嫌长,可以只看小标题,粗略浏览一番。

(题图来自:redbubble.net)

1. Rust编程语言

Rust(blog)是一门强调安全、并发、高效的系统编程语言。其中四个关键词,系统编程、安全、并发、高效,是Rust语言的核心特征,也是区别于其他编程语言的首要因素。

  • Memory safety without garbage collection

  • Concurrency without data races

  • Abstraction without overhead

除此之外,我再补充一些关键词,以便读者更直观地了解Rust:静态类型/编译式语言/静态编译/动态编译、泛型/函数式/面向对象、模式匹配/ADT、DST/HKT/Associated Types/闭包(Closures)、Static/Dynamic/Multiple-Dispatch、没有虚拟机(VM)、没有垃圾收集器(GC)、没有运行时(Runtime)、没有空指针/野指针/内存越界/缓冲区溢出/段错误、没有数据竞争(Data Race)……

Rust语言具有特性丰富、设计优良、适用范围广等诸多优点。

我(Liigo)从2013年底开始正式关注Rust项目,……至今有一年半了。其中有赞有批,有争有闹,也有贡献源码。本文所写的是我这些日子以来的所看、所闻、所感。

判断一门新的编程语言“是否靠谱”,是主观性很大的课题。Rust语言今日才刚刚发布1.0版本,它的未来发展走向如何,谁也说不清楚,说到底都是猜测。但是直觉告诉我,如果人靠谱、团队靠谱、技术能力靠谱、态度靠谱、社区靠谱,这个项目在很大程度上就是靠谱的、值得期待的。

谨以此文,献给我长久期待的 Rust 1.0

2. 开放、友好、高效的开源社区

相当彻底的开源项目,开放、透明、友好,进度热火朝天,动作大刀阔斧。这是我第一次亲身参与并观察到的如此大规模的开源编程语言项目的开发过程。(之前也关注过Go语言项目,但其规模要小得多。)

  • 开放源代码、GitHub/Git在线开发 https://github.com/rust-lang/rust

  • 开放系统设计过程,重要设计项目的提出、讨论、评估、决策均在线进行(RFCs)

  • 内部决策过程也公开透明,每周发布会议记录(meetimg-minutes)

  • 公开接受第三方开发者提交的 Pull Requests,必要时还指导开发

  • 有一个核心团队(the core team)负责项目的发展方向和最终决策

  • 有大量的(超过 1000 人!)第三方开发者给Rust贡献源代码、文档和测试用例

  • 多次将优秀的第三方开发者吸纳进入官方开发团队和核心团队

  • 多次在世界各地(包括北京)主办和协办小型本地开发者见面会

  • IRC,internals,Reddit/r/rust,HN(Hacker News)StackOverflow有许多跟Rust相关的技术讨论,常见核心开发者参与其中

  • Github上用Rust语言开发的项目也风风火火(详见下文)

热火朝天”,用于形容其工程量大、进度快、成效显著。看看Rust的 Release Notes,常见这类字眼:

  • Version 1.0.0 (May 2015): ~1500 changes, numerous bugfixes

  • Version 1.0.0-alpha.2 (February 2015): ~1300 changes, numerous bugfixes

  • Version 1.0.0-alpha (January 2015): ~2400 changes, numerous bugfixes

  • Version 0.12.0 (October 2014): ~1900 changes, numerous bugfixes

  • Version 0.11.0 (July 2014): ~1700 changes, numerous bugfixes

  • Version 0.10 (April 2014): ~1500 changes, numerous bugfixes

  • Version 0.9 (January 2014): ~1800 changes, numerous bugfixes

  • Version 0.8 (September 2013): ~2200 changes, numerous bugfixes

  • …​…​

还有很多就不一一列出了。Rust自从2012年1月20日发布0.1版,到现在的1.0正式版,平均每隔三个月发布一版,每次升级改进都多达一两千项。Rust是在GitHub/Git上在线开发的,开发者对源代码的每一项改动(commits)都被版本管理系统记录在案,有据可查。大多数是实质性的功能升级,不存在靠修改标点、配置文件、拼写错误、或者每改三五行代码就提交的凑数行为(在此严重鄙视Atom编辑器、Kotlin语言)。反而常见动不动就甚至 行 Rust 代码的情况,1,2,3。

有一个网站叫 "This Week in Rust",每周进展公告,专门介绍Rust语言最近一周的最新重大变动,可供大家参考。里面的内容虽然不全,但颇有代表性。这个网站几经变迁,但是自2013年6月上线时起,两年来,作者cmr坚持每周更新,几乎从未中断。

总之我(Liigo)说Rust的开发“热火朝天”,一点也不夸张。(我还要顺便鄙视Apple公司,发布某某OS新版的时候,动不动就说“新增1500项API”,哎,咱还就较真儿了,去查,算上所有Function、所有Type、Type内的所有Method、所有常量定义—— #define XX 123,你懂的 ——勉强够数!跟Rust的 "~1500 changes" 相比,天上人间。)

大家可以比照近十年在中国大陆和近两年在南中国海的大型基建项目的进展速度,体会Rust那种热火朝天的开发场面。处于这样的开发环境下,所有人都深受鼓舞,所有人都知道,一切都会越来越好,知道所有的欠缺和困难都是暂时的。行动永远比语言有说服力。

大刀阔斧”,用于形容其开发行为豪迈、干脆,持续追求“更好的设计和实现”,无包袱、无迁就。只要有了更好的设计(或实现),经过深入讨论和评估之后,果断替换掉旧的设计(或实现)。不管这项改动有多复杂、多麻烦,也不理会因此形成的大量不兼容性,勇往直前的行动。说去胳膊就去胳膊,说卸腿就卸腿,就是眼睛它也敢摘下来镶个火眼金睛再装回去。牵一发而动全身的事情,干了可不止一次。例子有很多,最典型的是libgreen,之前Rust靠它一条腿走路,后来有了libnative,两条腿走路,再后来全都砍掉,最终做到没有运行时(Runtime)。其他的例子还有std::io/os/path的大型重构(I/O OS Path Reform),重新设计然后无缝替换回去(有rustc、servo为证),可谓自己给自己做了大型手术。一个新兴的项目,在真正面世之前的开发过程中,如果不经历几次这类大的阵痛,很难说它最终是成熟的和久经考验的。如果因为各种顾虑而迁就、保留旧的设计(或实现),很难说最终的产品是完善的和设计优良的。如果面世之前都不肯改进,面世定型之后改进的可能性就更小了(束手缚脚),缺陷可能伴随终生,令所有的用户长期的纠结。(这种大刀阔斧,与我(Liigo)当年在易语言公司参与研发EF语言时我所主张并践行的观点一致。有意推迟发布1.0也是为了给完善产品留足充裕的时间。)

需要强调的是,Rust开发者大刀阔斧的日子,只发生在Rust 1.0正式版发布之前。1.0之后,他们将老老实实的遵守SemVer 2.0 规范,再也不会轻易做出破坏代码向后兼容性的行为。本文后面还会谈到这一点。

3. 十年勤耕不辍、低调做人高调做事

2006年,创始人Graydon Hoare启动了Rust编程语言项目,利于业余时间开发了三年,完成Rust语言的第一个可用版本。早期的Rust编译器 rustboot 是用OCaml语言开发的。这三年间发生的事情,我们现在知道的并不多。根据创始人对Rust的命名,可以一窥其设计初衷:

我从很多名称中挑选出了"Rust"。主要受到病原菌的启发——那些令人惊讶的、生死轮回的、多源寄生的奇妙物种。而且"Rust"还有其他内涵:它很好地契合了“贴近金属”(bare metal)、“复古编程语言技术”的主题;它从字面上融合了"Trust"(信任)和"Robust"(健壮)。 —— Graydon Hoare

2009年,Rust项目被Graydon Hoare赠送给(英文原文"was presented to")Mozilla公司,并得到持续活跃地开发支持。Mozilla创建了以Graydon为首的专业团队全职开发Rust,并且开放源代码。

2010年至2011年,Rust语言的编译器被用Rust语言重写,完成自举,采用LLVM作为编译后端——之前的Rust编译器是用OCaml语言编写的。

2012年1月发布0.1版,第一个面向公众的预览版本问世。从那时起,平均每3个月发布一个新版本,版本号每次只加0.1,改动的内容却往往天翻地覆。2012年到2015年这三年多的时间里,开发者持续不断的改进Rust语言、编译器和标准库,翻新重修,精益求精。不断地否定自己,不断地超越自己,一步一个里程碑。

2012年2月,也就是Rust 0.1刚刚发布不久, Servo项目被创建,用Rust语言开发下一代浏览器引擎,目的在于验证Rust语言开发大型实用项目的能力。

2012年到2015年这三年多时间,Rust和Servo互相扶持着茁壮成长起来了。Mozilla公司在Rust和Servo这两个不盈利的开源项目上付出的大量人力物力财力和时间成本,体现了他们全力打造下一代全新系统编程语言的决心和气魄。但是他们很少花费精力在大规模宣传和营销上,导致大部分公众/开发者几乎从没听过Rust语言,仅靠长期的口碑相传吸引了一批慧眼识金的忠实的开发者。

Rust不是富二代也不是官二代,它没有一个有钱或有权的爹。Mozilla公司,论资金规模和影响力,远远不及Google、Apple、Microsoft,勉强算是二流公司,但是它依然给予了Rust长期的坚定的支持。

历经近十年精心打造,Rust靠自身实力赢得未来。2015年5月16日,Rust正式发布1.0版本,破茧成蝶,吹响进入新时代的号角。

1234下一页
查看其它分页:

发表评论


最新评论

我也要发表评论

返回顶部

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”将网页分享至朋友圈。