写点什么

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

2012 年 10 月 08 日

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 )关注我们,并与我们的编辑和其他读者朋友交流。

2012 年 10 月 08 日 06:229597
用户头像

发布了 31 篇内容, 共 58302 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

区块链推动电力能源管理新一轮技术变革

CECBC区块链专委会

区块链

CSS03 - 常用字体样式

桃夭十一里

html/css

Spring 事务,你真的用对了吗(下篇)?

废材姑娘

Java Spring Framework

大作业一

Geek_83908e

架构师一期

「顺畅不卡顿」,看华为云如何修炼音视频“内外功”

华为云开发者社区

数据中台 数据湖 云原生 RTC 华为云

区块链:能源行业出现破坏性创新的基础?

CECBC区块链专委会

区块链 能源

LeetCode题解:104. 二叉树的最大深度,BFS,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

面向行业智能,华为数据通信推动的2020之变

脑极体

区块链食品溯源,食品安全溯源链搭建

135深圳3055源中瑞8032

Kubernetes 疑难问题排查 - 10s 延迟

东风微鸣

Kubernetes

一文教你学会Hive视图和索引

大数据老哥

大数据 hadoop hive

Java内存模型精讲

伯阳

Java 多线程 后端开发 多线程与高并发 Java内存模型

Ansible 新手指南 - 如何批量管理 NGINX

东风微鸣

ansible

抄答案就是了,两套详细的设计方案,解决头疼的支付掉单问题

楼下小黑哥

支付系统 架构设计

低代码和零代码快速开发崛起,迎来普通人开发软件的时代!

低代码指南

1499飞天茅台脚本使用过程中遇到的Python问题汇总索引目录【淘宝-天猫超市、京东】

谙忆

飞天茅台 茅台

腾讯大佬直言:只要掌握了这份“Redis实战笔记”就掌握了云计算的未来!

比伯

Java 编程 架构 面试 程序人生

CSS01 - 引入方式

桃夭十一里

html/css

在NGINX中根据用户真实IP限制访问

东风微鸣

应用案例| 基于Volcano 的锐天大规模离线高性能计算生产实践

华为云原生团队

云计算 AI 云原生 批量计算 大数据平台

CSS04 - 常用外观属性

桃夭十一里

html/css

在线自习室场景爆发,在线教育平台用户时间争夺战打响

ZEGO即构

详解 Flink 容器化环境下的 OOM Killed

Apache Flink

flink 流计算

uni-app实现实时消息SDK插件

anyRTC开发者

uni-app 音视频 WebRTC 跨平台 sdk

RocketMQ如何保证消息顺序性

废材姑娘

RocketMQ

<译文>NGINX 实战手册 - 控制访问

东风微鸣

企业架构培训感悟

Man

企业架构 中台战略

云算力系统APP开发|云算力软件开发

开發I852946OIIO

系统开发

微服务可能失败的11个原因

xcbeyond

微服务 方法论

智慧社区解决方案,智慧社区管理系统

135深圳3055源中瑞8032

CSS02 - 选择器

桃夭十一里

html/css

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