欢迎来到亿配芯城! | 免费注册
你的位置:NEC(日电)半导体IC芯片全系列-亿配芯城 > 芯片资讯 > Rust语言为什么这么卷?
Rust语言为什么这么卷?
发布日期:2024-01-09 12:34     点击次数:202

大家好,我是风筝

最近 JetBrains 推出了一款针对于 Rust 的 IDE - RustRover。要知道,JetBrains 家是不养闲人的,不是大火的语言都不会专门开发一个 IDE 出来,顶多以一个插件的形式出现,让你安装在 IDEA 或 PyCharm 这些已有的 IDE 中凑合用。

RustRover 的出现也意味着 Rust 已经是一门大火的语言,其实连续很多年 Rust 都是年度语言排行榜的新贵了。

这不,前两天前端 VueConf 会议上正式提出了 Vite 底层的esbuild 和 Rollup 将被取代,取代它们的正是用 Rust 重写的。

c798ca8e-70ae-11ee-939d-92fbcf53809c.png

要被取代的原因是因为性能问题,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 更新太快了。

c79d2e26-70ae-11ee-939d-92fbcf53809c.png

适用场景

对安全性和性能有要求的

Rust 翻译成中文是锈,所以如果什么工具改成用 Rust 改写了,称作锈化。看到有人调侃的锈化定律。

锈化第一定律:一切能锈化的工具都终将锈化锈化第二定律:若工具锈化则本身不需要锈化锈化第三定律:都希望别人锈化而自己不锈化

文章开头说到 Vite 要用 Rust 开发的工具替换 esbuild 和 Rollup ,就是因为性能问题。

微软都在用 Rust 重写一部分 windows 组件,除了看重 Rust 性能外,还有安全方面的因素。

嵌入式

Rust 运行时的开销极小,性能好,加上它支持交叉编译,方便移植,成为越来越多嵌入式开发的首选语言。

区块链

区块链的核心就是安全问题,没有安全保障,一切都是虚无。Rust 本身对程序安全的控制可以避免绝大多数的内存安全问题,从而减少很多安全漏洞。

从哪儿学 Rust

官网

https://www.rust-lang.org/zh-CN/learn,Rust 的官网本身就有很详细的教程和学习资料,内容非常丰富。

c7a6828c-70ae-11ee-939d-92fbcf53809c.png

Google

https://google.github.io/comprehensive-rust/zh-CN/index.html 这是 Google Android 团队写的 Rust 教程,这个教程的目标是3天学完 Rust,规划好了学习路线,每一天的上午、下午学习哪些部分,跟着学就好了。

c7b54114-70ae-11ee-939d-92fbcf53809c.png

还有一个,这里 https://this-week-in-rust.org/ 可以看到 Rust 每周的最新变更情况,包括语言本身的变化和更新,以及一些重大新闻等等,看过去发现,Rust 确实更新快啊。

最后

在招聘网站上搜了一下,Rust 的职位已经有很多了,很多大厂小厂都有 Rust 岗位。

不是说一定学 Rust 就是为了找工作,但是越来越多的工具和产品选择用 Rust,足以说明 Rust 是一门优秀的语言。

而且是和其他语言的开发体验确实不太一样,最终用不用它不要紧,体验一下也会有收获的。

编辑:黄飞



相关资讯