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 本章知识体系

下面这张图帮你梳理了本章的核心脉络:

Rust初探 历史与设计哲学 • 2010年诞生于Mozilla • 2015年1.0稳定版 • 内存安全 + 零成本抽象 核心优势 • 所有权系统保证内存安全 • 无垃圾回收的零开销 • LLVM优化,抽象不损失性能 安装工具链 • rustup管理版本 • cargo构建与包管理 • rustc编译器 Hello World • cargo new 创建项目 • fn main() 入口函数 • println! 宏输出 cargo常用命令 • cargo build 编译 • cargo run 运行 • cargo check 快速检查

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