引子
作为一名敏锐的前端开发者,您可能早已对 Rust 有所耳闻,毕竟近几年,使用 Rust 开发的前端构建工具每经发布,其卓越的性能数据总是能带来社区的一阵惊叹。
图片来源:https://swc.rs/
例如 SWC 就在其官网宣称在单线程上的执行速度是传统代码转译工具 Babel 的 20 倍。如果在 4 核设备上开启并行计算,其执行速度将是 Babel 的 70 倍!
图片来源:https://turbo.build/pack
无独有偶,使用 Rust 编写的构建工具 Turbopack,在构建 3 万个 React 组件的测试中,其性能也完全碾压了内置 webpack 5 的 Next.js 11。这些现实示例都成功证明了一件事:使用 Rust 编写前端构建工具是可行的,并且受益巨大!但为什么使用 Rust 语言编写的程序能获得如此巨大的性能收益?Rust 究竟有怎样的魔力?这就是本篇文章试图回答的问题,希望当您阅读完本篇文章后,您能对 Rust 是什么,为什么性能如此强劲以及一些 Rust 核心特性有一些基础的了解,更希望您能和我一样开始喜欢上这门语言:)
一、Rust 简介
1.1. 什么是
什么是 Rust?您或许可以从下面这张图中找到答案:
图片来源:https://twitter.com/ThePrimeagen/status/1690527161587728384/photo/1
请不要小瞧这张图,它向我们至少传达了两点重要的信息:
- Rust 和 C 站在一起,表明它们都是非常底层的操作系统级别的语言;
- 相较于白发苍苍的 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 年度最受欢迎的编程语言冠军。
图片来源: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:
图片来源:https://yalantis.com/blog/rust-market-overview/
1.4. Rust 的优势
那么人人都爱 Rust 的原因为何?为什么众多大厂均开始选择 Rust 展开实践?下面是 Rust 在 2022 年针对 9,354 名 Rust 开发者做出的调研结果:
- 96% 的开发者选择 Rust 是因为使用 Rust 能够开发出正确,没有 bug 的程序;
- 92% 的开发者选择 Rust 是因为它所提供的高性能;
- 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);}
这段代码并不复杂,但是我想请您尝试回答以下三个问题:
- 变量 s 存储在栈内存中还是堆内存中?
- 变量 s 占用多少内存空间?具体来说,多少 bit?
- 变量 s 所占用的内存空间什么时候会被回收?
即使是富有经验的前端开发者似乎也很难全部答对以上三个问题,现在让我们把这些问题先放在一边,看看如何用 Rust 实现相同逻辑的代码:
fn main() { let s: Vec<i8> = vec![1, 2, 3]; let t = s; let u = s; println!("{:?}, {:?}, {:?}", s, t, u)}
对比这两段代码,你是否感觉与之前的代码相比非常相似?这就是 Rust 语言带给开发者的第一个好处,它继承了很多高级语言的语言特性,因此无论你是什么背景语言的开发者,在使用 Rust 开发程序时,都会有熟悉的感觉。
现在,让我们继续尝试回答刚才的三个问题:
- 变量 s 存储在栈内存中还是堆内存中?➡️ 堆内存,因为 Vector 类型默认存储于堆内存;
- 变量 s 占用多少内存空间?具体来说,多少 Bit?➡️ 3 * 8 = 24bit,因为我们通过 Vec<i8> 声明了 Vector 类型成员的内存占用为 8bit;
- 变量 s 所占用的内存空间什么时候会被回收?➡️ 在函数 main 的最后一行,因为 Rust 一般总是在变量所在作用域末尾回收内存空间;
没错,对于 Rust 开发者,始终能够非常清楚的知道自己的代码在机器中的状态,它存储在哪里,占用多少内存以及何时被回收,这不是靠博学做到的,这是语言本身所提供的透明度。这就是 Rust 的带来的第二个好处:开发者能够清楚地理解代码作用在机器底层上的效果,这不仅使得 Rust 开发者能够对自己的代码更自信,也基于开发者更多控制权,使其有机会编写出性能更佳,内存占用更少的代码。
2.2. 独特的所有权机制
我想现在是时候揭秘 Rust 为什么快的秘诀了,不过要想搞明白这一点,我们需要先退一步,了解一下内存管理的一些知识。一门编程语言极致的性能在于对计算机硬件资源的极致利用,这其中就包含了对内存的使用,在众多编程语言中,关于内存管理可以大致分为两大阵营:
- 手动内存管理:代表语言是 C,C++ 等,它给开发者足够的自由度去掌控内存资源,但是它经常会带来一个问题 —— 开发者无法保障内存安全;
- 自动内存管理:代表语言有 Java,Python,JavaScript 等,它通过专门的 GC 机制(垃圾回收器)让开发者不必关心内存回收问题,GC 会以一定频率检查和释放不在被使用的内存,这种自动管理内存的机制也有一个天然的症结 —— GC 会损耗程序性能;
标签:备受,代码,C++,开发者,我们,Rust,内存 From: https://www.cnblogs.com/flyingsir/p/17725568.html