Rust 0.9发布,Mozilla开发的C++替代编程语言

by admin on 2020年3月12日

本文翻译自 Graydon 的个人博客:Rust 2019 and beyond: limits to (some)
growth.

澳门新葡亰平台官网 1

Rust是由Mozilla开发的专门用来编写高性能应用程序的系统编程语言。以下是对Rust的创始人——Graydon
Hoare的采访。

提案需要通过流程进行控制,以避免发展过快导致不良后果。Rust 创始人
Graydon Hoare 针对语言资源共享以及处理社区个体压力两部分提出建议。

近日,Mozilla与Rust社区发布了Rust 0.9版编译器和相关工具。
Rust是Mozilla开发的一门新型编程语言,由Web语言的领军人物Brendan
Eich、Dave Herman以及Mozilla公司的Graydon
Hoare等合力开发。Rust是针对多核体系提出的语言,并且吸收一些其他动态语言的重要特性,比如不需要管理内存、不会出现Null指针等。该语言注重安全、性能和并发性,开发目标是最终取代C++成为Mozilla的主要开发语言。澳门新葡亰平台官网,
Rust
0.9版本主要改进有:改进了运行时间和I/O子系统;引入静态链接,优化了链接时间;减少了闭包类型;为标准库引入了智能指针类型。提示:Rust
0.9版本仍然是一个alpha版本,不宜用于生产环境。Rust 0.9发布详情
:Rust
0.9 released 项目官网Github地址

Graydon
Hoare,自称为职业编程语言工程师,从2006年开始开发名为Rust的程序语言。Mozilla对这门新的编程语言非常感兴趣,并专门成立了一个团队来继续它的开发,而且还将它运用在了实验项目Servo
Parallel Browser Project中。

本文作者 Graydon Hoare 是 Rust 语言创始人。众所周知,Rust
最初是 Mozilla 公司员工 Graydon Hoare 的私人项目。2009年 Mozilla
开始赞助 Rust,并有若干 Mozilla 员工参与 Rust
语言的设计和研发。2013年8月,Graydon Hoare 卸任 Rust 技术负责人职位。

Rust是一门系统编程语言,专门用来编写以往都是由C或者C++编写的高性能程序,但C和C++都非常容易出现类似无效内存访问(segmentation
faults
)并由此引发的一系列相关的问题,而Rust的出现就是用来避免类似问题的发生。虽然Rust的语法跟C非常的相似,但是它们之间还是存在很大的不同,以下就列出Rust的一些重要特性:

需要说明的是,Graydon Hoare
表示文章仅代表其本人的观点和立场,与其他任何人无关,甚至不再是以 Rust
积极参与者的身份在表达,而且这些建议在很大程度上适用于许多项目。Rust
只是一个案例,不过目前恰好适合进行一次年终总结。

  • 模式匹配和代数型的数据类型(枚举)
  • 基于任务的并发性。轻量级的任务都可以在不共享内存的情况下并发运行。
  • 高阶函数(闭包)
  • 多态性,结合类似Java的接口特性和Haskell的类类型。
  • 泛型
  • 没有缓冲区溢出
  • 默认情况下不可变
  • 非阻塞的垃圾收集器

Graydon Hoare 对 Rust
项目的发展轨迹也非常满意,之所以写下这篇文章是为了保持它的健康,以及让它在轨道上如期行驶。更重要的是,希望
Rust 能避免他以“局外人”身份进行开发时观察到的这些问题。

Mozilla最近发布了Rust的最新Alpha版,并且公布了规划中即将实现的新特性。
InfoQ与Hoare进行了详细的交流以便能够更多的了解Rust。

Rust 创始人 Graydon Hoare 对 Rust
的发展,表达了两个具体需要注意与改善建议的部分,一是必须要共享技术文件与成品(Artifacts),特别是语言定义本身,再来则是要把注意力放回到社区成员
—— 个体身上,关注参与工作的社区个人的压力,Graydon Hoare
提到,这些必须要及早控制,以有计划的方式进行。

InfoQ:我知道你是从2006年开始开发Rust的,能跟我们稍微谈谈Rust是如何开始并且一步步走到今天的吗?

澳门新葡亰平台官网 2

GH:我是一名职业的编程语言工程师,通常这意味着我都是在给其他的语言开发编译器和工具集,而这些语言我并没有参与任何的设计工作。自然而然,这样的一种境遇就会导致我萌生开发一种属于我自己语言的想法。我确实这么干也有一段时间了,最终我下定决心向我的项目经理展示了我业余时间的一个工作成果。Mozilla对我的工作成果非常感兴趣,还专门成立了一个团队来继续开发该语言,并且还将它作为浏览器堆栈重构长期项目的一部分,希望它能比C++提供更好的并发性,安全性和易用性。这个庞大的项目名为servo。正是基于上述原因,Mozilla才会大力支持Rust的开发。

现在的进展是在2010年我们发布了一个引导程序编译器,并且在去年将它升级为自托管的编译器,而且我们刚刚完成了第二代编译器的第三个alpha版。我们会严格按照alpha版,beta版到稳定版的步骤一步步执行,我们会持之以恒的对它提供支持直到它成为正式的产品,并且还会提供后续的服务。与此同时,servo项目已成为我们所热衷的工作,因为只有在开发编译器的时候我们才能做回自己。

Graydon Hoare
认为,任何事物因缺乏控制机制而发展过快,最终都会导致不好的后果,并列举了几个 Rust
项目对变化率与增长率进行限制的控制案例。他提到,这对于项目的成功有很大的帮助,像
Bors Queue 通常是用来对程序范围内的正确性进行修改,而 Crater Runs
则是用来修正整个生态系统的正确性,而基于时间的版本发布(Time-based
releases)也是流程控制之一,用来决定是否需要放弃遵守时间表,或者是削减功能。

InfoQ:为什么选择开发一门新的语言?

另外,Rust
还增加了一些制度化不太明显,但仍十分重要的社区结构,以管理参与项目的人员成长,例如
RFC
流程,包括关于形式、内容、时间、参与者组合以及讨论重大变化时讨论的规则等,另外,治理模型也是其中的一种控制方式,用于划分责任区域、必要时的权限授予、参与者的角色和期望等。

GH:因为其他语言中那些为我们所熟悉和热爱的优秀特性并不能使它们成为一门被广泛应用的系统语言,并且那些部署在语言中的内存模型也是十分简易(不安全,非并发)的。在70年代末80年代初时,涌现出了一批非常优秀的竞争者,我想重新实现它们所拥有的优秀特性,因为从理论上来讲,情况已经发生了改变:互联网是高度关注安全性和并发性的,所以以前那些青睐于C和C++的设计方式正在不断的发生改变。

Graydon Hoare 认为,目前 Rust
仍有两大领域缺乏功能性的管理,第一是语言的发展本身,这需要有更多的规范;第二是人,亦即社区成员。Graydon
Hoare
提到,当社区成员过于疲惫,可能会做出糟糕的决定,而且社区也可能因成员拥有的资源不均而导致发展偏斜,具有特权、精力充沛、收入丰厚或是其他优越条件的人,才能跟上社区的发展。人们也常为赢得争论,使得言论自由变得狭隘,成员也会因为倦怠、表现不佳而离开项目,社区甚至会因为恶意指责、语言仇恨或挫折而分裂。

InfoQ:为什么Rust跟C息息相关,而不是Java或者其他语言呢?

为此,Graydon Hoare 提出了几项建议,他认为 Rust
项目现在应该暂停、反思、集思广益并执行一些控制措施。他认为最重要的是,社区要学会拥抱负面的语言,试着接纳消极、负面的意见,像是“Rust
永远不会有某功能”这样的话语,唯有沉住气冷静地思考,才能获得长远的视野。

GH:纵观周围,大部分堆栈级的系统代码都是用C或者C++编写的,而那正是我们的目标所在。

除此之外,社区还需要设立一些限制机制,针对诸如编译器编译代码行数、Bootstrap
的总时间数、每日 AWS
执行个体的花费成本、类别系统中推理规则数量等,找出有意义的指标,制定机制以限制发展速度。再则就是基于个人时间预算的活动限制
——
计算出在不疲惫的情况下,每个团队有多少可用的时间,或是每个版本的发布需要耗费多少人力和时数,并移除超过这个时间范围可以做的工作。

InfoQ:是什么使它比C更优秀呢?

项目维护团队应在特定的讨论上加以速率限制或是提供冷静期,因为有时从外部看来,社区的整体讨论过于激烈,而限制讨论是简单的可以“降温”的方式,能让讨论焦点重新回到主题上,而不会被个人行为影响。另外,还应设置一个额外的项目团队,主要负责审核其他团队的预算以达“负载均衡”,Graydon
Hoare
认为这对于团队是有帮助的,让第三方而不是团队中的大多数成员来判断事情的进展,因为大多成员会因为抱着预设的立场而对大多数的事情都说好。

GH:首先,它更加安全,更不容易崩溃。如果你是要做一些非内存安全的操作,那么这就显得尤为重要了。我们不会像那些完整的垃圾回收系统一样在内存安全方面为你增加大量的负担。其他还有一些重要的特性也值得一提:内存模块可以转换成安全的并发模块,而且我们也对以下特性提供了良好的支持:闭包、特性、命名空间、析构函数、Unicode,类型推断、不变的内存、不相交的集合等等。

(文/开源中国)    

InfoQ:Rust跟google的go比起来怎么样?

GH:Go是一门很好的语言。它比Rust要简单一些,因此功能上也会欠缺一些。你可以选择你所喜好的语言。比如,Go的内存模块就没有隔离协同例程和进程间内存的概念,也没有控制突变性的概念。Go的所有任务都是运行在同一个全局可变的堆栈中的。同样的,它只有一种类型的指针,该指针可以一直为空,所有协程里的任何指针都是由全局唯一的垃圾回收器来管理的。而Rust在这些方面却截然不同,它将内存和指针分成不同的类型,这就意味着我们能够更好地解决安全和性能的问题,但同时带来的代价就是程序员在这方面就要花更多的心思。Rust还提供一些Go所没有的额外特性:如类属性、析构函数、不相交的集合等等。但值得赞扬的是,Go对他本身的特性进行了许多的改进,我很高兴Go在这方面也取得了一定的进展。

InfoQ:Rust的主要特性是什么?

GH:我上面已经提到了很多,但是我不认为一门程序语言应仅仅只拥有一个主要特性,它应该是一系列类似特性广泛而一致的组合,而这些特性之间可以很好的相互协作,从而使该语言更容易编写、维护和调试,让程序员可以写出更安全,高效的代码。这就是我们的目标,也是一个宏伟的目标。如果一门语言只是在某一方面比较成功的话,那它也就离失败不远了。

InfoQ:开发者们为什么要选择Rust呢?

GH:我们的目标人群就是那些纠结的C++程序员。实际上就是我们自己。如果你也和我们一样,不断重复的迫使自己因为C++的高效和部署特性而选择它来进行系统级的开发,却又希望可以编写一些更加安全而省心的程序的话,希望我们可以给你一些帮助。

InfoQ:1.0版本计划何时发布?

GH:在我们的wiki上有相关的发布路线图。当它完成(确保它不再需要添加新的特性)的时候我们就可以称它为1.0版了。我想应该是在明年的某个时候吧,毕竟我仅仅是团队中的一员而已,而且我们都知道给软件开发安排进度是一件多么困难的事,即使我们是在做一件极其简单的事情,也不能简简单单的就可以给出一个计划。

值得一提的是这是一个MIT授权的工作,所以任何人都可以随时随心所欲的参与到我们的工作中来的,无论是建立分支还是增加或修改代码。你也可以及时看到我们的工作进展,在github,邮件列表,IRC服务,wiki和存档上它们全都是公开的。我们非常欢迎大家对我们现在的工作提出宝贵和建设性的意见。

查看英文原文:Interview on Rust, a Systems Programming Language
Developed by Mozilla

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图