Rust 官网的入门教程已经很详情,本文只是基于官方文档做一些补充
请配合官方文档《Rust 入门:快速配置 Rust 开发环境并编写一个小应用》食用
一、VS Code 扩展
在正式开始编写 Rust 之前,可以先安装一些扩展插件
1. rust-analyzer (核心插件, 如同 vetur 之于 vue)
2. Better TOML ( .toml 文件高亮)
二、安装并创建项目
window:
下载并运行 rustup-init.exe
选第 2 项,然后有个二次确认,输入 y 并回车,看到以下信息:
输入 2 开始自定义配置
分别需要输入 x86_64-pc-windows-gnu,nightly,回车,回车
最终配如上,然后输入 1 开始安装
macOS / Linux:
如果是 macOS 或者 Linux, 直接在终端运行以下命令安装 Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
安装的同时会安装 Cargo,这是 Rust 的构建工具和包管理器
安装结束后可以通过 cargo --version 检查是否安装成功
然后可以使用 cargo new 创建项目
比如在 ~/project 目录下执行 cargo new 最终就会生成新项目 ~/project/hello-rust
创建的项目有会有以下文件
hello-rust
|- Cargo.toml
|- src
|- main.rs
但如果提前安装了 VS Code 插件 rust-analyzer, 就会多出 target 目录和 Cargo.lock
这里的 Cargo.toml 就像是前端项目中的 package.json,
// 在 Rust 中,依赖包被称作 crate
Cargo.lock 就像是 package-lock.json, 记录了项目依赖的精确版本,不要手动修改!
而 target 目录是项目构建的产物,后面会介绍
现在已经创建了一个简单的 rust 项目,接下来在项目的根目录下执行以下命令
rustc src/main.rs
执行上面的代码之后,会当前目录生成一个可执行的 main 文件(window 系统会生成 main.exe),这个文件就是 src/main.rs
对于单个文件可以采用 rustc 这种编译方式,但对于一个完整项目,需要使用cargo来编译
三、添加依赖
Rust 中的代码包被称为 crate,统一管理在 crates.io,就像是 npm
接下来会用到 ferris-says 这个库,可以在 Cargo.toml 手动追加 dependencies 信息
也可以通过命令行的方式添加(就像 yarn add)
cargo add ferris-says@0.2
// cargo 包的版本规则和 npm 一样,可以采用 ^ ~ * 等符号,如 ^0.2
然后开始编辑 src/main.rs文件,这个文件是 cargo 项目的入口文件,也称作“根”
首先删掉 main.rs 中的所有内容,然后添加这一行代码:
use ferris_says::say;
这行代码的含义是:从 ferris_says 这个包 (crate) 里面导出了 say 这个函数,类似于:
import { say } from 'ferris_says';
最终以下面的代码替换 main.rs 中的内容
use ferris_says::say;
use std::io::{stdout, BufWriter};
fn main() {
let stdout = stdout();
let message = String::from("Hello Rust!");
let width = message.chars().count();
let mut writer = BufWriter::new(stdout.lock());
say(message.as_bytes(), width, &mut writer).unwrap();
}
四、编译项目
接下来使用 cargo 编译项目,在项目的根目录下执行以下命令
cargo build
然后 Cargo 会安装项目中用到的依赖包,生成 Cargo.lock 文件,并创建开发调试文件 target/debug/*
不过在开发的时候一般不需要使用 cargo build,而是使用 cargo run
这个命令会编译代码,并在终端执行编译后的文件:
这里我连续执行了两次 cargo run,可以看到第一次 run 有三个阶段: Compiling -> Finished -> Running
而第二次 run 由于没有代码变更,所以直接跳过了 Compiling 阶段
开发完成后,可以使用 cargo build --release 编译
这个命令的编译时间更长,但编译后的代码会运行的更快,体积更小
编译后的文件会生成到 target/release 目录下