命名包含字符串“ .rs”的条板箱是否有问题?

时间:2019-02-13 01:23:23

标签: rust rust-cargo rust-crates

在命名依赖项.rs时是否将来会出现任何问题,

[dependencies]
gccjit.rs = { git = "https://github.com/swgillespie/gccjit.rs.git" }

在上面的代码中,我将.rs用于非Rust源代码文件。这不是很理想还是可以,因为默认使用与存储库相同的名称会更容易吗?

如果一个对象被命名为.rs,它可能会被自动识别为Rust源代码,但在这种情况下不是。

1 个答案:

答案 0 :(得分:7)

是的,有问题。不要这样做。

您如何亲自确定这一点

尝试使用您建议的代码,您将看到:

$ cargo build
error: failed to parse manifest at `.../Cargo.toml`

Caused by:
  could not parse input as TOML

Caused by:
  expected an equals, found a period at line 9

您还可能尝试创建具有相同名称的软件包。然后您将看到:

$ cargo new 'gccjit.rs.git'
error: Invalid character `.` in crate name: `gccjit.rs.git`
use --name to override crate name

谁控制箱子名称

不必那样控制导入的板条箱的名称; the crate determines it,并且已经选择了其中一个:

[package]
name = "gccjit"

如果要在导入时重命名现有软件包,则必须使用package键来匹配真实姓名:

some_name = { package = "gccjit", git = "https://github.com/swgillespie/gccjit.rs.git" }

有关更多信息,请参见How to idiomatically alias a crate in Rust 2018?

要在名称中使用句点,您似乎可以使用字符串键(尽管我认为这是is a bug):

"gcc.jit" = { package = "gccjit", git = "https://github.com/swgillespie/gccjit.rs.git" }

但是,程序包名称必须是有效的Rust标识符,而句点不是。如果执行此操作,则无法使用该程序包

反正是多余的

更多基于意见的名称,这样的名称完全没有意义。您无需在名称中说“ rs”或“ rust”,因为当然是Rust代码。如果不是这样,那么您一开始就无法将其用作依赖项。

出于相同的原因,我们不称我们的软件包为“ computer-source-code-awesome-tool”(暗示很多)。

包名称与源代码管理不同

Cargo和Rust不在乎源代码控制存储库的名称。它与程序包名称分开。虽然最好让它们有些相似,但没有任何真正原因必须与之相关。

包名称与库名称不同

此功能的使用次数很小,但您的 package 名称(即Crates.io上的板条箱名称)可以与库的名称(导入到代码中的名称)。

活塞是我所知道的最大“罪犯”:

[package]
name = "piston2d-graphics"
version = "0.30.0"

[lib]
name = "graphics"

,请不要使用它,因为这很疯狂,很容易尝试调试。