开始学rust, 通过边学边总结”速学rust从入门到放弃系列”文章,达到熟练使用rust的目的。普通程序员其实追求深度到后面还是很难的,那么深度不够,那就广度来凑。开整,Let’ s rust

rust环境篇

rust安装

无论使用何种系统, 均可以根据 Rust 官方网站提供的 rustup-init 工具完成 Rust 的安装. rustup-init 下载地址:

https://www.rust-lang.org/zh-CN/tools/install.

网站会自动识别你的操作系统并给出提示, 遵循网站提示一步一步执行即可.

当安装完成后, 可使用以下命令进行测试, 如果正确输出版本号则表明安装已经成功

 1rustc --version
 2# rustc 1.64.0 (a55dd71d5 2022-09-19)
 3
 4which  rustc     #mac 系统默认是装在 ~/.cargo下的
 5
 6# /Users/mac/.cargo/bin/rustc
 7
 8ls -al /Users/mac/.cargo/bin
 9
10total 268112
11drwxr-xr-x  15 mac  staff       510 10  4 23:23 .
12drwxr-xr-x   4 mac  staff       136 10  4 23:23 ..
13-rwxr-xr-x  13 mac  staff  10555952 10  4 23:23 cargo
14-rwxr-xr-x  13 mac  staff  10555952 10  4 23:23 cargo-clippy
15-rwxr-xr-x  13 mac  staff  10555952 10  4 23:23 cargo-fmt
16-rwxr-xr-x  13 mac  staff  10555952 10  4 23:23 cargo-miri
17-rwxr-xr-x  13 mac  staff  10555952 10  4 23:23 clippy-driver
18-rwxr-xr-x  13 mac  staff  10555952 10  4 23:23 rls
19-rwxr-xr-x  13 mac  staff  10555952 10  4 23:23 rust-gdb
20-rwxr-xr-x  13 mac  staff  10555952 10  4 23:23 rust-gdbgui
21-rwxr-xr-x  13 mac  staff  10555952 10  4 23:23 rust-lldb
22-rwxr-xr-x  13 mac  staff  10555952 10  4 23:23 rustc
23-rwxr-xr-x  13 mac  staff  10555952 10  4 23:23 rustdoc
24-rwxr-xr-x  13 mac  staff  10555952 10  4 23:23 rustfmt
25-rwxr-xr-x  13 mac  staff  10555952 10  4 23:23 rustup

开发工具准备

使用 vscode 并配置 rust-analyzer 插件在目前看来是一个比较好的选择.

  • 安装 vscode
  • 在 vscode 的插件市场中, 安装 rust-analyzer 插件

rust-analyzer 包含代码提示, 代码检查, 自动补全等多种功能.

hello world

main.rs

1fn main() {
2    println!("Hello, world!"); // !宏
3}
1rustc main.rs #生成main 文件
2./main 

cargo入门、GDB调试

1cargo new `rs` #生成叫rs的一个项目
2cargo run    # 运行
3cargo build #会生成一个target 目录 
1[package]
2name = "rs" # build 出来就是一个rs 二进制文件
3version = "0.1.0"
4edition = "2021" # 发布版本 目前是2021 
5
6# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7
8[dependencies]

vscode 安装 Native Debug 插件、CodeLLDB 插件

image-20221005230652777

基本类型、函数、模块基本使用

基本类型

 1fn main() {
 2    let username="crmao";
 3    println!("{}",username);
 4    let a:u8=12;
 5    let b:i8=127;
 6    let c:i32=24;
 7    println!("{} {} {}",a,b,c);  
 8    println!("i8 max_value:{},i8 min_value {}",i8::max_value(),i8::min_value());
 9}
10
11/*
12crmao
1312 127 24
14i8 max_value:127,i8 min_value -128
15*/

rust函数建议用 小写可以加下划线的名字

1fn main() {
2    get_something();
3}
4
5fn get_something(){
6    let username="crmao";
7    println!("my name is {}",username)
8}
 1#![allow(non_snake_case)] // ,加上这个就不提示
 2
 3fn main() {
 4    GetSomething();
 5}
 6
 7fn GetSomething(){
 8    let username="crmao";
 9    println!("my name is {}",username)
10}

模块

模块的方法默认是私有的,pub就是公有

 1
 2fn main() {
 3    lib::get_something();
 4}
 5mod lib { //lib是模块名
 6    pub fn get_something(){
 7     let username="crmao";
 8     println!("my name is {}",username);
 9     } 
10 }

调用外部文件函数方法

目录如下

1➜  $ tree src
2src
3├── lib.rs
4└── main.rs

lib.rs

1pub mod helper {  //模块也要加pub才能被外部调用
2    pub fn get_something(){
3     let username="crmao";
4     println!("my name is {}",username);
5     } 
6 }

main.rs

1mod lib;
2fn main() {
3    lib::helper::get_something(); //调用 lib模块下 helper模块的 get_something方法
4}