{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

未来Rust编程语言会成为主流吗?

DeanDean 回答5 收藏1
收藏问题

5条回答

Yuqi

Yuqi

回答于2022-06-22 18:58

《2021年将成为系统程序员的“RUST”年》——Rust提供了业界创建安全系统编程的最佳选择

Rust是一种开源系统编程语言,专注于速度、内存安全性和并行性。 Rust编程语言作为C、C++和其他语言的替代方案,以此来改善应用程序的安全状况 Rust旨在利用高级语言的能力来满足低级系统编程的需求。

未来Rust编程语言是否会成为主流,这需要了解Rust的过去和以后动向:

  • Rust的2021动向
  • 对于已过去的2020年,关于Rust你需要知道些什么


最近几年来,Rust积攒了很多粉丝,这不是毫无原因的——

对于满足系统编程需求,C++是个选择,而Rust旨在成为其可靠的替代品。实际上,它解决了C++中许多固有限制,例如:内存安全和线程安全问题,这些问题通常会导致令人厌烦的的分段错误。 Rust旨在利用高级语言的能力来满足低级系统编程的需求。

在许多情况下,内存安全错误已成为安全漏洞的根本原因。从一定的视角下,请考虑一下这个数字–“ Microsoft的所有CVE中,大约70%是内存安全问题”。 C/C++程序员一直都在遇到与内存相关的错误——使用未初始化的内存、基于“释放”内存后使用、缓冲区溢出。另一个棘手的错误源是数据争用(data races)和竞争条件;基于进行读/写的顺序对数据的不可预见的使用。

Rust是一种开源系统编程语言,专注于速度,内存安全性和并行性。三个词定义了Rust:安全,并发和快速。其目的是防止首先引入内存安全错误。


一个简单示例的截图,显示Rust在编译时如何捕获内存错误;而实际场景更加复杂,这是内置功能应派上用场的地方。

Rust在编译时如何捕获内存错误,数据源Source: Talk by Steve Klabnik (@SteveKlabnik)

尽管现代变体引入了更多的保护措施,但C++并不是一种内存安全的语言,鉴于使用C/C++构建了许多核心平台组件,这样说一点也不过分。



谁在使用Rust?


目前在使用Rust这门语言的产品及大厂,数据来源:Source: Ryan Levick’s presentation


说到利用Rust开发的应用,目前进行中的至少可以拿出两个:

  • 操作系统作为系统程序的示例
  • Firefox Servo作为高并发的示例

Amazon Firecracker,是一种支持AWS Lambda和AWS Fargate的开源虚拟化技术,它是用Rust编写的;目的是利用Rust的线程安全性并防止可能导致安全漏洞的缓冲区溢出错误。

与此有关AWS服务包括Amazon Simple Storage Service(Amazon S3),Amazon Elastic Compute Cloud(Amazon EC2),Amazon CloudFront,Amazon Route 53。

操作系统

AWS推出了Bottlerocket,这是一个用Rust编写的基于Linux的容器操作系统,Bottlerocket仅包含运行容器的基本软件,从而可以提高资源利用率并减少攻击面。

Google Fuchsia OS的TCP/IP堆栈是用Rust编写的。Fuchsia具有模块化的内核体系结构,其中一些组件是用C ++编写的,一些组件是用Go语言编写的,其他组件则是用Rust语言编写的。这说明Rust具有与其他语言编写的组件进行交互以帮助实现模块化内核体系结构的能力。

数据来源:https://blog.quarkslab.com/playing-around-with-the-fuchsia-operating-system.html


Firefox

在其新的CSS引擎(Quantum CSS)中,Firefox利用了Rust内置的编译时支持并行性。Web浏览器为背景的并行性,意味着你正在尝试并行呈现网页的所有不同部分;要知道并行性是很困难的,因为它引入了“竞赛条件”(Race Conditions),这些条件难以识别且难以排除。

这就是Rust发挥其威力的地方,Rust编译器静态验证代码以防止在编译期间出现竞争状况。

来源:Source:https://hacks.mozilla.org/2017/08/inside-a-super-fast-css-engine-quantum-css-aka-stylo/


WebAssembly

WebAssemply通过将已编译的代码带到浏览器来向Web应用程序添加新功能;WebAssembly允许你采用以编译语言编写的功能,例如:C ++和Rust,并在Web浏览器中安全地运行它。

Rust提供了业界创建安全系统编程语言的最佳机会。——微软 Ryan Levick




最后,回顾下,2020年关于Rust发生了什么变化

Rust最初被认为是Mozilla研究项目,直到最近才成为[开源Rust]项目的唯一官方赞助商。然而,在2020年8月,它解雇了250人,其中包括积极参与Rust项目和Rust社区的部分人。

(一些Rust维护者正在加入Amazon和Facebook,领导他们新创建的Rust团队。Niko Matsakis( @nikomatsakis)加入了亚马逊,Patrick Walton(@pcwalton)加入了Facebook,成为Rust团队的技术负责人。此外,Rust基金会正在公司化成为一个独立实体成立,但尚不清楚发起人是谁。目前的赞助商名单包括Sentry、GitHub、Google Cloud、Amazon Web Services、Mozilla和Microsoft。GitHub和Azure托管repo存储库和CI基础结构。

与众不同的Rust

  • 与Java不同,Rust的设计不需要垃圾收集器。不需要垃圾收集器意味着你不会受到运行时性能的损失,尤其是在低功耗硬件上。
  • 编译时验证以确保线程安全和内存安全。 我认为这是最重要的区别因素,因为你不再依赖运行时检查。
  • 系统编程应将异常处理移至编译时,并避免程序员犯错误在先。不允许为Null,也不支持例外。
  • 即用的软件包管理器可以与生态系统的其余部分集成(非常类似于Python),但是以前系统编程语言是没有有此功能的。
  • 零成本抽象。什么意思呢?也就是说,由于抽象的系统开销,高级语言的性能和安全性通常需要权衡。 这会联想到引用计数的指针和运行时检查。

关于Rust的温馨提示

尽管Rust语言有诸多好处,但诚然其陡峭的学习曲线是不可避讳的。

此外,机构组织恐怕不太会利用Rust重新编写现有软件系统,而宁愿使用它来构建和当前生态系统作集成的新组件,因此,跨库组件和工具链的互操作性成为重要的考量因素。

Rust社区

过去的五年中,Rust在StackOverflow上的开发者调查问卷中一直是最受欢迎的编程语言,位居榜首。

例如,在2020年调查中,有86.1%的开发者正在使用该语言或技术进行开发,并且表示有兴趣继续选用该语言。这几乎是C ++收到的票数的两倍!

另外也可以参考美国社群应用Reddit上Sub-Reddit调查(r / adventofcode),其中Rust在Python之后排在第二位。

评论0 赞同0
  •  加载中...
littleGrow

littleGrow

回答于2022-06-22 18:58

很高兴能回答这个问题

Rust语言最重要的特性是内存安全,会检测内存是否安全。这个内存安全问题,是自计算机诞生以来困扰广大程序员的一个很大的问题,动不动就程序崩溃,系统跑着跑着出现内存泄漏,这些问题自从Rust出现,仿佛找到了解决良药。目前很多大厂也在尝试着用Rust做新项目,但是历史的原因,其他语言积累非常深厚,历史代码库非常庞大,就算是微软这样的巨头,也是不可能马上立即替换。再说RUST这个语言学习坡度要比其他语言大很多,目前程序员群体使用的相对来说还是很少,其他公司用的更是少之又少。

综上所述,这个成为主流还是未知数,我的判断可能性比较低。

评论0 赞同0
  •  加载中...
Freelander

Freelander

回答于2022-06-22 18:58

编程语言未来的特点是可读性好,简洁,编程效率高,模块化编程语言,例如python。

rust语言,形如c++,可读性差。

具有指针,编程不简洁。

内存不能自动回收,注定只能局部流行。

模块化的倾向也不好。

所以rust发展的结果,可以参考c++,可能在局部流行起来,比如系统工具类软件的开发。

评论0 赞同0
  •  加载中...
warkiz

warkiz

回答于2022-06-22 18:58

在安全领域 例如底层中间件 数据库,我认为rust优势很大

评论0 赞同0
  •  加载中...
stormzhang

stormzhang

回答于2022-06-22 18:58

我们居然也能看到有人问rust的问题,作为很早关注rust的人,来回答一下吧。


我们先回顾下现有的主流编程语言。现在编程语言其实很多,但是可以看到大致趋势是怎么样的。最早都是静态类型的编译型语言,比如c,java,pascal之类,后来出现了动态语言,比如php,python,js。动态语言的出现是有积极意义的,

  1. 不需要考虑内存分配,降低了内存错误的可能性

  2. 弱类型或者自动转换类型,不需要考虑类型,容错性更强,降低了编写代码的难度

  3. 代码一般是源码形式,发布更容易

但随着使用越来越多,坏处也越来越明显。最重要的一个就是:无法保证类型,一方面无法约束使用者写代码,导致可能隐藏一些错误的类型传入,另外一方面也无法进行有效的代码提示。而且因为往往有gc,性能不行,以及无法编写准实时,实时系统。


所以,新推出的语言往往都融合了语言研究的新成果,试图解决这些问题。

怎么样才能融合静态语言和动态语言的好处,规避短处呢?函数式语言的研究里,经常有类型推导,抽象数据类型(ADT),都是好东西,正好能解决这些问题。尤其是编译器构建工具llvm出现之后,编译器构建越来越简单。现在很多新语言都建立在llvm之上,简化开发,把重点放在语言语法的优化上。rust也是使用了llvm,还有apple的新语言swift,也是建立在llvm之上。


rust支持ADT,支持类型推导,可以和动态语言一样不用写类型,让编译器自动推导。同时静态类型又可以在编译期检查出大量的类型错误,没有gc可以写实时应用。可以说是融合了传统静态语言和动态语言的优点。


而且rust这个语言呢,主打的是内存安全。内存安全这块,如果不是写底层的人可能感触还不深,但是如果经常写这类代码的,估计能感觉挠到痒处了。传统为了实现内存安全,需要大量用锁,但是rust在编译期内,根据变量的生命周期,可以判断是否内存安全,使得程序在内存安全的同时性能也更高。mozilla的新浏览器内核servo即是用rust开发的,可以说是一个非常大的项目了,验证了rust语言本身。实际servo现在的测试版本,页面渲染出错比传统浏览器更少,性能却更强悍,并发式渲染页面是以往语言难以实现的。


其实rust这样的,静态类型,类型推导,ADT,无gc的新型语言,其实是非常强大的,可能更类似于传统的函数式语言,所以一些传统c系语言的开发者难以接受。但实际上,可以看到,apple的swift也是类似的。说明这应该是编程语言发展的大方向。

其实现在各种语言也在试图改进这些缺点,比如python和php也增加了类型标注,java也增加了一些类型推导的语法。但是这些老语言包袱太重,需要一个更为彻底的改进。


结论:就算rust不能成为未来的主流,它也会有一席之地。同时,因为语言发展的大方向如此,之后主流也必然是rust这类型语言的天下。

评论0 赞同0
  •  加载中...

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<