讲动人的故事,写懂人的代码
2.4 故事2: 生成点数之和的随机答案
又是新的一天,大家的培训课又开始了哦!现在,我们的学员们开始用三种语言来实现故事2,加油!
2.4.1 Rust版故事2
2.4.1.1 提供标准库之外功能的Library Crate:简化包管理和依赖管理
贾克强:“我们的故事2需要生成一些随机数,可是Rust的标准库并没有提供这个功能。没关系,我们只需要稍微地改一下Cargo.toml
文件,添加一下rand
这个依赖就可以啦!”
@@ -6,3 +6,4 @@ edition = "2021"
# See more keys and their definitions at <https://doc.rust-lang.org/cargo/refe>
rence/manifest.html
[dependencies]
+rand = "0.8.5"
(注:为了帮助你更好地查看代码的变化,本书采用git diff的代码对比方式来展示代码的变化。就像我们上面对Cargo.toml文件的变化一样,让我们一起来理解如何阅读它。
@@ -6,3 +6,4 @@
这部分展示了代码块的行号变化:-6,3
意味着下面展示的代码是从原文件的第6行开始的,包括3行。+6,4
则表示这次变化后的文件从第6行开始,包括4行。
接下来的代码行,如果开头有 +
号,那就表示这是新添加的行。如果开头有 -
号,那就表示这行在变动中被删除了。如果既没有 +
号也没有 -
号,那就表示这行在这次变动中并没有被修改。)
贾克强:“Rust带来的强大的包管理工具Cargo,简直就是我们的好伙伴!它让我们添加、管理和更新依赖库变得简单且直观。只需要一个简单的配置文件(Cargo.toml
),你就可以像大师一样管理项目的依赖了。Cargo的优点在于它能帮我们统一管理所有的依赖,大大减轻了我们手动管理依赖的负担。更棒的是,Cargo还支持自动解析依赖和版本管理,让包管理工作变得轻松许多。”
“相比于Java的Maven和Gradle等工具,Rust的Cargo易用许多,配置和管理过程更为简洁。C++的依赖管理依赖于vcpkg、NuGet、Conan、build2和Hunter等工具,配置过程较为繁琐,并且缺乏统一的包管理工具。”
“[dependencies]
这一行告诉我们接下来的内容是项目的依赖项。Rust 使用 Cargo 作为包管理器和构建工具,而 [dependencies]
就是我们列出当前项目所需要的外部crate的地方。“
“rand = "0.8.5"
这一行表示我們的项目需要 rand
这个library crate,并且指定了版本号为 0.8.5
。简单明了,对吧?”
2.4.1.2 什么是crate
赵可菲:“Crate是什么玩意儿?”
贾克强:“在Rust中,crate是一个独立的编译单元,你可以把它理解为Rust程序中的一个模块(注:crate详见第8章)。每个crate都有一个Cargo.toml
文件,这个文件定义了crate的元数据和依赖项。”
2.4.1.3 Crate的分类
贾克强:“crate有两种。一种是library crate,另一种是binary crate。”
“Library crate是可以被其他crate或项目使用的代码库。它没有主函数(