Rust 什么是';板条箱';在货物生态系统中,板条箱上的映射是什么?

Rust 什么是';板条箱';在货物生态系统中,板条箱上的映射是什么?,rust,rust-cargo,rust-crates,Rust,Rust Cargo,Rust Crates,对于crates.io上承载的确切内容,我有点困惑(“crates”是指这些内容的正确方式吗)?我的理解是,板条箱是Rust中的编译单元,但是板条箱和板条箱上的内容之间的映射是什么呢?例如,表示由于每个板条箱只能有一个程序宏: 我们的两个板条箱紧密相关,因此我们在hello\u宏板条箱的目录中创建程序宏板条箱。如果我们在hello\u宏中更改特征定义,我们还必须在hello\u宏中更改过程宏的实现。这两个板条箱需要单独发布,使用这些板条箱的程序员需要将两者作为依赖项添加,并将它们都纳入范围。相反

对于crates.io上承载的确切内容,我有点困惑(“crates”是指这些内容的正确方式吗)?我的理解是,板条箱是Rust中的编译单元,但是板条箱和板条箱上的内容之间的映射是什么呢?例如,表示由于每个板条箱只能有一个程序宏:

我们的两个板条箱紧密相关,因此我们在
hello\u宏
板条箱的目录中创建程序宏板条箱。如果我们在
hello\u宏
中更改特征定义,我们还必须在
hello\u宏
中更改过程宏的实现。这两个板条箱需要单独发布,使用这些板条箱的程序员需要将两者作为依赖项添加,并将它们都纳入范围。相反,我们可以让hello_宏板条箱使用
hello_macro_derivate
作为依赖项,并重新导出过程宏代码。但是我们构建项目的方式使得程序员可以使用
hello\u宏
,即使他们不需要
派生
功能

必须在crates.io上单独发布。这似乎很清楚:crates.io上的板条箱与本地板条箱相同,并且映射是一对一的

然而,当讨论具有可执行文件和库的项目时,这意味着它们是单独的板条箱,但不需要单独发布。例如,sccache repo同时具有main.rs和lib.rs。单独的二进制板条箱是否未实际存储在crates.io上,且仅驻留在回购中?那么cargo install如何确定要安装什么呢

什么是“套餐”


我试图用一个包含二进制和库目标的示例项目运行
cargo-package
。这两个文件都被添加到了.cargo文件中(顺便问一下,.cargo档案的确切格式是否在任何地方都有文档记录?)。这仍然让我感到困惑。我们可以将多个板条箱作为一个包装的一部分发布吗?那么,我们是否应该将存储在crates.io上的内容作为包装?我是否正确地假设每个包可以包含多个二进制板条箱,但只能包含一个库板条箱?这是我目前的理解。

crates.io上承载的确切内容是包装内的板条箱

板条箱是编译器的输出工件

发件人:

编译模型以称为板条箱的工件为中心。每次编译都以源代码形式处理一个板条箱,如果成功,则生成一个二进制形式的板条箱:一个可执行文件或某种类型的库

是由Rust package manager Cargo管理的工件

Cargo.toml
manifest文件使用以下语法定义包:

[package]
name = "hello_world"
version = "0.1.0"
authors = ["Your Name <you@example.com>"]  
[软件包]
name=“你好,世界”
version=“0.1.0”
作者=[“您的姓名”]
一个包可能包含一个或多个板条箱,例如一个名为包名的库板条箱和零个或多个可执行板条箱,每个板条箱明确定义在清单文件的
[[bin]]
部分中,或者如果位于包的
src/bin
目录中,则隐式定义

使用术语板条箱作为包装的别名。考虑下面的语句试图找出一些意义:

通常情况下,*一个包的主要工件是一个库板条箱,因为它是用包名标识的,所以习惯上将包和板条箱视为同义词


*:一个文件包可能只包含一个二进制文件,例如,请参见

您的问题很好,似乎与主题有关,但我不理解您的目标。为什么这个问题的答案对你很重要?根据答案会有什么变化?填写这些细节可能有助于某人提供有用的答案。@Shepmaster,我是一名学生,我正在努力学习更多关于锈菌和锈菌生态系统的知识。我想把它融入我的大学项目以及我的工作和贡献。如果我得到一个明确的解释,我可能会在GitHub上提交一个问题,进一步阐述书中板条箱和包装之间的区别。换句话说,我不是在追求某个特定的目标。我问这个问题主要是出于好奇。