一、 引言
随着时代的发展,编程语言已经多到数不胜数,那么再发明一种新的编程语言有什么意义呢?发明一种新的编程语言又能解决什么问题呢?
俗话说的好,“工欲善其事,必先利其器”。在程序员的世界中,编程语言就是他们的“武器”,编程语言不仅是程序员的“武器”,而且还是他们思想的体现。在当今编程语言“百花争艳”的时代,如果一种新语言可以一直发展下去,被程序员所接受,必然有它的优点和过人之处。Rust语言就是这样一门新的编程语言。
二、 Rust语言简介
2.1 Rust的历史背景
Rust语言在2006年作为 Mozilla 员工 Graydon Hoare 的私人项目出现,而 Mozilla 于 2009 年开始赞助这个项目。第一个有版本号的 Rust 编译器于2012 年 1 月发布。Rust 1.0 是第一个稳定版本,于 2015年5月15日发布。
从 2019 年下半年至今,不到一年的时间内,Rust 语言确实接二连三地掀起过一些波澜。从微软探索将 Rust 作为 C 和 C++ 的安全替代方案开始,Rust 吸引了越来越多的目光:内核维护者表示愿意接受用 Rust 开发 Linux 驱动;AWS 也伸出橄榄枝,宣布赞助 Rust;微软更进一步,在今年年初开发并开源了受 Rust 启发的新编程语言 Verona;最近,苹果也站出来拥抱它,将 C 代码移植到 Rust。
2.2 什么是Rust语言?
Rust语言是一门系统编程语言,专注于安全。系统编程语言是相对于应用编程语言而言,系统编程语言意味着更接近于硬件层次,并为上层的应用软件提供支持。
系统编程语言的特点:(1) 可以在资源非常受限的环境下执行,运行时开销很小,非常高效;(2) 很小的运行库,有时候甚至是没有(3) 可以运行直接的内存操作。
目前较为流行的系统编程语言是C和C++,Rust与C和C++类似,相比是增加了安全性。
2.3 Rust语言的特点
(1)高性能-Rust速度非常快且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。
(2)可靠性-Rust 丰富的类型系统和所有权模型保证了内存安全和线程安全,让您在编译期就能够消除各种各样的错误。
(3)生产力-Rust 拥有出色的文档、友好的编译器和清晰的错误提示信息, 还集成了一流的工具 —— 包管理器和构建工具, 智能地自动补全和类型检验的多编辑器支持, 以及自动格式化代码等等。
2.4 Rust语言架构
上面的思维导图包含了详细的学习内容和路线。学习之前必不可少的肯定是安装开发环境。在官网中有安装包和详细的安装教程,就不过多赘述。
官网地址放在这:安装 Rust - Rust 编程语言 (http://rust-lang.org)。
对于这样一个简单的示例程序,我们直接使用rustc即可,执行该程序我们就可以在控制台上看到”Hello world!”字符串。我们简单的hello world程序就执行完成了。
我们简单分析一下这个简单的程序:
(1) fn(function的缩写)是一个关键字,函数定义必须用这个关键字开头。(2) 函数体使用大括号包含。(3) 默认情况下,main函数是可执行程序的入口点,它是一个无参数无返回值的函数。(4) 局部变量申明用let关键字开头。(5) 最简单的标准输出是使用println!宏来完成。后面的感叹号,它代表这是一个宏,而不是一个函数。而且需要注意的是Rust语言中的宏与C/C++的宏有很大的差别,可以说是完全不一样的东西。(6) 每条语句也是通过分号结尾,与C/C++的语法规则是一样的。虽然说Rust是一门新语言,但是与C有很对相似的地方。熟悉C/Java/JavaScript等语言的朋友,如果要是学习Rust语言的话,应该会很快入手的,因为你会经常看到你熟悉的东西。这一点对于开发者来说还是很友善的。
四、 Rust语言的优缺点
优点:前面提到了一些Rust语言的特点,可以说它的特点就是它的优点。首先必须要提的肯定是安全方面了。
(1)传统的系通编程语言开发过程中,会出现因内存错误导致的bug或者是崩溃。比如空指针、野指针、内存越界、段错误等等。这些错误我们经常提起,平时开发时也会时常遇到,各路大神不断总结经验、开发调试工具,但并不能彻底解决这些问题。Rust语言是可以保证内存安全的系统编程语言,这是它独特的优势。与 C/C++ 语言相比,使用 Rust 语言来进行程序设计可以有助于从源头预防出现诸如空指针,缓存溢出和内存泄漏的内存问题。(2)在计算机单核性能越来越接近瓶颈的今天,多核并行成了提高软件执行效率的发展趋势。在强大的内存安全特性的支持下,Rust很好的解决了并行条件下的数据竞争问题,保障了线程的安全。(3)其次就是高性能运行效率极高,与其他语言相比之下,Rust的运行效率较高。
缺点:俗话说的好“人无外人”,一门编程语言也不可能是完美的,肯定会有它的不足或者是局限性。(1)Rust编译起来比较复杂,对新人不是很友好(2)库不完善,生态环境较弱(3)为了做到编译时捕捉大部分错误,给予了 programmer 很少的自由
五、 Rust语言的应用
5.1 Rust语言的应用范围
(1)Rust编译器可以直接生成目标可执行程序,不需要任何解释程序,可用于传统命令行程序。(2)Rust 同时具有JavaScript 一般的高效开发语法和 C 语言的执行效率,支持底层平台的开发,可以用于开发嵌入式设备。(3)Rust 用极低的资源消耗做到安全高效,且具备很强的大规模并发处理能力,十分适合开发普通或极端的服务器程序,可以用于开发网络服务器。(4)Rust 可以被编译成 WebAssembly,WebAssembly 是一种 JavaScript 的高效替代品。
5.2 Rust语言的应用示例
Rust是一门通用的高级系统编程语言,其应用领域基本可以同时覆盖C/Cpp/Python/Java的应用领域。具体而言,Rust的应用领域目前可以覆盖到以下领域:数据服务领域(数据库、数据仓储、大数据等等),云原生(机密计算、容器、分布式计算平台等等),操作系统、工具软件等领域。不管是在国内还是在国外,Rust语言的应用非常广泛,发展前景非常得好。下面看几个国内外的实例深入了解一下Rust语言的应用。
首先我们先看一下Rust在国外公司的应用和开发者的使用。
(1)Timely Dataflow(实时数据流)
Timely Dataflow是http://clockworks.io 公司的开源产品。在分布式系统中对流式数据进行复杂的处理,比如多次迭代或者递增计算是非常困难的。Timely dataflow 给出了一个完全基于时间的抽象,统一了流式计算和迭代计算。当你需要对流式数据并行处理且需要迭代控制的时候,可以使用 Timely Dataflow 。Rust代码量大概有13000行,主力开发人员4人,社区贡献者30多人。
(2)Krustlet(开源工具)
微软 Deis Labs发布了Krustlet,它是使用 Rust 实现的一种Kubernetes kubelet。Krustlet是在 Kubernetes上运行 WebAssembly 工作负载的工具。它就像 Kubernetes集群中的节点一样。Krustlet 通过在事件流上侦听调度程序根据特定的 Kubernetes 容忍度为其分配的新 Pod 来充当 Kubelet。当用户计划具有特定节点容忍度的 Pod 时,Kubernetes API会将该工作负载计划到 Krustlet 节点,然后 Krustlet节点将获取模块并运行该模块。Rust代码量一共21000多行,主力开发人员7人,社区贡献者有32人。
(3)Ripgrep(终端文本搜索)
ripgrep 是一个以行为单位的搜索工具,它根据提供的pattern 递归地在指定的目录里搜索。它是由 Rust 语言写成,与其他同类工具比较,它的主要亮点就是速度快,非常的快。ripgrep 目前已经成为 Linux 下最快的文本搜索工具。它一共有35000行Rust代码。
除了上述的三个例子外,国外还有很多用Rust语言编写的开发工具和很多好的开源项目。在国内Rust的发展也是相当的好,接下来我们了解一下Rust在国内的应用现状。
(1) 飞书APP
飞书软件我们很多开发者都很了解,甚至一直在使用。字节跳动旗下的飞书在国内应该属于最大的Rust开发团队之一了。飞书在客户端跨平台组件中使用了Rust,据说代码量有55万行代码(包括测试和生成代码)。
(2) TiKV
TiKV是一个开源的分布式事务数据库,专注为下一代数据库提供可靠、高质量、实用的存储架构。目前,TiKV已经在知乎、美团、京东云等多家企业上线应用。TiKV项目包含Rust代码大约30万行(包括测试代码),TiKV是全球性开源项目。
(3) 华为
华为在2021年加入Rust基金会,旨在为Rust在全球推广和发展做出贡献。目前一些开源项目和内部试点项目使用了Rust,以及为Rust生态作出了贡献。目前华为也正在为大规模使用Rust做准备。除了上述的示例之外还有很多公司或者是项目团队应用了Rust语言,可谓是发展前景非常的好。
六、 推荐的Rust书籍
为了大家更好地学习和了解Rust语言,推荐一些Rust相关书籍。
1、第一本就是《深入浅出Rust》
本书详细介绍了Rust语言的基础语法,穿插讲解一些高级使用技巧,一步步加深对Rust语言的认识和了解。
全是总共分为五部分,第一部分就是详细的基础知识介绍,基础知识是非常重要的,要想学好一门语言,基础知识必不可少。第二部分内存安全,这可是Rust语言的“招牌”,也是本书的核心和重点。第三部分是高级抽象,介绍Rust的抽象表达能力。它支持多种编程范式,以及较为强大的抽象表达能力。第四部分是线程安全,介绍了并发模型,并行编程是提高效率的重要因素。第五部分是实用设施也是文章的结尾部分,简单介绍Rust语言的工程实用性。《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: 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具有与其他语言编写的组件进行交互以帮助实现模块化内核体系结构的能力。
来源:Source:https://hacks.mozilla.org/2017/08/inside-a-super-fast-css-engine-quantum-css-aka-stylo/
WebAssemply通过将已编译的代码带到浏览器来向Web应用程序添加新功能;WebAssembly允许你采用以编译语言编写的功能,例如:C ++和Rust,并在Web浏览器中安全地运行它。
另外也可以参考美国社群应用Reddit上Sub-Reddit调查(r / adventofcode),其中Rust在Python之后排在第二位。
rust是内存安全第一的语言,性能也不比C差多少,适用于需要高可用性的嵌入式系统,如用于火箭控制软件等出错会造成重大损失、手术机器人控制软件出错会死人,这些领域最适合。rust还适用于基础软件如操作系统、各种工具软件的开发。
rust不太适合需要大团队成员合作的应用软件特别是各业务领域定制应用的开发,这些领域面向对象语言更合适,比如C++这样适合业务逻辑应用开发的语言。rust是函数式语言,它更适合偏技术逻辑的程序开发,rust的语法限制很多,都是针对技术逻辑的。每门编程语言都有它合适的应用领域,想用适合一个领域的编程领域去替代适合另一领域的编程语言是愚蠢的。
所以问题应该是rust会成为嵌入式系统和基础软件的编程语言主流吗?个人认为会的,但还要较长时间。
头条居然也能看到有人问rust的问题,作为很早关注rust的人,来回答一下吧。
我们先回顾下现有的主流编程语言。现在编程语言其实很多,但是可以看到大致趋势是怎么样的。最早都是静态类型的编译型语言,比如c,java,pascal之类,后来出现了动态语言,比如php,python,js。动态语言的出现是有积极意义的,
不需要考虑内存分配,降低了内存错误的可能性
弱类型或者自动转换类型,不需要考虑类型,容错性更强,降低了编写代码的难度
代码一般是源码形式,发布更容易
但随着使用越来越多,坏处也越来越明显。最重要的一个就是:无法保证类型,一方面无法约束使用者写代码,导致可能隐藏一些错误的类型传入,另外一方面也无法进行有效的代码提示。而且因为往往有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这类型语言的天下。
很高兴能回答这个问题
Rust语言最重要的特性是内存安全,会检测内存是否安全。这个内存安全问题,是自计算机诞生以来困扰广大程序员的一个很大的问题,动不动就程序崩溃,系统跑着跑着出现内存泄漏,这些问题自从Rust出现,仿佛找到了解决良药。目前很多大厂也在尝试着用Rust做新项目,但是历史的原因,其他语言积累非常深厚,历史代码库非常庞大,就算是微软这样的巨头,也是不可能马上立即替换。再说RUST这个语言学习坡度要比其他语言大很多,目前程序员群体使用的相对来说还是很少,其他公司用的更是少之又少。
综上所述,这个成为主流还是未知数,我的判断可能性比较低。
编程语言未来的特点是可读性好,简洁,编程效率高,模块化编程语言,例如python。
rust语言,形如c++,可读性差。
具有指针,编程不简洁。
内存不能自动回收,注定只能局部流行。
模块化的倾向也不好。
所以rust发展的结果,可以参考c++,可能在局部流行起来,比如系统工具类软件的开发。
然而,Rust 编程语言在过去几年中获得了相当大的关注和认可,并且其在安全性、并发性和性能方面的特点使其在开发者社区中备受推崇。
Rust 具有内存安全性、数据竞争检测和零成本抽象等特性,这使其在系统级编程、嵌入式开发和网络服务等领域具有广泛的应用潜力。它的语法简洁、模式匹配和并发编程支持也受到了开发者的喜爱。
虽然 Rust 目前在某些领域中仍然相对较小,但其受欢迎程度正在不断增加。一些大型技术公司,如Mozilla、Microsoft和Amazon等,已经开始在一些关键项目中采用 Rust。此外,Rust 社区也在不断发展,提供了丰富的库和工具生态系统,以支持各种应用场景。
然而,编程语言的流行程度不仅取决于其技术特性,还受到社区支持、工具链、生态系统和开发者的偏好等多个因素的影响。其他编程语言如C++, Python和Java等仍然在广泛使用,并且拥有庞大的生态系统和大量的现有代码库。
因此,要判断 Rust 是否会成为主流编程语言,需要考虑多种因素,并且需要时间来观察其发展和采用情况。不过,Rust 作为一种现代、安全、高性能的编程语言,具有很大的潜力,可能在未来继续赢得更多开发者的青睐。
简要地说,不会,因为难度在那里,主流也看怎么定义:用的人多就算主流那python也是主流。门槛决定了有经验的人需要深入,就可以用Rust,每种语言都是服务于项目的,根据实际需求选择适合的语言。
C++大而灵活,提供了最全的工具或者自己造轮子的机会,多范式,特性也多,也正是这些原因,对开发人员的要求很高,否则报错太多,开发体验并不好。所以后面出现了go、rust这些语言,rust用最严格的编译器检查,配合生命周期等,把内存错误提到编译时了。可以说只要能编译通过,上线基本不会有大问题。总的来说,C++需要功力深厚的人才能发挥他的最大价值,而rust开发体验要更好,更安全,最重要的是性能媲美C++/C!这点很重要。
所以我觉得rust会成为C++/C选手改善工程的法宝,而不是独自受欢迎成为主流
本文由作者:华为云开发者联盟 于 2024-02-03 发表,原创文章,禁止转载。
本文链接: https://app.yangtata.com/question/7320520468992131365.html