当前位置: 首页 > news >正文

为什么 Rust 是编程的未来?

bda1b9b97757f844cbe9daeac3749855.gif

作者 | Scalac

译者 | 弯月

出品 | CSDN(ID:CSDNnews)

2020年 Stack Overflow 的调查报告显示,Rust 名列最受欢迎编程语言的榜首,86% 的开发人员表示今后会继续使用该语言。其实,这并不是什么新鲜事,自 2016 年以来,Rust 一直在该调查报告中名列前茅。Tiobe 指数也显示,Rust 的受欢迎程度持续上升,9 月份的时候达到了最受欢迎编程语言的第 18 名。在我们针对情感分析函数式编程语言的排名中,Rust 也获得了第一名。

Rust 由前 Mozilla 开发人员 Graydon Hoare 于 2006 年创建,目的是代替 C++,如今 Rust 在全世界开发人员中的人气越来越高。Rust 可用于编写 Web 应用程序、嵌入式计算机、分布式服务或命令行。科技巨头微软也正在慢慢地从 C++语言(由于安全问题不断增加)转向 Rust,这无疑是 Rust大受欢迎的最佳证据。

为什么 Rust 在程序员中的人气如此之高?为什么他们不选用其他编程语言?主要原因之一是,Rust解决了许多其他编程语言所共有的问题,有些开发人员甚至说 Rust 的创建者一定考虑到了 C++ 中所有潜在的问题。究竟是什么让 Rust 如此独特,我们是否应该学习Rust?下面,我们就来谈一谈我们认为 Rust 是编程未来的五个原因。

ce2ef447b7548b3a80b13bc82e270c43.png

1

Rust与其他编程语言

 与其他众多广为人知的编程语言相比,Rust 有一些明显的优势。

Rust与 C++

与 C++ 相比,Rust 的安全性高出很多。Rust 既能保护自己的抽象,也能保护开发人员创建的抽象,而 C++ 这两方面都做不到。C++ 中某些错误会导致不可预测的行为,而 Rust 则可以帮助你专心做好重要的工作。虽然 C/C++ 仍然是最流行的编程语言之一,但二者也有一些不可避免的问题。

另外,Rust 更容易上手,学习曲线不是很陡峭。Rust 没有 C++ 那样的技术债务,并发性更容易实现,而性能与 C/C++ 也差不多。Rust 允许程序员编写不安全的代码,但在没有特别指明的情况下只允许安全的代码(如果你选择编写不安全的代码,则可以在 Rust 中使用 unsafe 关键字)。

Rust与 Java

Java的速度远不如 Rust。此外,Rust 的启动速度更快,占用的内存更小。Java 使用垃圾回收进行内存管理,这会降低性能(尽管这可以降低编程的难度)。

Rust与 Python

Rust的设计更好。Rust 允许将多条语句放入 lambda 中,这样一切都可以用表达式表示,因此更容易创建语言的特定部分。而 Python 缺少这样的支持。Rust 没有类,所以面向对象不如 Python 发展得那么好。

此外,Python 还需要编写很多测试,有时还会发生系统停机或运行时崩溃。Rust 更便于识别和修复 Bug。

Rust与 Go

Go缺乏表现力。Rust 有一个灵活且富有表现力的系统,允许定义新的容器类型,容器类型可以容纳不同类型的元素、泛型、特征、代数数据类型。在 Go 中,开发人员对资源和内存的控制能力更弱。


2

为什么说 Rust 是未来


1.Rust 提高了内存安全性

长期以来,困扰开发人员的最大问题之一就是内存管理。其他语言中很容易错过某些代码问题,而这反过来又会产生可怕的错误代码,查找和修复这些错误需要花费大量时间。一个更大的问题是,代码中的错误会导致安全漏洞,在当今世界,安全漏洞可太危险了。大型网站或应用程序中的数据安全漏洞事件频频发生。原因往往是应用程序漏洞或配置错误。

Rust提高了内存安全性。Rust 代码不能有任何悬空指针、缓冲区溢出或任何其他类型的与内存相关的错误。开发人员可以定义应该如何管理内存以及如何将值放入其中,既可以管理内存、保证安全性,又不会损失性能,这是 Rust 的一个巨大的优势。

提高内存安全性是 Rust 开发人员的主要目标之一,也是该语言最重要的卖点。Rust 的代码编译器非常严格,每一个变量或内存地址都会被自动检查。如果发现任何语法错误、空值、悬空修饰符或内存安全问题,Rust 就不会编译代码,并通过警告显示不安全的代码,以便开发人员快速发现和修复主要问题。那么,Rust 是如何实现这一点的呢?

在 Rust 中,每个值都有“所有权”。当传递或返回一个值时,所有权就会被重新分配到某个作用域,而且只会分配到一个作用域。如果值的“所有者”离开该作用域,则该值将被删除。Rust就是通过这种方式跟踪内存,自动释放内存,并防止所有 bug 进入主代码。这意味着在运行时不会发生意外!该系统将在编译时分析内存管理,帮助开发人员更快地识别和修复 bug,因此也不需要使用垃圾收集。

但内存管理不止这么简单。高级系统常常涉及大量的计算密集型工作,而且还会创建大量的临时内存。这种负载会对 Java 虚拟机性能产生负面影响,而且许多编程语言(包括 Scala)根本无法处理它。

然而,Rust 却可以。Rust不需要管理内存,也无需使用像闭包之类的现代便利特性,就能支持编写有效使用内存的代码,而且运行时开销小到几乎没有,因此可用于实时或嵌入式项目,而且也可以与其他语言或项目轻松集成。

2.不断发展的社区

虽然 Rust 社区和库的数量远不及 C++ 等,但随着 Rust 语言的日益流行,加入社区的开发人员和爱好者也在不断增加。社区创建的框架、库和开发工具的数量已经接近 5.7万,并且每天都在增加。

除了不断增长的工具和框架库之外,Rust 还有一个活跃且受欢迎的社区。无论你需要解决某个问题,还是想寻找使用 Rust的技巧和窍门,都可以通过社区获得帮助。除了社区聊天和用户论坛,Rust 还有一个活跃的 reddit 子论坛。

下面是几个新兴的社区项目:

● redox:用 Rust 编写的操作系统;

● cgmath:线性代数和计算机图形库;

● Iron:并发 Web 框架;

● Doom renderer。

3.Rust 的速度非常快,而且非常灵活

Rust是一种速度非常快的编程语言,它的运行速度比 Scala 还快,尤其是在一些重视性能的任务中,Rust 尤为突出。在某些领域,Rust 的运行速度甚至比 Scala 或 Java 快三倍。

此外,挑选和使用 Rust 的外部包也很容易,而且 Rust 的打包构建工具也让编写代码变得非常简单。

Rust之所以这么快,原因有几个:

● 它是静态类型的编译语言,编译器可以优化代码,以提高速度;

● 提供 trait 的静态调度:类似于 C++ 模板,但更清晰;

● 明确跟踪变量的所有权。不会假设任何带有地址的变量随时都可以修改,因此可以在不对代码产生负面影响的情况下进行优化;

● 默认变量是不可变的(因此优化更容易);

● 提供了代数数据类型,也很适合优化;

● 存储数据没有任何开销,没有运行时或由于缺乏垃圾收集而突然暂停;

● 提供了零成本抽象。

Rust不仅便于优化,而且开发高级功能也很轻松。

4.使用广泛

Rust不仅性能优异,而且还提供了安全的执行环境;虽然 Rust 是高级函数式编程语言,但可以进行底层的优化。

你可以认为 Rust 是一种低级语言,适合各种系统,尤其是嵌入式或其他注重性能的系统。据说,它还被用于 3D 视频游戏开发。

为什么 Rust 广受全世界开发人员的喜爱?首先,你可以编写出永远不会出错的代码,因为编译器会检查所有内容。其他编程语言在运行时检测到的问题不会出现在 Rust 中。我们可以使用 Rust 编写出安全、高效的抽象,而且它的安全性几乎消除了使用不变性的需求。

许多人认为 Rust 是一种注重性能、速度和安全质量的新兴创新编程语言。

Rust是一种流行的加密货币和区块链编程语言,因为 Rust 易于理解和学习,在保障性能的同时还提供了安全性。此外,Rust 还为这些开发人员提供了工具,让他们更快地交付代码。选择 Rust 编写的加密货币不太可能崩溃,而且比使用其他编程语言更安全。

5.很多大公司都使用 Rust 

尽管 Rust 是一种相对年轻的语言,但在提高编程安全性和易用性方面,Rust 已成为很多开发人员的首选。此外,不仅开发人员对 Rust 感兴趣,一些公司和企业,尤其是大型公司,也已经使用 Rust 或正在计划使用 Rust。于今年 5 月份举行的AllThingsOpen 虚拟会议上,Ryan Levick(微软云开发倡导者)表示,Rust 作为一种语言是“业界正面解决多个问题的最佳选择”。虽然微软不打算在近期内放弃使用 C++,但他们的许多基础设施正在慢慢转移到 Rust。

除了微软之外,还有很多公司也都意识到了改用 Rust 的潜在好处,比如Dropbox、Sentry、亚马逊和 Mozilla 等。


3

总结

总的来说,Rust 有很多优势,因此该编程语言广越来越受欢迎。Rust 解决了一些令开发人员十分头疼的问题,它不仅保持了高水平的性能优势,而且还可以保障安全性。随着越来越多开发人员和 IT 领域的大公司认识到 Rust 语言的潜力,可以毫不夸张地说,有朝一日 Rust 将成为现代社会最常用的编程语言之一。

4

推荐阅读

d7b7fe8693b8aab3e9640f0fc539ec31.png

01

《Rust编程:入门、实战与进阶》

朱春雷 著

b503bd482819fdf6cfcabd294e9dd767.png

推荐理由:Web3metaLabs创始人兼CTO/Polkadot大使撰写,语法与编码能力训练并重,精选39道LeetCode高频算法面试真题。是一部注重编码能力训练的实战性著作,既能帮助读者扎实掌握Rust的主要语法知识并具备实战能力,又能指导读者快速从初学者晋级为高手。

388828258e9d9d3ee4b22e2a3fec66b3.png

02

《Rust实战:从入门到精通

62ad8082001c2f3a7c59984d8a9e0020.png

[意] 卡洛·米拉内西(Carlo Milanesi) 著

卢涛 李颖 译

推荐理由:Rust开发社区贡献者编写;通过大量代码示例详细解析Rust语言的各种特性,带你轻松入门Rust编程。阅读本书只需了解基本的编程知识——最好是有C或C++的基础知识,就可以完成本书的学习。

参考链接:

https://medium.com/scalac/5-reasons-why-rust-is-the-future-7ac731085339

7714bad43ab2c70a93e32c30af1221bc.gif

0dece44cd577986f9822e97e51f82730.png

扫码关注【华章计算机】视频号

每天来听华章哥讲书

61325da780e0f12fe72a50ff958279f5.gif

更多精彩回顾

书讯 | 11月书讯(上)| 拿下这些新书,赢在起跑线

书讯 | 11月书讯(下) | 拿下这些新书,赢在起跑线

资讯 | 什么是ETL?一文掌握ETL设计过程

书单 | 8本书助你零基础转行数据分析岗

干货 | 终于有人把云计算与数据库的关系讲明白了

收藏 | 盘点云原生的5大特征

上新 | 【新书速递】产品经理应该知道的72件事

赠书 | 【第80期】浅谈如何成为技术一号位?

c1163b95e0d08d43e815e5ea739887ab.gif

a17ac02f4e57a1c38e188f14741146e3.gif

点击阅读全文购买

相关文章:

  • 四种代码洁癖类型,程序员看了直呼内行
  • JavaScript成最受欢迎的编程语言,社区规模近 1650 万
  • 微软不会放弃Electron:Electron 快速入门及IPC 通信
  • 什么是边缘计算?它是怎样火起来的?终于有人讲明白了
  • 进阶必看的 RocketMQ ,就这篇了
  • 深度解析用户画像标签体系构建方法
  • 【第81期】4道题测试一下,你适不适合做产品经理
  • 【新书速递】你不知道的LevelDB
  • 手把手教你写一个迷你 Webpack
  • 聊聊“企业架构”这个连很多IT老兵都陌生的词
  • 【新书速递】解决方案架构师修炼之道
  • CPU可以跑多快?地球到火星的距离告诉你!
  • 解析OpenShift的存储规划
  • 12月书讯(上) | 冬夜寒冷,读书暖心,华章科技上新啦!
  • IEEE发布2022年科技趋势全球调研:人工智能和机器学习、云计算及5G将成为下一年最重要的技术...
  • hexo+github搭建个人博客
  • [nginx文档翻译系列] 控制nginx
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Angular 响应式表单 基础例子
  • ES6 学习笔记(一)let,const和解构赋值
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • orm2 中文文档 3.1 模型属性
  • Python_网络编程
  • Python实现BT种子转化为磁力链接【实战】
  • Quartz初级教程
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • win10下安装mysql5.7
  • 番外篇1:在Windows环境下安装JDK
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 前端js -- this指向总结。
  • 深入浅出webpack学习(1)--核心概念
  • 限制Java线程池运行线程以及等待线程数量的策略
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​学习一下,什么是预包装食品?​
  • ​一些不规范的GTID使用场景
  • #Linux(Source Insight安装及工程建立)
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (pojstep1.3.1)1017(构造法模拟)
  • (篇九)MySQL常用内置函数
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (图)IntelliTrace Tools 跟踪云端程序
  • (一)认识微服务
  • (译) 函数式 JS #1:简介
  • (转)Linq学习笔记
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET Core 中的路径问题
  • .net MVC中使用angularJs刷新页面数据列表
  • .net 生成二级域名
  • .net 使用ajax控件后如何调用前端脚本
  • .net下简单快捷的数值高低位切换
  • .net知识和学习方法系列(二十一)CLR-枚举