目录
1. rust安装
rust提供了一个命令行的工具rustup,可以用来管理和安装rust的版本以及相关的工具集。
那么首先,来下载和安装rustup这个工具(linux为例):
# curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf > rustup.sh
# sh rustup.sh
默认安装了最新版本的rust的语言包和编译器,需要注意的是,rust没有单独的链接器(linker),需要单独安装第三方的linker。在linux环境下,通常使用GCC或Clang就可以了。链接器将多个目标文件,链接成为一个目标文件(可执行文件或库)。 例如:ubuntu,执行apt-get install build-essential即可。
-
rust检查
# rustc --version rustc 1.65.0 (897e37553 2022-11-02)
版本号格式:x.y.z(major.minor.patch),主版本号.次版本号.patch版本号(commit号)。
-
rust更新:
# rustup update
-
rust卸载:
# rustup self uninstall
2. Hello Rust
安装完成rust,手动来写第一个hello world的rust程序。
-
创建工程目录
// 创建工程目录
# mkdir hello
# cd hello/
# touch main.rs
# vim main.rs
// main.rs
fn main()
{
println!("hello rust!");
}
fn main() {}
定义了一个rust函数,这里的main函数是特殊的函数,是rust可执行程序的执行点。该函数无参数且无返回值。与C语言一致,()小括号中是函数参数,{}内是函数体。
rust官方提供了一个格式化源代码的工具rustfmt,如下:
# rustfmt main.rs
# cat main.rs
fn main() {
println!("hello rust!");
}
// 编译+运行
# rustc main.rs
# ls main main.rs
# ./main hello rust!
rust使用4个空格进行缩进,而非Tab。
println!实际是一个rust宏,包含!号的一般都是rust提供的宏函数,普通函数的调用,不包含!号。
rust源代码以分号;结束一行表达式(expression)的定义,与C语言一致。
3. Cargo包管理器
单个rust源代码文件的编译比较简单,用rustc足够了。但是项目比较大时,应该使用cargo项目(包)管理器来管理rust的源代码文件,以及做代码的共享。
3.1 cargo简介
cargo是rust项目的构建系统和包管理器。可以使用该工具管理rust工程的多个任务,例如:编译代码、下载依赖库、构建库等。
随着工程项目的复杂度提升,会添加一系列的rust库依赖,使用cargo十分方便地管理依赖包(下载和版本)。因此,专集的后续章节都使用cargo来构建项目。
安装rustc编译器的同时,就会按照cargo,如下:
3.2 cargo创建项目
# cargo new hello_cargo
Created binary (application) `hello_cargo` package
# cd hello_cargo/
# ls -sl
total 8
4 -rw-r--r-- 1 root root 180 11月 13 17:07 Cargo.toml
4 drwxr-xr-x 2 root root 4096 11月 13 17:07 src
# ls src
main.rs
# cat Cargo.toml
[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
cargo的package section指定了当前工程构建的包信息,dependencies section指定了当前工程依赖的第三方包信息。
在rust中,代码(依赖)包被称作crates。当前工程中,不依赖其他包,因此为空。
cargo假设rust的源代码位于src目录中,最顶层目录中只存放README,license文件,配置文件等代码无关的文件。
3.3 构建和运行项目
# cargo build
Compiling hello_cargo v0.1.0 (/root/rust/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 0.31s
# cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.00s
Running `target/debug/hello_cargo`
Hello, world!
cargo check子命令快速检查源代码语法是否正确,而不必编译。
3.4 debug和release版本构建
直接使用cargo build构建的是debug版本,可以使用cargo build --release
来生成release版本的构建。release版本是经过编译器优化的,运行更快。
总结:cargo管理的各个项目(包)之间的版本依赖关系,通常在新的项目目录可以直接执行cargo build
来构建工程项目。
关于作者:
犇叔,浙江大学计算机科学与技术专业,研究生毕业,而立有余。先后在华为、阿里巴巴和字节跳动,从事技术研发工作,资深研发专家。主要研究领域包括虚拟化、分布式技术和存储系统(包括CPU与计算、GPU异构计算、分布式块存储、分布式数据库等领域)、高性能RDMA网络协议和数据中心应用、Linux内核等方向。
专业方向爱好:数学、科学技术应用
关注犇叔,期望为您带来更多科研领域的知识和产业应用。
内容坚持原创,坚持干货有料。坚持长期创作,关注犇叔不迷路