首页 > 其他分享 >为什么 Rust 备受开发者青睐?

为什么 Rust 备受开发者青睐?

时间:2023-09-24 09:04:06浏览次数:55  
标签:备受 代码 C++ 开发者 我们 Rust 内存

引子

作为一名敏锐的前端开发者,您可能早已对 Rust 有所耳闻,毕竟近几年,使用 Rust 开发的前端构建工具每经发布,其卓越的性能数据总是能带来社区的一阵惊叹。

image

图片来源:https://swc.rs/

例如 SWC 就在其官网宣称在单线程上的执行速度是传统代码转译工具 Babel 的 20 倍。如果在 4 核设备上开启并行计算,其执行速度将是 Babel 的 70 倍!

image

 图片来源:https://turbo.build/pack

无独有偶,使用 Rust 编写的构建工具 Turbopack,在构建 3 万个 React 组件的测试中,其性能也完全碾压了内置 webpack 5 的 Next.js 11。这些现实示例都成功证明了一件事:使用 Rust 编写前端构建工具是可行的,并且受益巨大!但为什么使用 Rust 语言编写的程序能获得如此巨大的性能收益?Rust 究竟有怎样的魔力?这就是本篇文章试图回答的问题,希望当您阅读完本篇文章后,您能对 Rust 是什么,为什么性能如此强劲以及一些 Rust 核心特性有一些基础的了解,更希望您能和我一样开始喜欢上这门语言:)

一、Rust 简介

 

 

1.1. 什么是

 

什么是 Rust?您或许可以从下面这张图中找到答案:

image

图片来源:https://twitter.com/ThePrimeagen/status/1690527161587728384/photo/1

请不要小瞧这张图,它向我们至少传达了两点重要的信息:

  1. Rust 和 C 站在一起,表明它们都是非常底层的操作系统级别的语言
  2. 相较于白发苍苍的 C,Rust 非常新潮!(虽然看起来 ZIG 更酷);

让我们看看 Rust 官网是怎么宣称的:

(Rust is) A language empowering everyone to build reliable and efficient software.来源:https://www.rust-lang.org/

没错,Rust 所标榜的就是「安全可靠」「性能出众」,不过我认为还可以再加上一条「对开发者非常友好」(我们之后会见识到这一点)。

 

1.2. Rust 历史

 

You have to know the past to understand the present.― Carl Sagan

同样的,要了解一门语言的现在和未来,我们需要了解一门语言的过去,特别是,语言发明者当初是为了解决什么问题。Rust 诞生于 2006 年。它的作者是 Mozilla 的工程师 Graydon Hoare。在 Rust 正式对外发布前,它大概花费了 10 年的时间进行设计。(众所周知,据说 JavaScript 的设计周期是 10 天)而 Graydon Hoare 发明这门语言的初心是为了解决 C 和 C++ 所固有的安全问题。需要澄清的是,Rust 并不是 Graydon Hoare 一个人单打独斗的产物,在这门语言诞生的 3 年后(2009 年),Mozilla 团队就迅速意识到了这门语言的潜力,并将其转为企业内部项目进行孵化。直到 2015 年,Rust 终于亮相于公众视野。而堪称传奇的是,自 2016 年起,Rust 就一直蝉联 Stack Overflow 年度最受欢迎的编程语言冠军。

image

图片来源:https://survey.stackoverflow.co/2022#technology-most-loved-dreaded-and-wanted

顺便一提,在被统计的 42 种编程语言中,JavaScript,C++ 和 C 分别位于最受欢迎语言排行榜的第 16,25 和 33 位。

 

1.3. 谁在用 Rust?

 

看起来仿佛「人人都爱 Rust」,而 Rust 也并非叫好不叫座,它近些年来也逐渐在工业实践中崭露头角,例如:

  • Mozilla:使用 Rust 开发其旗下 Firefox 浏览器的 CSS 引擎 —— Stylo;
  • Dropbox:使用 Rust 编写其核心的文件存储组建;
  • Discord:为了解决其延迟峰值的问题,直接使用 Rust 重构了其原先的 Go 代码;

从下图中可以看到,很多知名公司都开始在团队中使用 Rust:

image

图片来源:https://yalantis.com/blog/rust-market-overview/

 

1.4. Rust 的优势

 

那么人人都爱 Rust 的原因为何?为什么众多大厂均开始选择 Rust 展开实践?下面是 Rust 在 2022 年针对 9,354 名 Rust 开发者做出的调研结果:

  1. 96% 的开发者选择 Rust 是因为使用 Rust 能够开发出正确,没有 bug 的程序
  2. 92% 的开发者选择 Rust 是因为它所提供的高性能
  3. 89% 的开发者则认为使用 Rust 开发的程序更加安全
完整报告可以参考:https://blog.rust-lang.org/2022/02/15/Rust-Survey-2021.html

二、Rust 的特性

 

在大致介绍了 Rust 是什么,创建,发展的历史,谁在用,谁爱用以及原因之后,终于,我们可以把聚光灯照射在这门语言身上,近距离观察它的魅力。希望通过本章的介绍,您能够了解到使用 Rust 编写程序,为什么快的原因。不过在那之前,让我们先通过一些代码增强对 Rust 语言的亲近感。

 

2.1. 使用高级语法但底层透明

 

首先,让我们先看看下面这段 TypeScript 代码:

function main() {  let s: number[] = [1, 2, 3];  let t = s;  let u = s;    console.log(s, t, u);}

 

这段代码并不复杂,但是我想请您尝试回答以下三个问题:

  1. 变量 s 存储在栈内存中还是堆内存中?
  2. 变量 s 占用多少内存空间?具体来说,多少 bit?
  3. 变量 s 所占用的内存空间什么时候会被回收?

即使是富有经验的前端开发者似乎也很难全部答对以上三个问题,现在让我们把这些问题先放在一边,看看如何用 Rust 实现相同逻辑的代码:

fn main() {  let s: Vec<i8> = vec![1, 2, 3];  let t = s;  let u = s;    println!("{:?}, {:?}, {:?}", s, t, u)}

对比这两段代码,你是否感觉与之前的代码相比非常相似?这就是 Rust 语言带给开发者的第一个好处,它继承了很多高级语言的语言特性,因此无论你是什么背景语言的开发者,在使用 Rust 开发程序时,都会有熟悉的感觉。

现在,让我们继续尝试回答刚才的三个问题:

  1. 变量 s 存储在栈内存中还是堆内存中?➡️ 堆内存,因为 Vector 类型默认存储于堆内存;
  2. 变量 s 占用多少内存空间?具体来说,多少 Bit?➡️ 3 * 8 = 24bit,因为我们通过 Vec<i8> 声明了 Vector 类型成员的内存占用为 8bit;
  3. 变量 s 所占用的内存空间什么时候会被回收?➡️  在函数 main 的最后一行,因为 Rust 一般总是在变量所在作用域末尾回收内存空间;

没错,对于 Rust 开发者,始终能够非常清楚的知道自己的代码在机器中的状态,它存储在哪里,占用多少内存以及何时被回收,这不是靠博学做到的,这是语言本身所提供的透明度。这就是 Rust 的带来的第二个好处:开发者能够清楚地理解代码作用在机器底层上的效果,这不仅使得 Rust 开发者能够对自己的代码更自信,也基于开发者更多控制权,使其有机会编写出性能更佳,内存占用更少的代码。

 

2.2. 独特的所有权机制

 

我想现在是时候揭秘 Rust 为什么快的秘诀了,不过要想搞明白这一点,我们需要先退一步,了解一下内存管理的一些知识。一门编程语言极致的性能在于对计算机硬件资源的极致利用,这其中就包含了对内存的使用,在众多编程语言中,关于内存管理可以大致分为两大阵营:

  1. 手动内存管理:代表语言是 C,C++ 等,它给开发者足够的自由度去掌控内存资源,但是它经常会带来一个问题 —— 开发者无法保障内存安全;
  2. 自动内存管理:代表语言有 Java,Python,JavaScript 等,它通过专门的 GC 机制(垃圾回收器)让开发者不必关心内存回收问题,GC 会以一定频率检查和释放不在被使用的内存,这种自动管理内存的机制也有一个天然的症结 —— GC 会损耗程序性能;

标签:备受,代码,C++,开发者,我们,Rust,内存
From: https://www.cnblogs.com/flyingsir/p/17725568.html

相关文章

  • Rust的语句和表达式
    在Java中经常听到类似赋值语句、lambda表达式的说法,却从来没有在意过所谓的语句和表达式有什么区别,而在实际的使用中,它们好像确实没啥区别,但是在Rust中,语句和表达式就被严格区分开来了,《Rust程序设计语言》中提到Rust的函数体是由一系列语句和一个可选的结尾表达式来构成。Rust......
  • Windows 安装 Rust
    1、安装rustup-init.exehttps://www.rust-lang.org/zh-CN/tools/install1、安装rustup-init.exehttps://www.rust-lang.org/zh-CN/tools/installwindows安装Rust安装太慢解决办法1、打开powershell2、分别执行下面两行代码:$ENV:RUSTUP_DIST_SERVER='https://mirrors.......
  • 随着新政策的实施,注册苹果开发者账号需缴费创建证书
    ​ 转载:注册苹果开发者账号的方法 在2020年以前,注册苹果开发者账号后,就可以生成证书。但2020年后,因为注册苹果开发者账号需要使用AppleDeveloperapp注册开发者账号,所以需要缴费才能创建ios证书了。所以新政策出来后,注册苹果开发者账号,并缴费成为苹果开发者,才能手工创建......
  • 微软推出统一 Copilot AI 助手;谷歌拟自主研发 AI 芯片;苹果拟在国内引进新的 OLED 供应
    开发者朋友们大家好:这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点,欢迎大家留......
  • A closer look at Ownership in Rust
    SoyouwanttolearnRustandkeephearingabouttheconceptofOwnershipandBorrowing,butcan’tfullywrapyourheadaroundwhatitis.Ownershipissoessentialthatit’sgoodtounderstanditearlyoninyourjourneyoflearningRust,alsotoavoidr......
  • 美国2009年开始入侵华为总部服务器;马斯克脑机公司将进行首次人体试验;全球首个5G卫星电
    开发者朋友们大家好:这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点,欢迎大家留......
  • 使用 sudo apt-get update 命令时出现 Certificate verification failed: The certifi
    命令:sudoapt-getupdate问题:Certificateverificationfailed:ThecertificateisNOTtrusted. Tryinstallingca-certificates.忽略:1https://professional-store-packages.chinauos.com/appstoreeagleInRelease错误:3https://professional-store-packages.china......
  • 任正非“苹果是华为的老师”;音频编解码标准 L2HC 发布;GNU 和自由软件运动四十周年丨RT
    开发者朋友们大家好:这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点,欢迎大家留......
  • 最新苹果开发者账号添加设备UDID
    苹果开发时,只有在开发者后台添加过UDID的设备,其信息才能包含在.mobileprovision配置文件中,才能配合证书进行真机调试。开发者后台-Devices管理页面一、单个添加UDID 点击添加按钮⊕,在注册单个设备区域填写设备信息并依次完成Continue→Register→Done即可。添加设备页面.png......
  • WebAssembly实践指南——C++和Rust通过wasmtime实现相互调用实例
    C++和Rust通过wasmtime实现相互调用实例1wasmtime介绍wasmtime是一个可以运行WebAssembly代码的运行时环境。WebAssembly是一种可移植的二进制指令集格式,其本身与平台无关,类似于Java的class文件字节码。WebAssembly本来的设计初衷是想让浏览器可以运行C语言这种编译型语言的......