本文翻译自ReadWrite.com上刊登的Matt Asay的一篇文章,Rust Never Sleeps: How Mozilla Could Become Cool Again,副标题是“Mozilla has almost faded from memory, but Rust could make it hip again”。本译文标题采用意译和音译相结合的手法,或许值得商榷,欢迎读者见仁见智提出更正意见。翻译此文不代表译者完全赞同作者原文中的所有观点。—— Liigo, 2015-7-14.
Mozilla公司以前也有过好日子。
它推出的Firefox浏览器曾经是微软IE的头号对手。如今,Firefox落魄到仅剩12%的市场份额——数据源于NetMarketShare对桌面系统浏览器的统计——移动端的情况更糟。Mozilla的其他产品如Thunderbird,不提也罢。
Mozilla英雄落寞的时候,居然推出一门可能促进行业变革的Rust编程语言,让人感到意外。最初版本的Rust由Mozilla公司员工Graydon Hoare在2009年开发完成,基于现代编程语言设计理念从头打造(译者Liigo注:Graydon似乎更倾向于复古的编程理念)。它融合了高层语言(high-level languages)的灵活性和底层语言(low-level languages)的强控制性(firm control)。
本质上,Mozilla这门语言既强调性能,又覆盖广泛的应用领域,从操作系统到数据库所有软件都能开发,还避免了其他语言背负的向后兼容的历史包袱。总之,Rust具有完全颠覆IT行业的潜能,这对Mozilla公司而言意义重大。
锈永不磨灭
Mozilla公司可能曾经迷失过方向,但是它最近正尽最大努力纠正航向。Electrolysis项目可给予Firefox多进程能力,新的WebAssembly标准和WebVR虚拟现实流,将为迷人的新兴技术提供支持。
但是在这些积极举措之前,Mozilla就已经有了复兴自己的根本途径:Rust。Rust已在它口袋里装了好几年了。
Rust是Graydon六年前(译者Liigo注,应为九年前,2006年)开始开发的业余项目,2010年才成为Mozilla公司官方支持的项目。尽管有公司参与,Rust仍被视为社区主导的项目,得到了Mozilla公司以外许多贡献者的支持。
Mozilla是这样描述Rust的:
Rust是一个新的编程语言,注重性能、并行、内存安全。设计者们从头开始创建一门语言,融合现代编程语言的优秀设计,避免传统编程语言的历史包袱。
Rust融合了高层语言富有表达力的语法和灵活性,以及底层语言超强的控制性和性能。
上面最后一句话太诱人了。Rust有能力让开发者编写内核(kernels)、操作系统(OS)、浏览器、数据库,等等,而这些软件要想用高层语言比如Google公司的Go语言开发,往往是不太现实的(you simply can’t realistically write)。
从一面说,Rust是非常现代的语言,它有泛型(Generics)、接口(Traits)、面向表达式(expression orientated)、模式匹配(pattern matching)、闭包(closures)等等许多令人兴奋的特性。
从另一方面说,Rust也是很底层的语言,它默认不使用垃圾收集器(GC),它仅仅通过定义一系列规则,让编译器在编译时做强制检查,就消除了对垃圾收集器的依赖。
更让Burgdorf感到振奋的是,Rust提供深层控制(deep control)内存申请等能力,他写道:“Rust还允许你深层控制堆和栈空间的内存申请,这对Go来说是不可能的,因为Go的编译器采用逃逸分析(escape analysis)(自动)确定是否在堆上申请内存。”
虽然很多新的编程语言不断地更快地涌现,Rust有一点让它与众不同:它在不强制要求开发者成为底层编程专家的前提下,提供了底层语言的控制力和性能。
让开发者的工作变得简单是新语言的价值,如果同时还能提升开发者的控制力(boosting their control),就更吸引人了。
锈得低调淡定
Redmonk公司的Stephen O’Grady指出:最近不断出现的信息显示,Rust正逐步激发越来越多的开发者的兴趣。
Rust可被应用于新项目和旧项目。就像开发者Jeff Waugh对我说的:“我预计会有很多新项目拥抱Rust,包括全新的项目,和旧项目中的新模块。”
虽然可能会有采用Rust全新开发的操作系统、数据库等其他项目,扩展已有项目也是Rust的价值所在。Mozilla公司的Servo浏览器引擎是一个好的例子。“值得注意的是,Servo重用了很多(C++)代码,而核心的/新增的功能是用Rust语言开发的”,Waugh说,“Servo使用Rust完成了全部的并行布局(parallel layout)功能,而SpiderMonkey(JavaScript引擎)和libpng(解析PNG图片)相关功能则是重用旧的代码。”
也就是说,Servo里面的一部分代码是Rust,还有很多不是。但是通过Rust开发部分代码去改进Servo(或其他任意项目)是很有效的,尤其是对基于C语言的项目而言。澳大利亚作者程序员Dave Cheney写道:“某些遵循C语言调用约定的大型项目,很希望将Rust代码嵌入进去。”
未来是锈的天下吗?
说到Rust,还有一个很纠结的问题:如果它很棒,为什么不是所有人都用它呢?
目前,还很难找到有关Rust的工作岗位,Hacker News上面的招聘趋势印证了这一点。根据Google搜索数据得到的信息显示,程序员对Rust感兴趣比例还比较低。
但是请不要混淆当前状况和长期行业影响。例如,不能简单的因为Go现在比Rust流行,就判定(将来)Go会赢而Rust会输。
这是错误的比较方法。Cheney解释说:“Rust的竞争者是C++和D语言,使用C++和D的程序员为了追求最高性能,已经准备好接受复杂的语法和语义(以及因此导致的较低可读性的代码)。”然后,他又补充说,“Go的竞争者是Ruby、Python、Node.js (v8),这些语言多是在2006年之后互联网2.0时代发展壮大的,他们的使用者对基于JVM的语言很高的部署成本失去了耐心。”他们之间的应用场景和用户群,都有很大的不同。
我希望Go继续成长,但是我猜想,Rust将会对我们整个行业中最重要的程序,产生深远的影响。
就像Peter Bright说的那样,“Rust尝试提供像C或C++那样的性能和控制,同时让C和C++经常出现的安全方面的BUG(security-compromising bugs),在Rust中更难出现。”
Mozilla公司通过大量应用Rust(Servo/Firefox),能够向C语言开发者展示Rust语言的能力,其中某些C开发者一直在寻找更好的语言。通过应用Rust,Mozilla公司也在逐步让自己重新成为现代应用开发领域的主导力量(central force)。
题图来自Shutterstock。