2021 年了,学一下 Rust 吧。
参考官方文档,按照国际惯例,先来写一个 Hello World 程序。
安装
对比其他编程语言的安装方式,rust 除了支持源码编译外,还提供了一个安装器( rustup )来快速安装。
通过命令行安装 rustup
。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
修改环境变量:
export PATH=PATH:$HOME/.cargo/bin
查看版本
$ rustup --version
rustup 1.23.1 (3df2264a9 2020-11-30)
$ rustc --version
rustc 1.49.0 (e1884a8e3 2020-12-29)
$ cargo --version
cargo 1.49.0 (d00d64df9 2020-12-05)
rustup
是 rust 版本管理器
rustc
是 rust 编译器
cargo
是 rust 包管理工具。
编写 rust 代码
创建一个 rust 文件,开始编写 Hello World 代码
vim hello.rs
创建代码文件,编写代码:
fn main() {
println!("Hello World!");
}
跟一般的编译型语言一样,rust 的执行过程也分为编译和运行两部分。
先编译 rust 代码
$ rustc hello.rs
编译完成在同目录下生成了同名的可执行二进制文件
运行可执行文件,可以看到控制台输出了 Hello World!
$ ./hello
Hello World!
包管理配置
就像 nodejs 使用 npm
,php 使用 composer
、python 使用 pypi
一样
rust 使用 cargo
作为包管理工具
一般的包管理平台都是用的境外服务器,在国内下载依赖包通常需要配置镜像来加速。
使用中科大的 rust 镜像,修改 cargo
配置文件:vim ~/.cargo/config
写入镜像配置
[source.crates-io]
replace-with='ustc'
[source.ustc]
registry="https://mirrors.ustc.edu.cn/crates.io-index"
后续安装 rust 依赖包的时候,就会使用配置的镜像进行拉取。
VS Code 开发配置
我们一般使用 VS Code 作为日常的开发编辑器,如果用来开发 rust 程序,需要安装几个插件
- Rust 官方插件,提供 rust 代码检查、格式化、自动完成等功能。
- Code Runner,通用代码运行插件,可编译单个 rust 文件。
在代码编写窗口,调用 Code Runner 将会使用 rustc
工具对代码进行编译,需要提前配置 rustc
编译工具的位置
{
"code-runner.executorMap": {
"rust": "/root/.cargo/bin/rustc"
}
}
可以为 Code Runner 插件绑定一个运行快捷键:
[
{
"key": "cmd+r",
"command": "code-runner.run"
},
{
"key": "ctrl+alt+n",
"command": "-code-runner.run"
}
]
在编写 rust 代码过程中,按下快捷键 cmd+r
就可以实时编译了。
rust 项目开发
在完成了前面的试水之后,我们可以开始用 rust 开发项目了。
使用 cargo
创建一个新项目
$ cargo new rust-demo
Created binary (application) `rust-demo` package
生成的 rust-demo 项目的目录结构为
$ tree
.
|-- Cargo.toml
`-- src
`-- main.rs
Cargo.toml 为项目的配置文件,定义了项目的基本信息,依赖的包信息等。
文件内容类似:
[package]
name = "rust-demo"
version = "0.1.0"
authors = ["艾逗笔 <me@idoubi.cc>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
src 目录下是项目的源代码。
编写完项目代码后,在项目根目录运行 cargo run
完成项目的编译与运行。
$ cargo run
Compiling rust-demo v0.1.0 (/data/code/rust-demo)
Finished dev [unoptimized + debuginfo] target(s) in 0.66s
Running `target/debug/rust-demo`
Hello, world!
如果运行 cargo build
,则只会完成编译过程。编译生成的内容在 target 目录下。
$ tree target
target
|-- CACHEDIR.TAG
`-- debug
|-- build
|-- deps
| |-- rust_demo-974597d25eb24ddf
| `-- rust_demo-974597d25eb24ddf.d
|-- examples
|-- incremental
| `-- rust_demo-chnzk7pgkxdz
| |-- s-fvfqrhmisp-1vg0edz-jzrwf6vs8k72
| | |-- 1c13zz2y1hzbcwk8.o
| | |-- 1d3qur61nopxku2b.o
| | |-- 1nfhfokemfsf2727.o
| | |-- 31xgledb84l6sbed.o
| | |-- 49i6i3y832wqo40p.o
| | |-- 4my21cnst159etff.o
| | |-- 4siqxfrw9lh3axbk.o
| | |-- 5cdc43ijbx4jimih.o
| | |-- dep-graph.bin
| | |-- query-cache.bin
| | `-- work-products.bin
| `-- s-fvfqrhmisp-1vg0edz.lock
|-- rust-demo
`-- rust-demo.d
7 directories, 17 files
可以直接运行编译后的二进制文件
$ ./target/debug/rust-demo
Hello, world!