RUST入门.md

RUST入门

目录

Hello World

mkdir -p projects/hello_world/
cd projects/hello_world

main.rs文件

fn main() {
    println!("hello, world!");
}

编译和运行

rustc main.rs
./main

格式化:rustfmt

Cargo

Cargo 是 Rust 的构建系统和包管理器。

hello

构建如下:

  1. cargo new hello_world --bin

    --bin为默认参数,表示构建二进制程序。可选--lib表示构建库。

    nsfoxer@nsfoxer-pc ~/temp> cargo new hello_world --bin
         Created binary (application) `hello_world` package
    nsfoxer@nsfoxer-pc ~/temp> tree hello_world
    hello_world
    ├── Cargo.toml
    └── src
        └── main.rs
    
    1 directory, 2 files
    

    cargo会同时构建git项目。使用--vcs none禁用git存储。

  2. 编译:

    cargo build

    将获取所有依赖项。

    nsfoxer@nsfoxer-pc ~/t/hello_world> tree .
    .
    ├── Cargo.lock
    ├── Cargo.toml
    ├── src
    │   └── main.rs
    └── target
        ├── CACHEDIR.TAG
        └── debug
            ├── build
            ├── deps
            │   ├── hello_world-efb3cc30327658a6
            │   └── hello_world-efb3cc30327658a6.d
            ├── examples
            ├── hello_world
            ├── hello_world.d
            └── incremental
                └── hello_world-2bu9x4t5793bs
                    ├── s-g1qy781nco-1nkogqh-2hbtkajf7iavr
                    │   ├── 1afbzx1y0x1dbpio.o
                    │   ├── 1ko7w99wy4kz2chh.o
                    │   ├── 28cobucdo6rhinaa.o
                    │   ├── 2goevba305ege8v6.o
                    │   ├── 4d0psjpawt67vlja.o
                    │   ├── 5byta3abs29cbrhj.o
                    │   ├── 5dygtqqmhu41ip90.o
                    │   ├── dep-graph.bin
                    │   ├── gfq0hw1bwbsq84d.o
                    │   ├── query-cache.bin
                    │   └── work-products.bin
                    └── s-g1qy781nco-1nkogqh.lock
    
    9 directories, 20 files
    

    Cargo.lock包含依赖相关信息。使用--release开启编译优化。

    Caogo.toml包含项目的各种元信息。

  3. 运行:

    ./target/debug.hello_world

可以使用cargo run进行编译和运行。

可以使用cargo check进行代码检查。

目标

cargo允许Rust项目声明其各种依赖,并保证始终可重复构建。

  1. 引入两个含有各种信息的元数据文件;
  2. 获取并构建项目的依赖项;
  3. 调用rustc或其他工具进行构建;
  4. 使用 Rust 项目的约定(规范/风格)。

依赖

crates.io是 Rust 社区的*存储库,用作发现和下载包的位置。cargo默认配置为,使用它来查找请求的包。

添加依赖

[dependencies]
time = "0.1.12"
regex = "0.1.41"

cargo build将会获取依赖。如果regexcrates.io上更新了,在我们选择cargo update之前,我们仍会使用相同的版本进行构建.

文件布局

.
├── Cargo.lock 			
├── Cargo.toml
├── benches  	# 基准测试
│   └── large-input.rs
├── examples 	# 示例
│   └── simple.rs
├── src
│   ├── bin # 其他可执行文件
│   │   └── another_executable.rs
│   ├── lib.rs # 库文件
│   └── main.rs # 可执行文件
└── tests # 集成测试
    └── some-integration-tests.rs

Carogo.toml && Carogo.lock

  • Cargo.toml是从广义上描述你的依赖,并由你编写.
  • Cargo.lock包含有关您的依赖项的确切信息。它由 Cargo 维护,不应手动编辑.
  • 构建其他项目要依赖的库,请将Cargo.lock放置在你的.gitignore
  • 构建可执行文件,如命令行工具或应用程序,请检查Cargo.lock位于git管理下。
[dependencies]
rand = { git = "https://github.com/rust-lang-nursery/rand.git", rev = "9f35b8e" }

如上,依赖于github上的项目,当未指定其他信息时默认依赖github上的最新版本。例子中rev指定github的版本。

Cargo.lock会记录项目第一次构建时依赖版本,此时不需要进行手动添加加具体版本。

当我们准备选择,更新库的版本时,Cargo 会自动重新计算依赖关系,并为我们更新内容:

$ cargo update           # updates all dependencies
$ cargo update -p rand   # updates just “rand”

测试

cargo test:会查找srctests的测试

上一篇:比较好用的vscode vue 格式化配置.md


下一篇:AngularJs 12 使用 Editor.md 实现 Markdown 编辑器 并解决 因为样式冲突导致 列表(ul、ol) 没有前缀数字、符号的bug