学习下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 2 3 4
| source $HOME/.cargo/env
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 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!
|
使用VS Code作为开发工具
这里主要安装一些社区推荐的插件
- rust-analyzer:它会实时编译和分析你的 Rust 代码,提示代码中的错误,并对类型进行标注。你也可以使用官方的 rust 插件取代。
- rust syntax:为代码提供语法高亮。
- crates:帮助你分析当前项目的依赖是否是最新的版本。
- better toml:Rust 使用 toml 做项目的配置管理。可以帮你语法高亮,并展示 toml 文件中的错误。
- rust test lens:可以帮你快速运行某个 Rust 测试。
- Tabnine:基于 AI 的自动补全,可以帮助你更快地撰写代码。
使用国内的Rust镜像
1 2 3 4 5 6
| cd ~/.cargo/.
➜ .cargo touch config ➜ .cargo vim config ➜ .cargo chmod u+x 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"
|