1、Rust初探:从零开始认识这门语言
说实话,我第一次接触Rust是在2018年。那时候团队要做一个高性能的网络中间件,C++写起来太容易出内存问题,Go又觉得性能差点意思。后来一个同事说:「要不试试Rust?」我当时还纳闷——这玩意儿靠谱吗?
结果一用就回不去了。今天咱们就来聊聊Rust的来龙去脉,以及怎么把环境搭起来,跑出你的第一个程序。
1.1 Rust的历史与设计哲学
Rust诞生于Mozilla研究院,2010年首次公开。它的创造者是Graydon Hoare,一个自称「对C++又爱又恨」的工程师。他想要一门语言:既能像C++一样控制底层,又能像Haskell一样安全。
2015年,Rust 1.0正式发布。这之后的发展速度,说实话超出了很多人的预期。2023年,它连续第八年成为Stack Overflow上「最受喜爱的语言」。
Rust的设计哲学可以概括为三点:
- 内存安全:没有空指针、悬垂指针、数据竞争。这些在C/C++里让人头疼的问题,Rust在编译期就帮你解决了。
- 零成本抽象:你写的高级抽象,编译后和手写底层代码一样高效。不会因为用了迭代器、闭包就多花性能。
- 实用至上:不搞学院派那一套。能解决实际问题,才是好语言。
核心观点:Rust不是要取代C++,而是给开发者多一个选择——一个「默认安全」的选择。
1.2 核心优势:为什么选Rust?
我经常被问到:「Rust到底好在哪?」嗯,咱们拆开来看。
内存安全——没有垃圾回收的「安全」
传统系统编程语言(C/C++)里,内存管理全靠程序员自己。你malloc了就得free,new了就得delete。一旦忘了,或者搞错了指针,轻则段错误,重则安全漏洞。
Rust的做法不一样。它引入了一套所有权系统:
- 每个值都有一个「所有者」
- 同一时间只能有一个所有者
- 所有者离开作用域,值自动被释放
这套规则在编译期检查,所以运行时没有任何额外开销。说白了,就是「把错误扼杀在摇篮里」。
我的经验:我在项目中遇到过好几次,用C++写的模块上线后出现随机崩溃,查了三天才发现是野指针问题。换成Rust后,同样的逻辑一次编译通过,再也没出过内存相关的bug。
零成本抽象——写高级代码,拿底层性能
你想想看,很多语言的高级特性(比如迭代器、闭包)都有运行时开销。但Rust的抽象是「零成本」的——你用这些特性写的代码,编译后和手写循环一样快。
为什么会这样?因为Rust的编译器LLVM非常聪明。它会把你的高级抽象直接优化成机器码,中间没有额外的包装层。
| 特性 | 其他语言 | Rust |
|---|---|---|
| 迭代器 | 有装箱开销 | 编译后展开为循环 |
| 泛型 | 运行时类型擦除 | 单态化,每个类型生成独立代码 |
| trait对象 | 虚表查找 | 静态分发或内联 |
1.3 安装Rust工具链
好,理论说完了,咱们动手。安装Rust其实就两步。
第一步:安装rustup
rustup是Rust的版本管理工具。我个人习惯用这个命令:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
它会下载并安装rustup,然后自动安装最新稳定版的Rust。安装过程中会问你要不要修改PATH,选默认的就行。
注意:如果你在Windows上,去官网下载rustup-init.exe。别用WSL里的curl,容易出权限问题。我曾经踩过这个坑。
安装完成后,验证一下:
rustc --version
# 输出类似:rustc 1.75.0 (e082d1e3e 2024-12-21)
第二步:认识cargo
cargo是Rust的包管理器和构建工具。你可以把它想象成「npm + webpack」的合体,但更轻量。
常用的cargo命令:
cargo new project_name— 创建新项目cargo build— 编译项目cargo run— 编译并运行cargo check— 只检查语法,不生成可执行文件(比build快)cargo add crate_name— 添加依赖
小技巧:开发时多用cargo check。它只做语法和类型检查,不生成二进制文件,速度比cargo build快很多。我写代码时基本是「改一行→cargo check→改下一行」的循环。
1.4 第一个Hello World程序
咱们用cargo来创建项目。打开终端,输入:
cargo new hello_rust
cd hello_rust
cargo会生成这样的目录结构:
hello_rust/
├── Cargo.toml # 项目配置文件
└── src/
└── main.rs # 源代码文件
打开src/main.rs,你会看到:
fn main() {
println!("Hello, world!");
}
这就是Rust的入口函数。fn关键字声明函数,main是程序入口。println!是一个宏(注意后面的感叹号),用于打印文本到控制台。
运行它:
cargo run
你会看到输出:
Compiling hello_rust v0.1.0 (/path/to/hello_rust)
Finished dev [unoptimized + debuginfo] target(s) in 0.23s
Running `target/debug/hello_rust`
Hello, world!
嗯,第一个Rust程序就跑起来了。是不是很简单?
1.5 本章知识体系
下面这张图帮你梳理了本章的核心脉络:
1.6 避坑指南
最后分享几个我踩过的坑:
- 安装时忘记加PATH:如果你用Windows,安装完记得重启终端。否则
rustc命令找不到。 - cargo new 后直接运行:有时候网络慢,cargo会卡在下载依赖。别急,等一会儿就好。如果实在等不了,检查一下代理设置。
- println! 忘记加感叹号:这是新手最容易犯的错。
println是函数,println!才是宏。少个感叹号,编译器会报一堆看不懂的错误。
我曾经:有一次在服务器上装Rust,忘了设置--no-modify-path,结果把系统的PATH搞乱了。后来我都是用curl ... | sh -s -- --no-modify-path,然后手动加PATH。稳妥。
好了,环境搭好了,第一个程序也跑起来了。接下来你就可以开始写真正的Rust代码了。记住:Rust的学习曲线确实陡,但一旦跨过所有权那道坎,后面的路会越走越顺。
公众号:蓝海资料掘金营,微信deep3321