Rust

Rust是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。

(P.S:虽然Rust的好大家都知道,但是目前2021年在国内大概还是需要另外学一门语言来谋生orz,但目前的岗位需求已经比2020年好一些了)

常用框架

  • Actix - Rust Web后端常用框架 https://actix.rs/docs/

Install

其实除了windows系统外,其他系统在联网环境下都可以通过脚本进行安装。

参考官网,一句条命令可完成。

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

环境变量配置参考安装后的提示。

To get started you may need to restart your current shell.
This would reload your PATH environment variable to include
Cargo's bin directory ($HOME/.cargo/bin).    # zsh用这个

To configure your current shell, run:
source $HOME/.cargo/env           # 默认bash用这个

验证安装是否成功

[root@localhost ~]# rustc -V
rustc 1.52.1 (9bc8c42bb 2021-05-09)
[root@localhost ~]# rustup -V
rustup 1.24.2 (755e2b07e 2021-05-12)
info: This is the version for the rustup toolchain manager, not the rustc compiler.
info: The currently active `rustc` version is `rustc 1.52.1 (9bc8c42bb 2021-05-09)`

QuickStart

书籍推荐

1.首推荐官方的The Rust Programming Language

如果本地已安装好rust,可以使用这个命令在本地查看官方文档:

rustup docs --book

备注:虽然实体书目前已经出了中文版《Rust权威指南》,但是该实体书是基于18年的rust版本编写的,所以建议还是直接查看官方最新文档。

2.推荐国人写的,毕竟有母语学习优势,后面熟悉了可以直接啃英文文档。

  • 深入浅出Rust -- 据说适合初学者。
  • Rust编程之道 -- 据说原理讲解清晰。

为什么是据说?因为我现在正忙着学Go,目前的确没精力同时学习Rust了,后面再来填这个坑,阅读简评以后会发到我的读书雷达

3.Rust标准库文档

关于编译

hello world程序可以使用rustc,但是工程级rust项目官方建议使用cargo

Rust新功能历程

RFC(Request For Comments) -> Nightly -> Beta -> Stable

Cargo

Cargo 是 Rust 的构建系统和包管理工具。

主要负责三个工作:

构建build代码。
下载你代码 依赖dependencies 的 包装箱crate。
编译 你的源码 和 包装箱crate。

检查Cargo是否正常安装可以用这句'cargo --version'

crate概念

crate是组织和共享代码的基本构件块。

  • binary crate:可执行的,需有main函数
  • library crate:没有main函数,无法执行。定义一些功能,可共享使用。

crate入口点 - binary crate:src/main.rs - library crate:src/lib.rs

package概念

package是由1个或多个crates组成,包含Cargo.toml文件(描述如何构建这些crates)

  • 可有多个binary crates
  • 最多只能有1个library crate
  • 至少得有1个crate

Module 模块概念

将代码组织成更小、更易管理的单元的方法

  • 使用mod声明
  • 可有子模块
  • 路径 path
  • public vs private
  • 引用 use

Path 路径

  • 绝对路径:从crate模块开始
  • 相对路径:从所在模块开始,使用super往上找,或使用self从当前位置向下找

use 引用路径

  • function:引用到父模块
  • struct、enum...:引用完整路径
  • 但如果引用的项目同名:1.可以加上父级模块引用 2.使用as关键字给引用起个别名

可见性 Private vs Public

  • 所有function、method、modules、enums等默认对父模块是private私有的
  • 父模块中的项不能使用子模块中的私有项
  • 子模块中的项可以使用其祖先模块中的项
  • 使用pub关键字可以让其变为public公有的
  • 相对路径可使用super、self关键字
  • struct需要struct本身和各字段单独设置pub
  • enum只要本身是pub,那么所有变体都是pub的

Create Project

cargo new project1

cargo new project_lib --lib

cargo常用命令

cargo doc --open  # 查看项目文档

cargo add serde  # 新增第三方库,serde是第三方库的名称
or
# 在Cargo.toml文件的[dependencies]增加(rustrover会自动搜索补全)

推荐阅读

使用Cargo的Rust项目结构

project_name
|-  src                     // 放置源文件的目录
    |- main.rs / lib.rs     // 源文件
|-  Cargo.toml              // Cargo的配置文件

要使用cargo工具,必须在项目的根目录下建有其配置文件。(注意: Cargo.toml的C是大写)

Cargo.toml

TOML(Tom’s Obvious Minimal Language)格式。简单理解就是ini的进化版。

社区

计划的学习路线

  1. 入门

  2. Rust 编程语言教程 with RustRover -- 2025,根据官方文档更新,零基础入门推荐。https://doc.rust-lang.org/stable/book/

-《The Rust Programming Language》,中文出版物是《Rust权威指南》。

或者找点其他教程,主要是熟悉语法。

  1. 进阶

  2. Zero To Production In Rust An introduction to backend development - 内容不错,推荐看看,已有中文版《从零构建Rust生产级服务》。

  3. 该书源码zero-to-production

国内已出版:张老师的《Rust编程之道》和范老师的《深入浅出Rust》。(个人觉得时间有限的2选1,前者极客时间也有配套学习视频)

必读资料:

  • 《Rust By Example》,这本书可以当精简手册来查询,提供了很多的Example。

  • std - Rust 、《The Reference》、《Rust Compiler Error Index 》:标准库、语法手册、编译错误示例,这三大件几乎是日常必备的资料需要时常翻阅和查询,

  • 提高

《The Rustonomicon》又翻译为《Rust死灵书》,但是一直没写有写完。但要能建立起对Rust的深入理解,这本书必不可少。 B站 令狐一冲的视频

Writing an OS in Rust 这一系列博客是你最好的学习材料。