mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2025-02-06 17:40:12 +08:00
Update Ch14
This commit is contained in:
parent
da4e68501b
commit
86a1128294
@ -468,15 +468,15 @@ Caused by:
|
||||
咱们完成咱们代码箱的修改,而准备好发布新版本时,咱们要修改 `Cargo.toml` 中所指定的 `version` 值并重新发布。请运用 [语义版本控制规则,Semantic Versioning rules](http://semver.org/),根据咱们已做出修改的类别,来确定出恰当的下一版本编号为何。然后运行 `cargo publish` 来上传新版本。
|
||||
|
||||
|
||||
### 使用 `cargo yank` 弃用 Crates.io 上的一些版本
|
||||
### 使用 `cargo yank` 命令弃用 Crates.io 上的版本
|
||||
|
||||
**Depracating Versions from Crates.io with `cargo yank`**
|
||||
|
||||
尽管咱们无法移除某个代码箱的一些先前版本,但咱可以阻止任何今后的项目,将他们添加作新的依赖项。在某个代码箱版本由于某种原因或别的问题而损坏时,这样做是有用的。在诸如此类的情形中,Cargo 是支持将某个代码箱版本 *抽出来* 的(in such situations, Cargo supports *yanking* a crate version)。
|
||||
尽管咱们无法移除代码箱的先前版本,但咱们可以阻止任何今后的项目,将其添加为新的依赖项。这在某个代码箱版本由于某种原因,或别的问题而损坏时是有用的。在诸如此类的情形下,Cargo 支持把某个代码箱版本 *抽出来*,in such situations, Cargo supports *yanking* a crate version。
|
||||
|
||||
抽出某个版本,就会在允许所有依赖该版本的项目继续工作的同时,阻止新的项目依赖那个版本。本质上,一次版本抽出,就表示有着 `Cargo.lock` 的全部项目不会破坏,同时任何今后生成的 `Cargo.lock` 文件,都不会使用这个被抽出的版本了。
|
||||
抽出某个版本,在允许所有依赖该版本的既有项目继续工作的同时,会阻止新项目依赖那个版本。本质上,一次版本抽出,表示带有 `Cargo.lock` 的全部项目不会破坏,而任何今后生成的 `Cargo.lock` 文件,都将不使用被抽出的版本。
|
||||
|
||||
要抽出代码箱的某个版本,就要在先前已发布的那个代码箱目录中,运行 `cargo yank` 并指定要抽出哪个版本。比如,在曾发布了一个名为 `guessing_game` 代码箱的 `0.1.0` 版本,并打算抽出他时,那么就要在 `guessing_game` 的项目目录下,运行下面的命令:
|
||||
要抽出代码箱的某个版本,就要在咱们先前已发布的代码箱目录中,运行 `cargo yank` 并指定出要抽出的版本。比如,咱们曾发布了名为 `guessing_game` 代码箱的 `0.1.0` 版本,而打算抽出他,咱们就要在 `guessing_game` 的项目目录下,运行下面的命令:
|
||||
|
||||
```console
|
||||
$ cargo yank --vers 0.1.0 4s lennyp@vm-manjaro
|
||||
@ -484,7 +484,7 @@ $ cargo yank --vers 0.1.0
|
||||
Yank guessing_game-xfossdotcom@0.1.0
|
||||
```
|
||||
|
||||
通过添加 `--undo` 到这个命令,咱们还可以撤销某次抽出,而运行一些项目再度开始依赖于某个版本:
|
||||
通过把 `--undo` 添加到这个命令,咱们还可以撤销某次抽出,而允许项目开始再度依赖于某个版本:
|
||||
|
||||
```console
|
||||
$ cargo yank --vers 0.1.0 --undo lennyp@vm-manjaro
|
||||
@ -492,20 +492,20 @@ $ cargo yank --vers 0.1.0 --undo
|
||||
Unyank guessing_game-xfossdotcom@0.1.0
|
||||
```
|
||||
|
||||
抽出某个版本,*不会* 删除任何代码。比如,此操作就无法删除那些不小心上传的机密信息。若发生了机密信息被上传的情况,那么就必须立即重置这些机密信息。
|
||||
抽出版本,*不会* 删除任何代码。比如,其无法删除那些不小心上传的机密信息。若发生了机密信息被上传的情况,咱们必须立即重置这些机密信息。
|
||||
|
||||
|
||||
## Cargo 工作区
|
||||
|
||||
**Cargo Workspaces**
|
||||
|
||||
在第 12 章中,曾构建了包含一个二进制代码箱和一个库代码箱的包(a package)。随着项目的不可开发,就会发现那个库代码箱会持续变大,而咱们就会想要将咱们的包,进一步拆分为多个库代码箱。Cargo 提供了叫做 *工作区(workspace)* 的特性,可帮助管理多个先后开发的相关包。
|
||||
在第 12 章中,咱们曾构建了个包含二进制代码箱和库代码箱的包,a package。随着咱们项目的持续开发,咱们会发现库代码箱会持续变大,而咱们就会想要把咱们的包,进一步拆分为多个库代码箱。Cargo 提供了可帮助管理多个齐头并进开发的相关包,名为 *工作区,workspace* 的特性。
|
||||
|
||||
> ***注***:总结 Rust 开发的层次结构如下:工作区(workspace) -> 包(package) -> 代码箱(crate) -> 模组(module) -> 语句(statement)。
|
||||
> 注:总结 Rust 开发的层次结构如下:工作区,workspace -> 包,package -> 代码箱,crate -> 模组,module -> 语句,statement。
|
||||
|
||||
### 创建工作区
|
||||
|
||||
*工作区*(a *workspace*)是共享了同一 `Cargo.lock` 文件及输出目录的一个包集合。下面就来构造一个用到工作区的项目 -- 这里将使用一些简单代码,这样咱们就可以着重于该工作区的结构上。组织工作区有多种方式,因此这里将只给出一种常用的方式。这里将有着包含一个二进制代码箱,及两个库代码箱的工作区。其中的二进制代码箱,将提供依赖于那两个库代码箱的 `main` 功能。其中一个库代码箱,将提供一个 `add_one` 函数,而另一个则会提供 `add_two` 函数。这三个代码箱,都将是同一工作区的组成部分。这里将以创建该工作区的目录开始:
|
||||
*工作区,a workspace* 是共享了同一 `Cargo.lock` 文件及输出目录的一个包集合。下面就来构造一个用到工作区的项目 -- 这里将使用一些简单代码,这样咱们就可以着重于该工作区的结构上。组织工作区有多种方式,因此这里将只给出一种常用的方式。这里将有着包含一个二进制代码箱,及两个库代码箱的工作区。其中的二进制代码箱,将提供依赖于那两个库代码箱的 `main` 功能。其中一个库代码箱,将提供一个 `add_one` 函数,而另一个则会提供 `add_two` 函数。这三个代码箱,都将是同一工作区的组成部分。这里将以创建该工作区的目录开始:
|
||||
|
||||
```console
|
||||
$ mkdir add
|
||||
|
@ -796,6 +796,16 @@ Documentation comment, 将产生出 HTML 的注释。
|
||||
Re-export, 使用 `pub use` 重新导出程序项目。
|
||||
|
||||
|
||||
- 语义版本控制规则
|
||||
|
||||
Semantic Versioning rules, 又大版本、小版本及补丁版本构成的,形如 `MAJOR.MINOR.PATCH` 的版本编号规则。参考:[semver.org](https://semver.org)。
|
||||
|
||||
|
||||
- 工作区
|
||||
|
||||
Workspace,
|
||||
|
||||
|
||||
- 单态化
|
||||
|
||||
所谓 *单态化,monomorphization*,是指即通过把在编译后用到的具体类型填入到泛型位置,而将通用代码转换为具体代码的过程。参考 [使用泛型代码的性能问题](Ch10_Generic_Types_Traits_and_Lifetimes.md#使用泛型参数代码的性能问题)。
|
||||
|
Loading…
Reference in New Issue
Block a user