BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

专访Rust——由Mozilla开发的系统编程语言

| 作者 Abel Avram 关注 10 他的粉丝 ,译者 方盛 关注 1 他的粉丝 发布于 2012年10月9日. 估计阅读时间: 8 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

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

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

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

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

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

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

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

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

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

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

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

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

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

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


感谢贾国清对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

很像Scala by 华兵 周

!!!!

rust 和 go by chin lon

既生瑜 何生亮

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT