写点什么

专访 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:2210759
用户头像

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

关注

评论

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

技能速成!教你10分钟内在电脑上配置运行Hive Metastore和Presto

Alluxio

presto 技能 Alluxio hive metastore 初学者

探索质量外延 - 质量安全故事

QualityFocus

质量管理 软件质量与安全

特定MPC问题包含哪些常见技术,有什么作用,什么场景需要用到?

Jessica@数牍

隐私计算 安全多方计算 特定mpc问题

如何使用物联网低代码平台进行数据分析?

AIRIOT

物联网 低代码开发

转转统一权限系统的设计与实现(前端实现篇)

转转技术团队

前端开发 umijs 权限设计

帮助中心应该怎样设计?

小炮

编程技巧│浏览器 Notification 桌面推送通知

可视化 6月月更 Notification 实时通知

uni-app进阶之Weex/nvue【day6】

恒山其若陋兮

6月月更

个推CTO趣谈元宇宙:从概念、成因到核心技术

个推

数据智能 元宇宙

基于深度学习的水冷工作站加速遥感测绘应用研发

GPU算力

Neat Syntax Design of an ETL Language (Part 1)

Bright

数据开发 ETL 大数据开发 EasySQL

人才一站式服务平台开发,高层次人才管理系统

a13823115807

个推TechDay直播预告 | 6月22日,开启大数据降本提效的破局之道!

个推

大数据 分布式计算 分布式存储 标签

多年亿级流量下的高并发经验总结,我毫无保留的写在了这本书中

冰河

并发编程 多线程 高并发 异步编程 6月月更

阿里云CIPU下笔惊雷,方寸间书写中国算力故事

脑极体

2023年广州美博会-2023年春季广州美博会

Geek_0b38bb

美博会 2023年广州美博会 春季广州美博会 3月份广州美博会

java就业培训 | 面试官如何判断应聘者能力的,这一篇就够了

@零度

JAVA开发

云堡垒机单机部署的优缺点讲解-行云管家

行云管家

网络安全 堡垒机 云堡垒机 堡垒机部署

JDK8 HashMap如何实现?

源字节1号

软件开发

华为云携手鸿蒙,培养创新型开发者

华为云开发者联盟

云计算 鸿蒙 华为云

Javascript API自动代码生成需求征集

百家饭隐私计算平台创业者

JavaScript OpenAPI axios

易观分析《计算机视觉市场研究,2022》研究报告正式启动

易观分析

人工智能

【LeetCode】多个数组求交集Java题解

Albert

LeetCode 6月月更

大数据系统包含哪些组件?需要过等保吗?

行云管家

大数据 数据 过等保

科创人·酷渲科技创始人华少:用双赢思维做产品、连生态,实现规模化发展

科创人

网络安全实战从0到1彻底掌握XXE

网络安全学海

黑客 网络安全 安全 渗透测试 WEB安全

Vue-12-条件渲染(可重复元素)

Python研究所

6月月更

web前端培训如何提高React界面性能

@零度

前端开发 React

java程序员培训 | 10年后程序员的薪资会怎么样

@零度

JAVA开发

Mysql数据库查询好慢,除了索引,还能因为什么?

C++后台开发

MySQL 数据库 中间件 后端开发 C++后台开发

InfoQ 极客传媒 15 周年庆征文|跨平台应用开发进阶(二十二) :uni-app Android APP上线准备工作汇总

No Silver Bullet

前端 签名 安全检测 6月月更 InfoQ极客传媒15周年庆

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