学习下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系统上非常的友好
curl https://sh.rustup.rs -sSf | sh
- 脚本会检测你的操作系统,然后提示你是否安装
- 默认选择1就好了
- 这样就安装好了
source $HOME/.cargo/env
# 设置下Rust的环境变量
rustc --version
# 如果正常显示版本说明安装成功了
创建测试项目
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类似的功能。
// 查看版本
cargo --version
- 创建一个项目
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 配置文件的格式。
[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]
- 构建并运行
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!
- 也可以直接编译加运行
cargo run
- 快速检查是否可以编译
cargo check
使用VS Code作为开发工具
这里主要安装一些社区推荐的插件
- rust-analyzer:它会实时编译和分析你的 Rust 代码,提示代码中的错误,并对类型进行标注。你也可以使用官方的 rust 插件取代。
- rust syntax:为代码提供语法高亮。
- crates:帮助你分析当前项目的依赖是否是最新的版本。
- better toml:Rust 使用 toml 做项目的配置管理。可以帮你语法高亮,并展示 toml 文件中的错误。
- rust test lens:可以帮你快速运行某个 Rust 测试。
- Tabnine:基于 AI 的自动补全,可以帮助你更快地撰写代码。
使用国内的Rust镜像
# 切换到cargo
cd ~/.cargo/.
# 创建一个config文件
➜ .cargo touch config
➜ .cargo vim config
➜ .cargo chmod u+x config
- 往config写入内容
[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"