当前位置:   article > 正文

智能化软件开发微访谈·第三十二期“Rust语言与系统及生态发展”

rust语言生态

8195ad42da72aca35aa67b6cac3dc133.png

 CodeWisdom

“智能化软件开发沙龙是由CodeWisdom团队组织的围绕智能化软件开发、数据驱动的软件开发质量与效能分析、云原生与智能化运维等相关话题开展的线上沙龙,通过微信群访谈交流等线上交流方式将学术界与工业界专家学者汇聚起来,共同分享前沿研究进展与业界实践,共同探讨未来技术发展方向。”

Rus t语言与系统及生态发展

智能化软件开发微访谈·第三十二期

背景介绍

Rust语言作为一种注重内存安全、并发性能强大的系统编程语言已经受到了广泛的关注,并在系统编程、Web开发、嵌入式开发、人工智能等领域得到越来越多的应用。当前Rust语言国际开源社区与软件生态快速发展,但作为一种新生代语言还没有在国内得到广泛的了解和接受,同时在技术和生态发展上还有很多挑战和机遇。

为此,本次微访谈邀请了多位来自学术界和产业界的专家围绕Rust语言与系统及生态发展进行研讨,介绍Rust语言的发展历史及其各种特点、分析Rust语言的优势及其应用领域、分享Rust语言的最佳实践、探讨Rust生态发展的现状及问题,在此基础上展望未来的发展方向。

主持人

 d6bbaa7397d9a0e10468ac9608db74dd.jpeg

彭鑫

复旦大学计算机科学技术学院副院长、教授

嘉宾

 b2bc033174b67ecd9237e701eb9da27d.png

陈渝

清华大学计算机系长聘副教授

 7dc3a6536c1e0a599b238fd2807c8e4d.jpeg

张伟

北京大学计算机学院副教授

 4535574912592eccc16aa33743eac756.jpeg

韩文弢

清华大学计算机科学与技术系讲师,党委副书记

 23652e3d6f748d2132979f606306799c.png

向勇

清华大学计算机系副研究员

 e59691f1a5f05183fb0e09f2b7683538.jpeg

徐辉

复旦大学计算机科学技术学院副教授

 2b05b4dfa91dcec9c119193d6ea3cb38.png

冯洋

南京大学计算机科学与技术助理研究员

 b715d9a1eb3fdde7c6ae152686602515.png

马全一 

华为2012 实验室下属开源管理中心

 d04ea06e8caa6a12c1da321ffcc000a0.jpeg

田洪亮

蚂蚁技术研究院操作系统(OS)方向负责人

 37068281e48e567a533b9fe244cec83f.jpeg

戴钎

vivo系统架构专家

 82b181dd7f21bf91074a88c2231a56cc.jpeg

张汉东

资深独立咨询师,Rust 专家级顾问

 83d1154c2b7233b542caca67029d5981.png

蓝登峰

开放原子开源基金会资深顾问

访谈主题

Rust语言与系统及生态发展

01

Rust语言是如何提出并一步步发展起来的?Rust语言有什么特点,适用于什么样的软件开发项目?Rust语言在软件开发特别是系统软件开发中有哪些独特的优势,同时又有哪些缺点?

02

如何评估Rust语言在特定项目中的适用性?Rust语言在构建高性能系统软件方面的潜力和挑战是什么?Rust在嵌入式系统、操作系统等底层软件开发中的应用前景如何?Rust语言的应用对软件工程实践带来了哪些变化?在大型软件开发项目中应用Rust语言有哪些最佳实践?

03

当前Rust语言在开发库、框架、工具等方面的生态建设现状如何,存在哪些挑战?在构建可持续发展的Rust生态系统方面还存在哪些关键的缺失或不足?

04

如何通过教育和推广帮助更多的人了解和使用Rust语言并参与到Rust软件生态建设中?在当前的大学教育中是否适合引入Rust语言教育,有哪些实践经验?如何在开源社区推广Rust语言和基于Rust语言的项目?如何能积极参与到Rust相关的国际交流与国际社区中去?

05

展望未来,Rust语言将会往什么样的方向发展,有望在哪些领域取得突破?对于Rust语言与系统及其生态未来的发展有哪些建议?

Q&A记录

Question 1

主持人:Rust语言是如何提出并一步步发展起来的?Rust语言有什么特点,适用于什么样的软件开发项目?Rust语言在软件开发特别是系统软件开发中有哪些独特的优势,同时又有哪些缺点?

陈渝:

Rust语言的发展历程、特点和应用场是一个很有趣的话题,2006年,由在Mozilla的Graydon Hoare基于个人兴趣创立了Rust语言,并逐步以开源社区的形式发展,并通过基金会得到了各大公司的支持。

如果说Rust语言的一个特点,那就是“安全”。Rust语言适合于对安全和性能都非常重视的系统软件场景。其优点是安全和高性能,缺点是学习曲线陡峭,编译速度较慢,不适合快速原型开发。

张伟:

Rust最初源于Mozilla员工Graydon Hoare在2006年开始的一个私人项目;2009年,Mozilla开始赞助这个项目,并成立了专门的开发团队;2010年,该项目对外公开;2011年,实现了编译器的自我编译;2015年,Rust 1.0发布;2021年8月,Rust 基金会成立,首批5个金主公司 AWS、Huawei、Google、Microsoft、Mozilla。

Rust的特点很多,如果用一句话来讲,可以这样描述:“Rust初见是一个美丽的花园,但走过交叉小径,却有一片unsafe的黑暗区域”(这是北大的一名本科生在今年《Rust程序设计》课程期终考试试卷上写下的一句话)。对这句话的一种解释是,Rust语言实际上可以理解为两种语言:冰山之上的语言,晶莹剔透,非常好看;冰山之下的语言,与C语言没有本质上的差别,灵活、不安全、责任自负。

一般编程语言程序中的值在内存中表现为一种具有复杂引用关系的网络,可分析性差。Rust程序中值在内存中表现为一种由所有权关系形成的树:从图转变为树,丢失了很多的灵活性,但带来了程序在编译时刻的可分析性;“transferring the pain of understanding your program from the future to the present”。

观点讨论

@彭鑫:@张伟 这段理解很有意思,看来RUST也有AB两面。

@彭鑫:各位嘉宾如何看张伟老师提到的北大学生的这段理解:“Rust初见是一个美丽的花园,但走过交叉小径,却有一片unsafe的黑暗区域”。

@田洪亮:@彭鑫 北大的同学就是浪漫。

@陈渝:@田洪亮 清华学生为了用Rust写OS实验,不得不经常在黑暗中探索

@张汉东:@彭鑫 我的看法是,unsafe 和 safe 是相辅相成的, safe 是从 unsafe 中抽象而成的。

@张伟:@张汉东 非常赞同;没有unsafe,就没有safe

@戴钎:@彭鑫 unsafe对于Rust来说是不可避免的,原因我认为有两个方面:1、与硬件打交道本身就是“不安全”的,2、其次,目前Rust还没有覆盖到所有的OS基础性支撑,因此有很多FFI的需求,而这些也是unsafe的。

@蓝登峰:@彭鑫 有时候似乎unsafe确实很难避免,涉及到底层抽象和外部调用轮子的时候。这些需要仔细设计将风险尽量控制在局部。真正的风险来自于不可预知的地方,这是显式的unsafe的设计用意。

@韩文弢:@彭鑫 我个人理解是与C++相比,Rust在设计时把一些更加安全的选项推到了前面,而那些可能会伤害自己的选项必须以某种显式的方式标注出来。比如,引用默认是不可变的,必须要写明 mut 才是可变的;再比如 unsafe 也得明确写出来。这跟 C++ 里 const 的标注等形成了设计选择上的对比。

@冯洋:@彭鑫 我认为unsafe的存在其实是“必须”的,因为很多时候,我们需要更加关注性能,或者需要与外部系统交互(FFI)等,这些部分需要处理的问题已经超出了 目前所有权机制可以处理的范围了。

@张汉东:@冯洋 对,因为这个世界是被 C/Cpp 奠基的。

@张汉东:@彭鑫 Rust 标准库里也有 unsafe,为什么说它是 Safe 的 ? 这也是 Rust 初学者一个经典问题了。 

本质原因就是 unsafe 无法避免,但是考虑了各种安全边界条件之后,抽象出一个「安全的光明的岛屿」,就能避免「在黑暗前行」了。

@ 戴钎:@张汉东 非常同意这种思路,我们实践中也是这么做的。

@向勇:@彭鑫 我认为,现在unsafe的代码,找到适合的抽象后也会变成safe的代码。这也正Rust语言演进过程的一部分。

@田洪亮:@彭鑫  RustBelt论文里对safe和unsafe的关系描述的挺好的:任何safe语言都有它无法表达的语言结构,所以Rust引入safe/unsafe的设计使得Rust作为一个safe语言的表达能力得以扩展,这对Rust语言的成功是极为重要的。

韩文弢

我个人对Rust语言印象比较深刻的是零开销抽象和内存安全,使得它特别适合用来进行系统级的开发。同时,语言的生态也已经初具规模,各种库层出不穷。缺点主要是一开始的学习曲线陡峭,以及编译速度较慢。

观点讨论

@彭鑫:@韩文弢 请教韩老师,“零开销抽象”具体怎么理解?

@韩文弢:@彭鑫 引用知乎上的一个回答:零开销抽象一般有两层含义:你不会为没使用的功能付出代价,而对使用了的功能,你也无法手写出更好的代码。

@田洪亮:@彭鑫 这个对零开销抽象的定义来自C++之父。零开销抽象的哲学是Rust从C++那里吸收的

@彭鑫:@田洪亮 原来RUST语言的特性是通过这种迭代化的方式设计的。

向勇:

Rust语言是一个十多年前由个人发起和开源社区主导的编程语言。

我看重的Rust语言特点是开源社区主导、关注并发性能和内存访问安全。开源社区主导可以吸引外部人员参与语言规范的形成和修改;出色和易用的并发机制是为操作系统内核开发带来方便和高性能;Rust语言的生命周期管理机制极大地提高了程序的存储访问安全。

Rust可以像C语言一样,由开发者来完全掌控程序行为,这对内核开发来说是极端重要和必不可少的。

 Rust语言的异步编程机制还处于演进的过程中,在内核中使用异步机制来提高并发性能还有一些限制。

冯洋:

我简单总结了一下Rust语言的发展与优缺点:

Rust语言从最开始的个人项目发展至今,有接近20年的历史;从2006年开始,Rust语言由 Graydon Hoare 作为个人兴趣项目开发。

2009 年,Mozilla 赞助了这个项目,从而推动了它的发展。

2010 年首次公开发布。随后的几年中,Rust 语言的设计和编译器架构经历了多次更新,以提高性能和可用性。

2015 年 5 月,Rust 1.0 版本正式发布,标志着其 API 稳定下来,适合在生产环境中使用。

Rust语言的最大优势在于:

(1)内存安全:通过所有权、借用和生命周期的概念,Rust 在编译时防止各类内存安全问题;

(2)并发编程:Rust 的所有权和类型系统特性使得并发编程更安全,可以有效防止数据竞争等问题;

(3)性能优异:Rust语言性能极其优异,诸多实证研究报告表明其运行效率与 C++ 相当;

缺点:

(1)学习曲线陡峭:Rust 的所有权模型对初学者来说可能比较难以理解;

(2)编译时间较长:Rust 的编译时间相对较长,尤其是在大型项目中。但是目前逐渐采用了增量编译技术,所以可以缓解这个问题;

(3)生态系统还在发展中:虽然 Rust 的生态系统正在快速增长,但与 C/C++ 相比,可用的库和资源仍然较少。

徐辉

我认为Rust的主要特点是安全可靠,它从设计伊始就把安全放在一个核心位置。例如,最为大家熟知的可能是Safe Rust的Ownership和Borrow Checker机制,这一点非常类似强制使用智能指针的C++;另外还有一些Trait Bound这类保障泛型API Soundness的机制,在C++ 20里面也以Concepts开始出现。虽然这些概念未必是最先在Rust语言中提出的,但确是Rust语言与生俱来的。Rust语言尝试从语言设计层面保障可靠性,这与传统的软件测试、程序分析、容错等软件可靠性保障思路都不同,因此也引起了我的关注和研究兴趣。

马全一:

从 Rust 语言社区发展角度看我把 Rust 发展分为两个阶段,最初是 Mozilla 资助下的社区治理模式,奠定了 Rust 语言社区的基础;在 Rust 基金会成立后,进入了到基金会+社区混合治理的模式,关注 Rust 语言发展的同时,也在大力推广 Rust 语言的应用。总的说来 Rust 逐渐走向成熟,成为最受开发者喜爱的编程语言。

Rust 语言是可以应用在很多领域的,并不限定于某一个方面。Rust 语言的核心是通过强大的类型系统保障内存安全,所以特别适用于基础软件领域的开发,譬如操作系统、数据库等大型软件。当然 Rust 还在发展的过程中,Rust 的生态没有办法和其它成熟的语言相比,这是所有开发者遇到的问题。

田洪亮

我们现在所知的Rust语言跟它最初的样子可以说是大相径庭。Rust语言诞生于2006年,但直到2015年才发布1.0版,这中间Rust语言经历了非常大的变化和调整。2013年,Rust才决定去掉GC,取而代之的是现在为人称道的ownership机制;2014年又把Green Threads的特性从标准库移除,因为Rust认识到它的目标场景不能允许它有runtime。所以,我想我们可以这么下结论:Rust语言在设计之初并没有一张成功路线图,而是在成长过程中逐渐摸索出来一个真正属于它的特性和定位:即能取代C/C++的内存安全语言。从0.1版到1.0版,Rust语言用了几乎10年的时间。我非常庆幸和倾佩Rust语言的设计者们坚持到了它成功的那一天,带给计算机世界这么优雅的一门语言。

戴钎 :

我是站在大型复杂涉及底层的软件系统的角度来看待Rust的。Rust的设计目标是提供一种系统编程语言,兼具高性能、安全性和并发性。Rust的核心团队和社区不断发展,2015年发布了1.0版本,标志着语言的稳定性和成熟度。过去十年的微软安全报告中,大约有70%的漏洞是由于内存安全问题引起的,巧合的是,来自Google Android的安全漏洞统计也差不多是这个比例,包括缓冲区溢出、空指针解引用、释放后使用(use-after-free)、双重释放(double free)等。Mozilla作为Rust的重要推手,其工程师也在演讲中介绍了生存期达7年之久的一个顽固bug,基本上也是内存相关。可见对于大型C/C++系统来说,内存安全是一个非常重要的问题,不仅关乎系统本身的安全,也对系统的维护成本有着极为重要的影响。作为从安全性出发的Rust,同时平衡了性能、安全性及硬件访问的能力,从我个人的视角来看,Rust的出现其实为C/C++程序员提供了新的系统级编程解决方案,在这种解决方案下,代码的安全级别会得到极大的提升。

张汉东:

前面老师们都说的挺全面,我来补充一下 Rust 作者 在创建 Rust 语言的动机。 

据 Graydon 在 2012 年的 infoq 采访文章指出, 因为 Graydon 自身的职业关系,他是一名编译器开发者,所以他了解这些语言的优缺点。比如 C/Cpp 性能好,但是它们不安全;Java 语言安全,但是性能不如 C/Cpp,还有一些函数式语言的特性,比如 OCaml/Haskell 。他就想创建一门语言,能融合这些语言的优点,这是他最初的目标。

至于现在Rust 所倡导的安全、并发、高效的编程语言,赋予每个人构建系统的能力,这是逐步发展过来的。准确来说是 Rust 1.0 稳定版正式发布之后确立的。 

我眼里 Rust 的特点如下:

1.无标准内存管理模型而能保证内存安全性。Rust 没有像 Java 垃圾回收器那样的标准内存管理模型,而是通过所有权系统(ownership)和借用检查器(borrow checker)确保内存安全,避免了传统系统编程语言中的许多常见错误,如空指针、悬空指针和数据竞争的同时,还能保证和 C/Cpp 媲美的性能优势。

2.无惧并发:同样基于所有权和强大的类型系统,可以在编译期间检查到多线程数据竞争的风险,从而保证线程安全。并且 Rust 也是唯一一个提供异步并发的系统级语言,对高性能并发场景提供现代化特性支持。Rust 的异步并发也涵盖嵌入式领域。

3.零成本抽象与现代化工程能力:Rust的抽象不会影响性能,允许编写高效且易于维护的代码。虽然不是百分百的零成本抽象,但是 Rust 在朝这个方向努力。相比于 C/Cpp ,Rust 语言的抽象表达能力和工程能力都是非常现代化的,其中最知名的特性就是 trait,是吸取过去几十年 OOP 的教训,采用组合优于继承的思想引入的。

4.Rust 语言只是编译前端,可以后面整合不同的编译后端,比如 llvm / gcc / cranelift ,利用这些编译后端的优势来进行优化和扩大应用平台。

5.强大的类型系统,保证程序的正确性。

Rust 几乎是全能通用语言,基本能做到全栈 Rust :

1.系统编程:操作系统、驱动程序( Rust for Linux)、嵌入式系统()。

2.高性能计算:需要高效处理大量数据的应用,如游戏引擎、图像处理、实时系统。

3.网络和Web服务:由于其安全性和性能,Rust也适合用于构建高性能的Web服务器和后端服务。

4.大模型 AI:大模型基础设施、深度学习框架、大模型训练、ai应用辅助工具等。

5.机器人领域:围绕 ros 相关,数据传输。

6.云原生领域:数据处理、传输、数据仓储等

7.前端基础设施:打包编译工具、前端框架等。

8.GUI 框架:跨平台 GUI 框架

9.应用开发:替代 java/go/python 都能做到。

10.数字金融:量化交易、区块链

(补充一张图)

2c838c94e02d665eb3237b3e2d6ffd1c.png

蓝登峰:

具体历史进程就不赘述了,各位老师的分享了很多细节。每一门编程语言都是在突出地解决了其他语言不能更好解决的实际问题中异军突起的。Rust也不例外,随着网络安全性日益突出、实际系统中安全性和性能的强烈需求成就了今天的Rust语言生态。

在系统架构中对内存安全、高性能、资源受限的项目都是首先可以考虑使用Rust的场景。系统软件特别是IT架构底层依赖的软件都是适合使用Rust来进行开发,比如操作系统、网络通讯层、嵌入式开发、后台服务。

对于一个组织是否采用Rust进行开发,除了技术方面还要考虑在这个项目所在技术领域可获得的依赖Rust组件、框架、工具是否丰富和成熟,这决定了需要自己造轮子或改造轮子的投入和周期。另外就是Rust人才的可获得性。

Rust的主要缺点是学习曲线,对于初学者来说需要更长的时间来掌握,其次,生态系统的完整性和成熟度需要社区的积极参与和持续贡献。

观点讨论

@彭鑫:@蓝登峰 是的,Linux特别是驱动中大量的bug就让大家感觉好像没法接受

Question 2

主持人:如何评估Rust语言在特定项目中的适用性?Rust语言在构建高性能系统软件方面的潜力和挑战是什么?Rust在嵌入式系统、操作系统等底层软件开发中的应用前景如何?Rust语言的应用对软件工程实践带来了哪些变化?在大型软件开发项目中应用Rust语言有哪些最佳实践?

陈渝:

如果特定项目是相对大型的项目,需要高性能、内存安全性和并发安全性,那Rust是一个可以选择的语言。

Rust语言在构建高性能系统软件方面的潜力是:接近C/C++的性能、内存安全保证、并发编程的安全性

挑战是:学习曲线陡峭、编译时间较长、还没形成成熟广泛的生态,某些领域的生态系统仍在发展中。

Rust在嵌入式系统、操作系统等底层软件中,可能聚焦在对安全和性能特别重视的应用场景,如智能机器人、自动驾驶、无人系统等。

Rust语言的应用对软件工程实践带来了一定的变化,比如基于Crate的开发方式,基于组件组合的开发方式等,在编译阶段对安全的重视,引入所有权和生命周期等新的编程关注点。

在大型软件开发项目中,还缺少基于Rust的Killer Application。

观点讨论

@韩文弢: 同意陈老师的观点,Rust的优点很多,是否选用我补充一个观点,从实践角度来说,可能还要考虑遗留代码的问题。

@田洪亮:@韩文弢 所以google给rust基金会捐了100万美元,用于提高rust和cpp的互操作性

向勇:

已有的一些Rust重写项目的结果,在一定程度上说明了Rust语言在系统软件方面的高性能潜力。挑战是会Rust语言的人员还比较少,需要大力的宣传和提供相关的课程资源。目前在高效中开设Rust语言课程的学校还很少。

Rust能进入Linux内核就说明了它在底层软件开发中的应用前景。

一些团队正在尝试用Rust语言来写各种操作系统内核模块,目标是实现内核代码模块的直接复用。希望能看到由此带来的内核开发效率提升。

冯洋:

我认为Rust语言提供了一个包括所有权在内的很强大的“安全编程理念”,来解决了过去很多工程实践编码中的常见问题。

例如,其提供了Some,Panic,Result 等组件以实现“安全编程”的理解,这对于一些安全攸关软件的研发具有极其重要的意义。

而就基于所有权机制的内存安全保障而言,Rust目前的实现从根本上解决了例如内存泄漏等过去在测试中很难检测到的一些bug,这显然是一个很大的提升;而从另一方面讲,Rust语言虽然存在一定的学习难度,但是其践行了一个重要的程序设计理念“错误越早发现其修复代价越小”。Rust将我们需要花在部署后去发现并且修复bug的成本,调整到了编码阶段,这是一个很重要的提升。

另外我认为目前的Rust编程的最佳实践:

从现有的生态系统来看,虽然 Rust 的生态在快速成长,但在某些领域,可用的第三方库仍然不如 C/C++ 丰富。因此在实践中,可以在一些大型项目中,逐渐引入 Rust,例如通过替换一些性能关键的组件来实现Rust的应用。其实现在Linux 就是采用的这个思路。

我认为Rust语言设计和标准库构建中,到处都体现着“安全编程理念”

马全一:

我认为评估 Rust 在特定项目的中的适用性从以下几个角度来分析:

1.  从产品设计的角度看 Rust 语言是否为产品带来价值

2.  从产品的生命周期角度看,Rust 语言的开发效率和维护成本是否符合产品的预期收益

3.  从团队的角度看,切换成本和学习成本是可以接受,是否会影响团队的稳定性

Rust 的内存模型和嵌入式系统、操作系统的内存模型存在差异,对内存的分配和回收如何保证安全是 Rust 面临的一个挑战。就像在问题 1 里面各位老师和专家讲的一样,如何平衡 Safe 和 Unsafe ,对于每个开发者都是一个巨大的挑战。

我认为 Rust 文档功能对于大型软件开发带来很多简便,尤其是文档中的 example 代码是在执行单元测试的时候进行测试,大大保证了文档和代码的一致性。

观点讨论

@蓝登峰:@马全一 领域开发效率确实是一个很重要的因素,Rust具备全栈能力,但对于灵活性要求比安全性要求高的场景,Rust的优势就不够明显了。

田洪亮:

我相信Rust是系统编程的未来。Rust会取代C和C++,正如C/C++取代汇编语言一样。我有15年C/C++语言开发经验,5年的Rust开发经验。我发起了两个基于Rust的开源OS内核项目Occlum和Asterinas,累计编写和评审的Rust代码超过10万行。我可以负责任地讲,Rust确实做到了它的承诺:“Safe, fast, productive --- pick three”。而就我个人感受,用了Rust以后,就再也不想回到C/C++,就像文艺复兴时代的人不愿意回到黑暗的中世纪...

观点讨论

@彭鑫: 声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/913142

推荐阅读
相关标签