北京和君网站建设,wordpress图片关联文章,医院网站建设中标,网站网页的区别与联系以下内容为本人的学习笔记#xff0c;如需要转载#xff0c;请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/ceMTUzRjDoiLwjn_KfZSrg 这几年 Rust 可谓是炙手可热的新兴编程语言了#xff0c;而且被投票为最受程序员喜爱的语言。它很现代#xff0c;专门…以下内容为本人的学习笔记如需要转载请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/ceMTUzRjDoiLwjn_KfZSrg 这几年 Rust 可谓是炙手可热的新兴编程语言了而且被投票为最受程序员喜爱的语言。它很现代专门为了性能、可靠和生产力而设计说人话就是非常快不容易崩溃开发效率高。
那么如此热门的计算机语言它如何去构建软件和管理构建工程呢
Rust 语言的开发团队提供了标准方案利用 rust 自带的一个包 Cargo 帮助开发人员灵活高效地构建代码。Cargo 提供下载各式各样的库或者工程依赖项发布自己的包和上传到 crates.io 共享给所有开发者等。
下面让我们一起来看看什么是 cargo它可以如何帮助我们开发者构建自己的 rust 工程。关于怎么安装 rust 和 cargo 相关可以查看八戒的另一篇文章《简明快速配置 Rust 工具链》。 本文以下演示都是基于 ubuntu 18.04.6。 手动构建和运行
先来看看直接使用 rust 的编译器 rustc 编译 hello world 示例。准备一个 rust 源码文件输入以下内容
fn main() {println!(Hello rust world!);
}rust 源码文件的后缀为 (.rs)所以上面的文件保存为 hello.rs。
调用 rustc 编译文件 hello.rs
$ rustc hello.rs编译没有错误返回意味着成功结束这时生成了可执行文件 hello与输入源文件同名
$ ll
total 4544
drwxrwxrwx 1 user user 512 Nov 14 00:55 ./
drwxrwxrwx 1 user user 512 Nov 14 00:54 ../
-rwxrwxrwx 1 user user 4652168 Nov 14 00:55 hello
-rwxrwxrwx 1 user user 50 Nov 14 00:54 hello.rs再手动执行文件 hello 看看输出
$ ./hello
Hello rust world!这样的构建过程一切挺顺利的尤其是我们突然灵光一闪脑袋有个想法需要快速验证时这样也不错。但是这只是编译了一个源码文件要是我们的开发工程异常庞大源码文件去到上百上千个文件时再使用编译器 rustc 手动编译真的太费劲啦。就好像现在的大型 C/C 工程基本都用 cmake 管理一样咱的 rust 工程有 cargo。
创建一个 package
Cargo 是 rust 团队的指定构建系统和包管理器可以利用它快速创建一个空的 package 工程执行构建的时候 cargo 会根据配置文件内容自动下载依赖项等。相信大伙在碰到 rust 的另一个概念 crate 是会感到很困惑其实一般情况下 package 都可以被当做是 crate就是说可以互换。
下面来看看怎么创建新 package 工程
$ cargo new hello_rustCreated binary (application) hello_rust package上面示例使用了 cargo new 指令创建一个名字是 hello_rust 的新 package 工程然后用 tree 指令看看都自动创建了哪些文件和路径
$ cd hello_rust/
$ tree .
.
├── Cargo.toml
└── src└── main.rs1 directory, 2 files可以看到有个 Cargo.toml 文件它是 cargo 构建 package 工程的配置文件不过看起来有点陌生先继续看其它内容。
在 src 文件夹下有个 rust 源码文件 main.rs打开看看里边的内容
$ cat src/main.rs
fn main() {println!(Hello, world!);
}原来 main.rs 包含了一个 hello world 的示例代码真的是一步到位。
回过头来再看 Cargo.toml
$ cat Cargo.toml
[package]
name hello_rust
authors [ENG八戒]
version 0.1.0
edition 2021# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]可以看到文件 Cargo.toml 内包含了多个 section比如 package、dependencies。
在 package 字段包含了工程的名字 name作者 authors工程版本 versionrust 版本等。格式是键值对的形式 后边的值用 [] 界定表示该值类型是列表的形式内容可以是多个比如软件工程的作者就可以有多个。
而 dependencies 字段用于填写该工程的依赖项依赖项就是我们在开发软件时有很多的内容可以直接借用别人的成果或者避免浪费自己的时间重复造轮子。而别人的成果通常以包的形式提供我们只需要在这个配置文件的 dependencies 字段里填写对应的包信息。
假设依赖项中包含产生随机数的 rand 包可以如下填写
...
[dependencies]
rand 0.8.5上面填写的依赖项内容不仅有包名还有具体的版本。但是我们怎么知道现时有哪些具体的包和版本呢
可以用 cargo search 指令后边加上对应的模糊包名这样 cargo 就会从 crates.io 查找可用包并打印你再从中选一个合适的
$ cargo search rand
rand 0.8.5 # Random number generators and other randomness functionality.
bevy_rand 0.4.0 # A plugin to integrate rand for ECS optimised RNG for the Bevy game engine.
tinyrand 0.5.0 # Lightweight RNG specification and several ultrafast implementations in Rust.
random_derive 0.0.0 # Procedurally defined macro for automatically deriving rand::Rand for structs and enums
tera-rand 0.2.0 # A suite of random data generation functions for the Tera template engine
tera-rand-cli 0.2.0 # A CLI tool for generating a feed of random data from a Tera template
faker_rand 0.1.1 # Fake data generators for lorem ipsum, names, emails, and more
rand_derive2 0.1.21 # Generate customizable random types with the rand crate
fake-rand-test 0.0.0 # Random number generators and other randomness functionality.
ndarray-rand 0.14.0 # Constructors for randomized arrays. rand integration for ndarray.
... and 1219 crates more (use --limit N to see more)未完待续…