1. Rust初探:为什么是Rust?安装与第一个Hello World

说实话,我第一次接触Rust是在2018年。那时候我正被一个C++项目的内存泄漏折磨得够呛——查了三天,最后发现是一个野指针在搞鬼。当时我就想:有没有一种语言,既能像C++一样高效,又能从根源上杜绝这类问题?

后来我找到了Rust。嗯,这一用就再也没回头。

为什么是Rust?

你可能会问:市面上语言那么多,凭什么选Rust?

我个人的理解是:Rust解决了系统编程中最头疼的两个问题——内存安全和并发安全。而且它不是靠垃圾回收器,而是靠一套聪明的所有权系统在编译期就把问题揪出来。

举个例子。我在写一个网络代理程序时,需要频繁地创建和销毁连接。如果用C语言,稍不留神就内存泄漏了。用Rust呢?编译器直接告诉我:「这个变量在这里被移动了,不能再用了」。虽然刚开始觉得编译器管得宽,但后来发现——它帮我省了多少个通宵debug的夜晚啊。

Rust的核心优势:
  • 零成本抽象——高级语言的表达力,底层语言的性能
  • 内存安全——没有空指针、野指针、缓冲区溢出
  • 无畏并发——数据竞争在编译期就被拦截
  • 工具链完善——rustup、cargo、rustc三件套,开箱即用

安装Rust:rustup是第一步

安装Rust其实很简单。我个人习惯用rustup——它是Rust的版本管理器和安装工具。你想想看,以后想升级Rust版本,或者在不同项目间切换版本,一条命令就搞定。

在Linux/macOS上:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

在Windows上:

https://rustup.rs 下载安装程序,双击运行就行。

小提示:安装过程中会问你要不要默认配置,直接选「1」默认安装就好。我曾经手贱选了自定义,结果折腾了半天路径问题。

安装完成后,重启终端,输入:

rustc --version

如果看到类似 rustc 1.75.0 (8e0e7a8c4 2024-01-25) 的输出,恭喜你,安装成功了。

工具链三件套:rustup、cargo、rustc

安装好Rust后,你实际上得到了三个工具。我简单说说它们各自干啥:

工具 作用 常用命令
rustup 管理Rust版本和工具链 rustup updaterustup default stable
cargo 包管理器和构建工具 cargo newcargo buildcargo run
rustc Rust编译器 rustc main.rs

说白了,日常开发你基本只用cargo。rustc直接用的场景很少——除非你在写一个单文件的小脚本。我刚开始学Rust时,傻乎乎地每次都手动调用rustc编译,后来才发现cargo一条命令全包了。

第一个Hello World:用cargo创建项目

好,咱们来写第一个程序。我建议直接用cargo创建项目,这样目录结构都是现成的。

cargo new hello_rust
cd hello_rust

这条命令会生成一个hello_rust文件夹,里面长这样:

hello_rust/
├── Cargo.toml   # 项目配置文件,类似package.json
└── src/
    └── main.rs   # 源代码文件

打开src/main.rs,你会看到cargo已经帮你写好了Hello World:

fn main() {
    println!("Hello, world!");
}

然后运行:

cargo run

你会看到终端输出:

   Compiling hello_rust v0.1.0 (/path/to/hello_rust)
    Finished dev [unoptimized + debuginfo] target(s) in 0.34s
     Running `target/debug/hello_rust`
Hello, world!
注意:第一次运行cargo run会先编译,所以会看到「Compiling」字样。之后再运行,如果代码没变,cargo会直接执行,速度飞快。我曾经犯过一个错误——每次改代码都手动删掉target目录重新编译,后来才知道cargo会自动检测文件变化。

代码解释:这行println!到底干了啥?

咱们来拆解一下这段代码:

  • fn main() —— 这是程序的入口函数。每个Rust程序都必须有一个main函数。
  • println! —— 注意后面有个感叹号。这说明它是一个,不是普通函数。宏是Rust里一个很强大的特性,后面我们会深入讲。
  • "Hello, world!" —— 字符串字面量,直接打印到控制台。
  • ; —— 语句结束符。Rust里每条语句都要加分号,跟C语言一样。

你可能会问:为什么用宏而不是函数?其实println!之所以是宏,是因为它支持可变参数——你可以传任意多个值进去格式化输出。普通函数做不到这一点。我刚开始学的时候也觉得奇怪,后来写多了反而觉得这个设计很巧妙。

知识体系总览

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

Rust初探:知识体系 为什么是Rust? 安装与工具链 Hello World 内存安全 · 零成本抽象 · 无畏并发 rustup · cargo · rustc cargo new · cargo run · println! 核心目标:搭建Rust开发环境,跑通第一个程序 理解Rust的设计哲学,为后续学习打下基础 ✅ 理解Rust优势 ✅ 安装Rust工具链 ✅ 运行Hello World

避坑指南:我踩过的几个坑

最后分享几个我当初踩过的坑,希望能帮你省点时间:

  • 环境变量问题:安装完rustup后,如果终端找不到cargo命令,记得重启终端或者执行source ~/.cargo/env。我当初就是忘了这步,折腾了十分钟。
  • 编辑器选择:我个人推荐VS Code + rust-analyzer插件。别用记事本写Rust——没有语法高亮和自动补全,写起来太痛苦了。
  • cargo run vs cargo build:cargo run = 编译 + 运行。如果你只想编译不想运行,用cargo build。我刚开始总是分不清,后来养成习惯:调试用run,发布用build。

好了,到这里你已经成功安装了Rust,并且跑通了第一个程序。别看只是打印了一行字,这背后是整个Rust工具链在为你工作。接下来我们会一步步深入,你会发现Rust的世界远比想象中精彩。


公众号:蓝海资料掘金营,微信deep3321