Rust 入门:GitHub 热门内存安全编程语言

文章目录

Rust 是 Mozilla 开发的系统编程语言,GitHub 星标超过 9 万。连续好几年都是 Stack Overflow 最受开发者喜欢的语言。这几年热度涨得很快,从系统级应用到 WebAssembly,到处都有人用。

我自己用 Rust 写过几个小工具,聊聊学习过程和实际用下来的感受。

Rust 到底解决了什么问题

用 C/C++ 写程序,性能确实好,但内存坑太多。悬垂指针、缓冲区溢出,这些 bug 找起来能把人熬疯。Java 和 Go 有垃圾回收,内存安全了,但性能差点意思,偶尔还会有 GC 停顿,对延迟敏感的场景很难受。

Rust 想鱼和熊掌兼得。既要内存安全,又不要垃圾回收,性能还要和 C/C++ 一样。这就是它一开始的设计目标。

核心设计真的很独特

所有权系统

这是 Rust 最不一样的地方。每个值都有一个所有者,所有者离开作用域,内存自动释放。不用你手动调用 free,也不需要 GC 帮你收。

rust 复制代码
fn main() {
    let s = String::from("hello"); // s 开始生效
    // 这里使用 s
} // s 走了,内存自动释放

规则就一条:每个值只能有一个所有者,所有者没了,值就跟着没了。这套规则编译阶段就能保证内存安全,运行时一点额外开销都没有。

借用检查

值可以借给别人用,不可变借用能同时借很多份,可变借用只能有一份。这个规则直接就把数据竞争给杜绝了,编译阶段就能发现问题。

rust 复制代码
fn main() {
    let mut s = String::from("hello");

    let r1 = &s; // 不可变借用
    let r2 = &s; // 没问题,多个读可以同时
    println!("{} {}", r1, r2);

    let r3 = &mut s; // 没问题,前面两个用完了
    println!("{}", r3);
}

编译过不了的代码根本跑不起来,很多内存相关的 bug,根本到不了运行阶段。

模式匹配

match 表达式做模式匹配,真的好用,写出来代码看着就舒服:

rust 复制代码
match option {
    Some(v) => println!("{}", v),
    None => println!("none"),
}

比堆一堆 if else 清晰太多。

没有 GC 性能就是好

不用垃圾回收,内存管理编译阶段就搞定了。运行的时候没有 GC 停顿,性能和 C/C++ 差不多。对性能要求高的场景,特别合适。

五分钟跑第一个程序

Hello World 很简单:

rust 复制代码
fn main() {
    println!("Hello Rust!");
}

直接编译运行:

bash 复制代码
rustc main.rs
./main

日常开发用 Cargo,这是 Rust 官方包管理器:

bash 复制代码
cargo new hello
cd hello
cargo run

一行命令创建项目,依赖下载、编译、运行一条龙,特别省心。

什么场景用 Rust 合适

写操作系统、驱动、浏览器组件,这种底层开发,Rust 太合适了。Firefox 已经把很多组件用 Rust 重写了,Linux 内核现在也接受 Rust 代码了。

后端服务,要性能还要内存安全,Rust 比 Go 性能更好,特别适合写对延迟要求高的服务。

命令行工具,编译出来单个二进制,性能又好,现在热门的 CLI 工具很多都是 Rust 写的。ripgrep、fd、bat 这些,比原来的工具快好几倍。

WebAssembly,Rust 编译到 WASM 体积小,性能又好,前端可以把计算密集的模块用 Rust 写,编译成 WASM 跑。

嵌入式开发,不需要 GC,内存占用小,还能保证内存安全,天生适合嵌入式。

Rust 不是银弹。做纯业务开发,Python 或者 Go 开发速度更快,生态也成熟很多。Rust 学起来费时间,开发速度也慢点。

学习曲线真的很陡吗

说实话,确实陡。所有权、借用检查这些概念,别的语言没有,刚接触得花时间理解。

刚开始写代码,经常编译不通过。报错信息虽然写得清楚,但还是挺打击新手信心的。

熬过开头那一阵,把所有权规则理解透了,后面就顺了。编译器真的很贴心,错在哪,该怎么改,它都告诉你,照着改基本就能过。

现在学习资料也多,《Rust 权威指南》官方免费在线看,还有完整中文翻译。新手跟着这本书走一遍,就能上手写简单东西了。

生态现在成熟吗

crates.io 上包越来越多,常用的场景基本都有成熟的库。Tokio 异步运行时,serde JSON 序列化,regex 正则,reqwest HTTP 客户端,这些都稳定了。

Web 框架,actix-web 和 axum 都很好用,性能强,文档也全。

数据库操作,sqlx 和 diesel 都有人用。sqlx 不用宏也能玩,更灵活一点。

Cargo 真的好用,下载依赖、编译、测试、发布全给你包了,比 C/C++ 那些包管理工具好用太多。

Rust 有哪些缺点

学习曲线陡,新手入门慢。开发速度肯定不如 Go 和 Python,编译时间也长,大型项目编译真的要等很久。

用到 unsafe 的地方,还是可能出问题。当然你全程 safe 编程,安全性还是有保证的。

生态和 Go、Python 比还是差点,有些冷门场景可能找不到合适的库。

现在学 Rust 还值得吗

如果你做系统编程、嵌入式、CLI 工具或者 WebAssembly,那肯定值得学。未来越来越多项目会用 Rust,市场需求肯定越来越大。

就算你不天天写 Rust,学学所有权这套思路,理解内存安全到底怎么保证,对你写其他语言也有帮助。

现在很多大公司都开始用 Rust 了,微软、谷歌、亚马逊都在用上,国内大厂也开始招 Rust 开发。工作机会确实越来越多。

Rust 的目标就是让你写出安全又高效的代码。学起来确实难,但学会了,真能帮你避开很多低级内存错误,这点没错。

项目地址:https://github.com/rust-lang/rust

了,微软、谷歌、亚马逊都在用上,国内大厂也开始招 Rust 开发。工作机会确实越来越多。

Rust 的目标就是让你写出安全又高效的代码。学起来确实难,但学会了,真能帮你避开很多低级内存错误,这点没错。

项目地址:https://github.com/rust-lang/rust

相关推荐
我叫汪枫1 小时前
在后台管理系统中,如何递归和选择保留的思路来过滤菜单
开发语言·javascript·node.js·ecmascript
_.Switch1 小时前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
软件技术NINI1 小时前
webkit简介及工作流程
开发语言·前端·javascript·udp·ecmascript·webkit·yarn
Brendan_0011 小时前
JavaScript的Stomp.over
开发语言·javascript·ecmascript
念2341 小时前
f5 shape分析
开发语言·javascript·ecmascript
苍穹之跃1 小时前
某量JS逆向
开发语言·javascript·ecmascript
思茂信息1 小时前
CST软件如何进行参数化扫描?
运维·开发语言·javascript·windows·ecmascript·软件工程·软件需求
赈早见.琥珀猪1 小时前
vue启动ReferenceError: ReadableStream is not defined
开发语言·javascript·ecmascript
爱吃牛肉的大老虎1 小时前
JS异步中async、await讲解
开发语言·javascript·ecmascript