侧边栏壁纸
博主头像
Dioxide-CN博主等级

茶边话旧,看几许星迢露冕,从淮海南来。

  • 累计撰写 50 篇文章
  • 累计创建 49 个标签
  • 累计收到 21 条评论

目 录CONTENT

文章目录

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

Dioxide-CN
2021-11-13 / 0 评论 / 2 点赞 / 119 阅读 / 2,575 字
温馨提示:
本文最后更新于 2022-08-02,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

两个典例

Hello, World

新建项目工程

  • 使用 Shell 命令创建普通工程
mkdir hello_world
cd h*
code .

编写 Rust 程序

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

编译与运行

  • 编译:rustc main.rs
  • 运行:
    • Windows:.\main.exe
    • Linux/Mac:./main
      运行结果如下:
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
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 目录
      • 初始化了一个新的 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
[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: target\debug\hello_cargo.exe
    • 运行可执行文件:
      • Linux/Mac: ./target/debug/hello_cargo
      • Windows: .\target\debug\hello_cargo.exe
    • 第一次运行 cargo build 会在顶层目录生成 cargo.lock 文件
      • 该文件负责追踪项目依赖的精确版本
      • 不需要手动修改该文件

运行 Cargo 项目

cargo run

  • cargo run:编译代码 + 执行结果
    • 如果之前编译成功过,且源码没有改变,那么就会直接运行二进制文件
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. 一个正式发布
2

评论区