0%

Rust入门

学习下Rust

为什么学习Rust

在知乎上看到一个人对Rust的评论。

首先,Rust 是有点反人类,否则不会一直都不火。然后,Rust 之所以反人类,是因为人类这玩意既愚蠢,又自大,破事还贼多。 你看 C++ 就很相信人类,它要求人类自己把自己 new 出来的东西给 delete 掉。 C++:“这点小事我相信你可以的!” 人类:“没问题!包在我身上!” 然后呢,内存泄漏、double free、野指针满世界飘…… C++:“……”

Java 选择不相信人类,但替人类把事办好。 Java:“别动,让我来,我有gc!” 人类:“你怎么做事这么慢呀?你怎么还 stop the world 了呀?你是不是不爱我了呀?” Java:“……”

Rust 发现唯一的办法就是既不相信人类,也不惯着人类。 Rust:“按老子说的做,不做就不编译!” 人类:“你反人类!” Rust:“滚!”

  • C/C++ 完全相信而且惯着程序员,让大家自行管理内存,所以可以编写很自由的代码,但一个不小心就会造成内存泄漏等问题导致程序崩溃。
  • Java/Golang 完全不相信程序员,但也惯着程序员。所有的内存生命周期都由 JVM 运行时统一管理。 在绝大部分场景下,你可以非常自由的写代码,而且不用关心内存到底是什么情况。 内存使用有问题的时候,我们可以通过 JVM 来信息相关的分析诊断和调整。
  • Rust 语言选择既不相信程序员,也不惯着程序员。 让你在写代码的时候,必须清楚明白的用 Rust 的规则管理好你的变量,好让机器能明白高效地分析和管理内存。 但是这样会导致代码不利于人的理解,写代码很不自由,学习成本也很高。

安装Rust开发环境

安装Rust

Rust在Mac系统上非常的友好

1
curl https://sh.rustup.rs -sSf | sh
  • 脚本会检测你的操作系统,然后提示你是否安装

  • 默认选择1就好了

  • 这样就安装好了
1
2
3
4
source $HOME/.cargo/env
# 设置下Rust的环境变量
rustc --version
# 如果正常显示版本说明安装成功了

创建测试项目

1
2
3
4
5
6
7
8
mkdir learning
cd learning
cargo new learning-01
cd learning-01
cargo run

Hello, world!
# 如果变成成功并输出消息则表示测试项目通过了。

Rust

Rust 是一个系统级编程语言,被 Mozilla 员工 “Graydon Hoare” 于 2006 年 开发。他形容 Rust 是一种线程安全的支持并发的实用型的编程语言,支持函数式编程与命令式编程。

Cargo

Cargo是Rust的构建系统和包管理工具,和Java中maven类似的功能。

1
2
// 查看版本
cargo --version
  • 创建一个项目
1
2
3
4
5
6
7
8
9
cargo new new_project
cd new _project
➜ new_project git:(master) ✗ tree
.
├── Cargo.toml
└── src
└── main.rs

1 directory, 2 files
  • 这里的Cargo.toml就是配置文件 TOML (Tom’s Obvious, Minimal Language) 格式,这是 Cargo 配置文件的格式。
1
2
3
4
5
6
7
8
[package]
name = "new_project"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
  • 构建并运行
1
2
3
4
5
6
7
8
cargo build
➜ new_project git:(master) ✗ cargo build
Compiling new_project v0.1.0 (/Users/z201/word/rust/learning-rust/new_project)
Building [ ] 0/1: new_project(bin)
Finished dev [unoptimized + debuginfo] target(s) in 11.12s

➜ new_project git:(master) ✗ ./target/debug/new_project
Hello, world!
  • 也可以直接编译加运行
1
cargo run
  • 快速检查是否可以编译
1
cargo check

使用VS Code作为开发工具

这里主要安装一些社区推荐的插件

  1. rust-analyzer:它会实时编译和分析你的 Rust 代码,提示代码中的错误,并对类型进行标注。你也可以使用官方的 rust 插件取代。
  2. rust syntax:为代码提供语法高亮。
  3. crates:帮助你分析当前项目的依赖是否是最新的版本。
  4. better toml:Rust 使用 toml 做项目的配置管理。可以帮你语法高亮,并展示 toml 文件中的错误。
  5. rust test lens:可以帮你快速运行某个 Rust 测试。
  6. Tabnine:基于 AI 的自动补全,可以帮助你更快地撰写代码。

使用国内的Rust镜像

1
2
3
4
5
6
# 切换到cargo
cd ~/.cargo/.
# 创建一个config文件
➜ .cargo touch config
➜ .cargo vim config
➜ .cargo chmod u+x config
  • 往config写入内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
# 根据情况来切换
replace-with = 'ustc'
# 清华大学
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"

# 中国科学技术大学
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"

# 上海交通大学
[source.sjtu]
registry = "https://mirrors.sjtug.sjtu.edu.cn/git/crates.io-index"

# rustcc社区
[source.rustcc]
registry = "git://crates.rustcc.cn/crates.io-index"

# 字节跳动
[source.rsproxy]
registry = "https://rsproxy.cn/crates.io-index"