Rust 语言特点
底层开发语言,直接对接硬件和内存,适合嵌入式开发,可以用Rust写操作系统或微控制器应用程序。
安装(我用的Ubuntu 20.04)
官网给的安装命令:
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh尴尬的是我没有curl……所以先装curl
sudo apt install curl过程中问我要怎么装,我回答说“随便”
Current installation options:
default host triple: x86_64-unknown-linux-gnu
default toolchain: stable (default)
profile: default
modify PATH variable: yes
1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>1
它回答说“装好了哈!但你用的话得重新开个命令行工具,因为配了Path还没生效。”
info: default toolchain set to 'stable-x86_64-unknown-linux-gnu'
stable-x86_64-unknown-linux-gnu installed - rustc 1.58.1 (db9d1b20b 2022-01-20)
Rust is installed now. Great!
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).
To configure your current shell, run:
source $HOME/.cargo/env
我重开命令行,输入:
rustc --version它输出:
rustc 1.58.1 (db9d1b20b 2022-01-20)Hello World
fn main() {
println!("Hello, world!");
}从这个Hello world程序看出:
主函数main、函数体的大括号、参数的小括号、字符串双引号、行尾的分号都和C语言一样。
不一样的是:函数用fn修饰
文档说:
1. 缩进是4个空格,不是tab
2.println!表示println是宏而不是函数
3."Hello, world!"是字符串参数
4.大部分代码行尾都有分号
第2点对我来说是新知识,高亮~
编译
rustc main.rs生成可执行文件main
执行
./main输出了 Hello, world!
改改函数:
我去掉println后面的叹号之后:

错误提示还挺贴心……改点代码,把println变成函数:
fn println() {
println!("Hello, world!");
}
fn main() {
println();
}自己定义了函数println,因为没猜到参数怎么传,决定之后再研究,函数调用也和C语言一样。结果输出了 Hello, world!
OK~
Cargo
Cargo是Rust自带的包管理工具,管理项目,库依赖啥的。
创建项目
cargo new guessing_gameguessing_game就是项目名,进入guessing_game文件夹,默认创建的文件如下:
.
├── Cargo.toml
└── src
└── main.rs
1 directory, 2 filesmain.rs是自动生成的代码,就是之前写的helloworld……
Cargo.toml是配置文件
[package]
name = "guessing_game"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]package下面的是项目信息,dependencies下面是项目依赖,目前新建的项目还没有依赖,之后在说。
还自动生成了git文件,如果已经有git repository了,还可以用cargo new --vcs=git,哇~
编译执行
cargo run Compiling guessing_game v0.1.0 (/home/jiamei/4T/projects/Rust/guessing_game)
Finished dev [unoptimized + debuginfo] target(s) in 0.46s
Running `target/debug/guessing_game`
Hello, world!.
├── Cargo.lock
├── Cargo.toml
├── src
│ └── main.rs
└── target
├── CACHEDIR.TAG
└── debug
├── build
├── deps
│ ├── guessing_game-944b310f5f7472e0
│ └── guessing_game-944b310f5f7472e0.d
├── examples
├── guessing_game
├── guessing_game.d
└── incremental
└── guessing_game-36jahz6htmtsm
├── s-g6b3vhf6cz-13stgm4-1bdvcgqozlnpl
│ ├── 2moq4rj82sej68rg.o
│ ├── 2t6sg9brgzot2swx.o
│ ├── 32x58so01r5343ud.o
│ ├── 3vj86a5a2ocm2mdc.o
│ ├── 4fyffxe5se1ji5e9.o
│ ├── 4t10gauqjj0yp3d7.o
│ ├── 55mzwfea6ybfc8it.o
│ ├── dep-graph.bin
│ ├── ore9o7c67cfrjku.o
│ ├── query-cache.bin
│ └── work-products.bin
└── s-g6b3vhf6cz-13stgm4.lock
9 directories, 20 files生成了这么多文件!!
cargo build 是编译,还可以加release参数
cargo build --release.
├── Cargo.lock
├── Cargo.toml
├── src
│ └── main.rs
└── target
├── CACHEDIR.TAG
├── debug
│ ├── build
│ ├── deps
│ │ ├── guessing_game-944b310f5f7472e0
│ │ └── guessing_game-944b310f5f7472e0.d
│ ├── examples
│ ├── guessing_game
│ ├── guessing_game.d
│ └── incremental
│ └── guessing_game-36jahz6htmtsm
│ ├── s-g6b3vhf6cz-13stgm4-1bdvcgqozlnpl
│ │ ├── 2moq4rj82sej68rg.o
│ │ ├── 2t6sg9brgzot2swx.o
│ │ ├── 32x58so01r5343ud.o
│ │ ├── 3vj86a5a2ocm2mdc.o
│ │ ├── 4fyffxe5se1ji5e9.o
│ │ ├── 4t10gauqjj0yp3d7.o
│ │ ├── 55mzwfea6ybfc8it.o
│ │ ├── dep-graph.bin
│ │ ├── ore9o7c67cfrjku.o
│ │ ├── query-cache.bin
│ │ └── work-products.bin
│ └── s-g6b3vhf6cz-13stgm4.lock
└── release
├── build
├── deps
│ ├── guessing_game-d800b172399c4e5a
│ └── guessing_game-d800b172399c4e5a.d
├── examples
├── guessing_game
├── guessing_game.d
└── incremental
14 directories, 24 files更多的文件……工程根目录的Cargo.lock是跟踪版本用的。还有cargo check的指令,是检查项目编译错误的。
签名之后再研究。