Rust学习笔记:1.2 两个典例及常用命令

2022-08-05 19:26:42 浏览数 (1)

两个典例

Hello, World

新建项目工程

  • 使用 Shell 命令创建普通工程
代码语言:javascript复制
mkdir hello_world
cd h*
code .

编写 Rust 程序

  • 程序文件后缀名:rs
  • 文件命名规范:hello_world.rs
  • (例子)
代码语言:javascript复制
fn main() {
	println!("Hello,World!");
}

编译与运行

  • 编译:rustc main.rs
  • 运行:
    • Windows:.main.exe
    • Linux/Mac:./main 运行结果如下:
代码语言:javascript复制
user@MacBook-Pro hello_world % mv hello_world.rs main.rs
user@MacBook-Pro hello_world % rustc main.rs            
user@MacBook-Pro hello_world % ./main
Hello,World!

程序解剖

  • 定义函数:fn main() {}
    • 没有参数,没有返回值
  • main 函数很特别:他是每个 Rust 可执行程序 最先运行的代码
  • 打印文本:println!("Hello,World!");
    • Rust 的缩进是 4 个空格而不是 Tab
    • println! 是一个 Rust macro (宏)
      • 如果是函数的话,就没有 !
    • "Hello,World!" 是字符串,他是 println! 的参数
    • 这行代码以 ; 结尾

编译和运行时单独的两步

  • 运行 Rust 程序之前必须先编译,命令为:rustc 源文件名
  • 编译成功后,会生成一个二进制文件
    • 在 Windows 上还会生成一个 .pdb 文件,里面包含调试信息
  • Rust 是 ahead-of-time 编译的语言
    • 可以先编译程序,然后把可执行文件交给别人运行(无需安装 Rust)
  • rustc 只适合简单的 Rust 程序

Hello, Cargo

Cargo

  • Cargo 是 Rust 的构建系统和包管理工具
    • 构建代码、下载依赖的库、构建这些库等
  • 安装 Rust 的时候会自动安装 Cargo
    • cargo --version
代码语言:javascript复制
xinggongwuyue@DioxideCN-MacBook-Air hello_world % cargo --version
cargo 1.60.0 (d1fd9fe2c 2022-03-01)

使用 Cargo 创建项目

  • 在项目目录中创建项目:cargo new hello_cargo
    • 项目名也是 hello_cargo
    • 会创建一个新的目录 hello_cargo
      • Cargo.toml
      • src 目录
        • main.rs
      • 初始化了一个新的 Git 仓库,.gitignore
        • 可以使用其他的 VCS:cargo new program --vcs
Cargo.toml
  • TOML(Tom’s Obvious, Minimal Language)格式,是 Cargo 的配置格式
  • [package]:是一个区域标题,表示下方内容是用来配置包(package)的
    • name:项目名
    • version:项目版本
    • authors:项目作者
    • edition:使用的 Rust 版本
  • [dependencies]:另一个区域的开始,它会列出项目的依赖项。
  • 在 Rust 里面,代码的 包/库 称作 crate
代码语言:javascript复制
[package]
name = "hello_cargo"
version = "0.1.0"
authors = ["Dioxide <dioxide-cn@qq.com>"]
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
src/main.rs
  • cargo 生成的 main.rs 在 src 目录下
  • 而 Cargo.toml 在项目顶层下
  • 源代码都应该在 src 目录下
  • 顶层目录可以放置:README、许可信息、配置文件和其他与程序源码无关的文件
  • 如果创建项目时没有使用 cargo,也可以把项目转化为使用 cargo:
    • 把源代码文件移动到 src 下
    • 创建 Cargo.toml 并填写相应的配置

构建 Cargo 项目

cargo build
  • cargo build
    • 创建可执行文件:
      • Linux/Mac: target/debug/hello_cargo
      • Windows: targetdebughello_cargo.exe
    • 运行可执行文件:
      • Linux/Mac: ./target/debug/hello_cargo
      • Windows: .targetdebughello_cargo.exe
    • 第一次运行 cargo build 会在顶层目录生成 cargo.lock 文件
      • 该文件负责追踪项目依赖的精确版本
      • 不需要手动修改该文件

运行 Cargo 项目

cargo run
  • cargo run:编译代码 执行结果
    • 如果之前编译成功过,且源码没有改变,那么就会直接运行二进制文件
代码语言:javascript复制
xinggongwuyue@DioxideCN-MacBook-Air hello_cargo % cargo run
   Compiling hello_cargo v0.1.0 (/Users/xinggongwuyue/Desktop/项目工程/rust/hello_cargo)
    Finished dev [unoptimized   debuginfo] target(s) in 0.32s
     Running `target/debug/hello_cargo`
Hello, world!
xinggongwuyue@DioxideCN-MacBook-Air hello_cargo % cargo run
    Finished dev [unoptimized   debuginfo] target(s) in 0.01s
     Running `target/debug/hello_cargo`
Hello, world!
cargo check
  • cargo check:检查代码,确保能通过编译,但是不产生任何可执行文件
  • cargo check 要比 cargo build 快得多
    • 编写代码的时候可以连续反复使用 cargo check 检查代码,提高效率。
为发布构建
  • cargo build --release
    • 编译时会进行优化
      • 代码会运行得更快,但是编译事件更长
    • 会在 target/release 而不是 target/debug 生成可执行文件
  • 两种配置
    1. 一个开发
    2. 一个正式发布

0 人点赞