Rust 这么厉害?为什么连前端都在卷它
最近 JetBrains 推出了一款针对于 Rust 的 IDE - RustRover。要知道,JetBrains 家是不养闲人的,不是大火的语言都不会专门开发一个 IDE 出来,顶多以一个插件的形式出现,让你安装在 IDEA 或 PyCharm 这些已有的 IDE 中凑合用。
RustRover 的出现也意味着 Rust 已经是一门大火的语言,其实连续很多年 Rust 都是年度语言排行榜的新贵了。
这不,前两天前端 VueConf 会议上正式提出了 Vite 底层的esbuild 和 Rollup 将被取代,取代它们的正是用 Rust 重写的。
要被取代的原因是因为性能问题,Vite 是 Vue3 的默认构建工具,用于 Vue3 项目的开发和构建,类似于 webpack。
Vue 团队认为性能不够快,还有一个原因可能是因为有一个竞品叫做 Turbopack,Turbopack 的性能比 Vite 快了好几倍,而Turbopack 就是用 Rust 写的。
Rust 是谁
Rust 是一门系统级的编程语言, 由 Mozilla 开发,现在由 Rust 社区维护。最早是 Mozilla 的一个工程师业余时间设计的一套语言,没想到无心插柳柳成荫,发布之后有越来越多的人关注并喜欢它。
据说,Rust 最开始的设计目标就是 Better C++
,更好的 C++。可以看到设计者是将它对标 C++的。
学过 C++的都知道,C++中最为困扰的部分就是内存管理,程序员要自己管理内存的分配和回收,一大堆指针搞的你晕头转向,安全隐患太多。
所以,Rust 最厉害的特性之一就是强大内存安全性。它通过引入所有权(ownership)、借用(borrowing)和生命周期(lifetimes)等概念,确保程序不会出现内存泄漏、空指针引用和数据竞态等问题。这使得 Rust 代码在编译时就能够捕获潜在的内存错误,而无需运行时开销。
这也是初学 Rust 的同学觉得它门槛高的原因。我们在写 Java、Python 的时候,就算有bug,但是没有明显的语法错误,编译都是能过的。别管怎么说,项目还是能跑起来的,项目一跑起来,成就感多少还是有一点的。
而 Rust 不一样啊,你代码要是有潜在的内存 bug,是不可能编译过的,一编译就提示错误,一编译就提示错误。你可能写了大半天儿了,项目还没启动成功,你说气人不。这也导致很多人还没入门就放弃了
。
就拿下面这段代码来说,虽然我们可能压根还不知道 Rust 的语法,但是一眼看过去也能理解,很简单的逻辑对吧,如果换成 Java 代码,跑的痛苦的很。
fn main() {
let s1 = String::from("hello");
let s2 = s1;
println!("{}, world!", s1);
}
但是,它就是编译不过。当你编译的时候会提示你:
let s1 = String::from("hello");
| -- move occurs because `s1` has type `String`, which does not implement the `Copy` trait
3 | let s2 = s1;
| -- value moved here
4 | println!("{}, world!", s1);
| ^^ value borrowed here after move
这是Rust中的所有权的概念,当 let s1
这行代码执行后,后面就不再有 s1 的所有权了。
要改成下面这样,不能直接使用s1,但可以用 s1 的副本。
fn main() {
let s1 = String::from("hello");
let s2 = s1.clone();
println!("{}, world!", s1);
}
当你开始学习 Rust 的时候,会颠覆你对编程语言的认知,可能稍有一些夸张,但是写 Rust 和 写其他语言体验完全不一样。
除了强大内存安全性这个特点外,Rust 还有一些非常明显的特点。
并发支持
讨论一门开发语言的时候,不可避免的一定要涉及到并发。
一方面就是我们开发的时候,实现并发逻辑会不会太复杂,因为并发属于编程中的高级用法和难点,拿 Java 来说,很多人写了好几年 Java,也不一定能写好并发逻辑。一来是因为并发本身就比较抽象,二来是 Java 中关于并发、多线程的部分确实有点开发不友好了,已经被诟病多年了。
而 Rust 中的并发部分对开发人员来说就比较友好了,那就意味着使用简单,类似于 Go 语言的并发,用起来简单,用的人自然就多了。当然除了简单之外,本身的并发性能也非常好。
高性能
Rust 本身对标的就是 C和C++,C和C++的代名词就是性能好啊。语言越是接近操作系统,性能就越好,当然相对来说开发难度也就更大了。
性能好很大程度上是因为其良好的设计。
-
内存安全性:Rust 引入了严格的内存安全性机制,包括所有权、借用和生命周期等,以防止空指针引用、数据竞争和内存泄漏等问题。这些机制在编译时检查,可以在运行时几乎没有额外开销。 -
并发编程模型:Rust 提供了轻量级的线程和异步编程的支持,使得开发人员可以编写高效的并发代码。Rust 的并发模型要求显式同步,以避免竞争条件,但这也使得并发代码更加可控且安全。 -
无运行时开销:Rust 设计时考虑到了避免运行时开销,使得生成的机器码非常紧凑且高效。Rust 不依赖于虚拟机,没有垃圾回收,也没有不必要的运行时开销。 -
高级优化:Rust 编译器拥有强大的优化功能,能够生成高度优化的机器码。这些优化可以针对特定目标架构进行定制,以获得最佳性能。
Rust 语言本身是用 C 和 C++写的,加上前面的那些优化,性能自然是好的。
跨平台
Rust 编译器将 Rust 代码编译成中间表示语言,这个中间表示语言是与具体硬件和操作系统无关的。这种中间表示语言允许 Rust 在不同的目标平台上运行。
还有一个特点,那就是 Rust 更新非常快,目前 Rust 已经到了 1.73 的版本。所以有人说,不要学 Rust,因为 Rust 更新太快了。
适用场景
对安全性和性能有要求的
Rust 翻译成中文是锈,所以如果什么工具改成用 Rust 改写了,称作锈化。看到有人调侃的锈化定律。
锈化第一定律:一切能锈化的工具都终将锈化 锈化第二定律:若工具锈化则本身不需要锈化 锈化第三定律:都希望别人锈化而自己不锈化
文章开头说到 Vite 要用 Rust 开发的工具替换 esbuild 和 Rollup ,就是因为性能问题。
微软都在用 Rust 重写一部分 windows 组件,除了看重 Rust 性能外,还有安全方面的因素。
嵌入式
Rust 运行时的开销极小,性能好,加上它支持交叉编译,方便移植,成为越来越多嵌入式开发的首选语言。
区块链
区块链的核心就是安全问题,没有安全保障,一切都是虚无。Rust 本身对程序安全的控制可以避免绝大多数的内存安全问题,从而减少很多安全漏洞。
从哪儿学 Rust
官网
https://www.rust-lang.org/zh-CN/learn,Rust 的官网本身就有很详细的教程和学习资料,内容非常丰富。
https://google.github.io/comprehensive-rust/zh-CN/index.html 这是 Google Android 团队写的 Rust 教程,这个教程的目标是3天学完 Rust,规划好了学习路线,每一天的上午、下午学习哪些部分,跟着学就好了。
还有一个,这里 https://this-week-in-rust.org/ 可以看到 Rust 每周的最新变更情况,包括语言本身的变化和更新,以及一些重大新闻等等,看过去发现,Rust 确实更新快啊。
最后
在招聘网站上搜了一下,Rust 的职位已经有很多了,很多大厂小厂都有 Rust 岗位。
不是说一定学 Rust 就是为了找工作,但是越来越多的工具和产品选择用 Rust,足以说明 Rust 是一门优秀的语言。
而且是和其他语言的开发体验确实不太一样,最终用不用它不要紧,体验一下也会有收获的。
👇🏻 点击下方阅读原文,获取鱼皮往期编程干货
往期推荐