5分钟速读之Rust权威指南(一)

452 阅读4分钟

开始

敝人前端出身,对于底层语言一窍不通,最近经常看到关于rust的文章标题:rust被评为最喜爱的编程语言,rust是代替c、c++的编程语言,rust是安全的编程语言。

本着好奇心看了一下rust的官网:www.rust-lang.org/zh-CN/ ,页面非常简洁,门上钉着几个大字:rust是一门赋予每个人构建可靠且高效软件能力的语言。 大概浏览了一遍,看到可以将rust编译成wasm,瞬间感觉rust这东西距离前端很近,心想,如今前端卷的这么厉害,何不另辟蹊径,一方面未来wasm是趋势的话,懂rust自然是对于前端工作者如虎添翼,另一方面,以后做前端没意思了,还可以转向底层开发方向。

rust的官网有很完整的从入门到精通的教程,《rust权威指南》就是官方出品的入门教程,如今中文数据也已经出版,不过官网也有免费的电子书,本人读下来用了两个月的时间,为了让你快速了解这门语言,接下来的一系列文章就是通过在阅读时的笔记整理出的这本书的速读版本,也许会引起你的兴趣。另外,由于本人是一位前端工作者,文中可能会使用JS,TS概念尝试理解rust,有可能不是很贴切,您也可以自行翻阅原书来建立自己的理解。

语法尝鲜

  • let用于声明变量,但是默认变量是不可变的,类似于JS中的const。如果希望变量可变,前边需要加mut(mutation)
let foo = 5 // 不可变变量
foo = 2 // error

let mut bar = 5 // 可变变量
bar = 2 // okay

let _bar = 5; // 变量只声明不使用会报错,可以添加_开头来防止编译器报错
  • 常量,名字必须全部大写,显式注明类型
const YEAR: u32 = 365;
  • 允许多次声明同名的新变量来覆盖(rust中称之为:隐藏shadow)旧变量的值
// 一般在类型转换中使用这种操作
let foo = String:new("100")
let foo: u32 = foo.trim().parse() // 100
  • 控制台输出方法:println!()
let foo = 5;
let bar = 6;
// 第一个参数是模板,用大括号表示占位,从第二个参数起,依次替换模板中的大括号
println!("foo = {}, bar = {}", foo, bar);
// foo = 5, bar = 6

包管理器cargo

cargo是rust官方的包管理工具,可用于快速初始化一个项目或者贡献自己的包到rust包社区:crates.io/

官方文档:doc.rust-lang.org/cargo/index…

Cargo.toml

rust包配置文件,同样使用semver版本,在尝试时发现与npm的package.json有些区别,即使不加^号,也表示取第二版本号,而package.json是允许锁死版本号的。

Cargo.lock

同样用于锁定版本号,如果需要更新包版本,可以使用cargo update或者手动更改Cargo.toml中对应包的版本号

Cargo常用命令

# 初始化一个包,相当于npm init,前提是需要先手动创建文件夹
cargo init 

# 手动创建一个包,并根据命名创建文件夹
cargo new [project-name] 

# 编译产出结果,或用于安装新依赖包
cargo build

# 只检查语法,不进行输出
cargo check

# 安装项目依赖,必须加--path参数,建议用cargo build来安装依赖
cargo install --path ./

# 运行项目
cargo run

配置cargo安装源

国内使用rust官方源,安装速度很慢,可以改成国内源来加速安装

  1. 进入cargo文件夹: cd ~/.cargo
  2. 创建config文件: touch config
  3. 写入配置
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
replace-with = 'ustc'

[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"

rustc

rustc命令可以将rust文件直接编译成二进制可执行文件,编译后的文件可在win和mac上直接运行。

官方文档:doc.rust-lang.org/rustc/index…

rustup

rustup是rust核心,用于更新rust等,例如rustup update

rustdoc

rustdoc命令用于为Rust项目生成文档。在基本层面上,Rustdoc将包的根文件或Markdown文件作为一个参数,并生成HTML、CSS和JavaScript。

官方文档:doc.rust-lang.org/rustdoc/ind…

一个完整的Hello World项目

安装rust:

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

确认安装完成:

rustc --version
# rustc 1.52.1 (9bc8c42bb 2021-05-09)

初始化helloworld项目:

cargo new helloworld

目录结构如下:

helloworld
├── Cargo.toml
└── src
    └── main.rs

在src/main.rs中编写代码:

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

运行项目:

cargo run
// Hello, world!