写点什么

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

  • 2012-10-08
  • 本文字数:2553 字

    阅读完需:约 8 分钟

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:2210637
用户头像

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

关注

评论

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

利用 Cognizant APEx 2.0 和 Amazon IoT SiteWise Edge 提高产品质量

亚马逊云科技 (Amazon Web Services)

IoT

Capgemini 如何利用 Amazon IoT 通过农业洞察监控农田

亚马逊云科技 (Amazon Web Services)

IoT

Certificate Vending Machine – Amazon IoT 设备接入 Amazon IoT 平台解决方案

亚马逊云科技 (Amazon Web Services)

IoT

物联网场景中灵活实施对设备的控制管理

亚马逊云科技 (Amazon Web Services)

IoT

圣诞节

Tiger

28天写作

🍃【Spring专题】「原理系列」SpringMVC的运行工作原理(补充修订)

洛神灬殇

spring springmvc 12月日更 流程解析

JavaScript 中对象和映射之间的 6 个区别

devpoint

JavaScript map Object 12月日更

【CSS 学习总结】第四篇 - CSS 选择器-伪类和伪元素

Brave

CSS 12月日更

深圳买房记

hackstoic

房地产

构建安防视频云存,和传统安防视频业务的烦恼说再见!

亚马逊云科技 (Amazon Web Services)

IoT

华为云GaussDB新产品特性亮相DTC2021,重磅新品开源预告

华为云开发者联盟

数据库 华为云 GaussDB 同城双集群 内存引擎

这一期总结

张老蔫

28天写作

利用Amazon Lambda实现Amazon IoT设备证书的即时注册

亚马逊云科技 (Amazon Web Services)

IoT

23《重学JAVA》--泛型

杨鹏Geek

Java25周年 28天写作 12月日更

收集、处理并监控设备数据——Amazon IoT SiteWise Edge“一网打尽”

亚马逊云科技 (Amazon Web Services)

IoT

使用模版自动化 Amazon IoT 设备创建及证书注册过程

亚马逊云科技 (Amazon Web Services)

IoT

设计千万级学生管理系统的考试试卷存储方案

drizzle

「架构实战营」

1个通用工具平台+多个热点场景工具套件,助力开发者快速构建应用

华为云开发者联盟

云计算 低代码 开发工具 devcloud 应用构建

圣诞节

圣迪

圣诞节 圣诞老人 平安夜 尼古拉斯 长筒袜

Amazon ES现更名为Amazon OpenSearch Service并支持OpenSearch 1.0

亚马逊云科技 (Amazon Web Services)

IoT

Servlet基础知识与新手常遇到的错及解决方法(01)

海拥(haiyong.site)

服务器 28天写作 12月日更

PassJava 开源 (六) :整合Spring Cloud Alibaba Nacos组件

悟空聊架构

28天写作 passjava 悟空聊架构 12月日更 naocs

前端CI/CD上如何保证依赖安装速度达到优解?

梁龙先森

前端 构建脚本

为什么要空投?(24/28)

赵新龙

28天写作

2022年就要开始啦

搬砖的周狮傅

目标

给弟弟的信第23封|如何写一篇文章?

大菠萝

28天写作

模块3作业

miliving

如何根据不同业务场景调节 HPA 扩缩容灵敏度

xcbeyond

Kubernetes 28天写作 12月日更

Amazon IoT Core 服务成本优化

亚马逊云科技 (Amazon Web Services)

IoT

左手自研,右手开源,技术揭秘华为云如何领跑容器市场

华为云开发者联盟

Docker 开源 Kubernetes 容器 云原生

【CSS 学习总结】第五篇 - CSS 变量 var

Brave

CSS 12月日更

专访Rust——由Mozilla开发的系统编程语言_编程语言_Abel Avram_InfoQ精选文章