命名包含字符串".rs"的包装箱有问题吗?

Nik*_*ntz 0 rust rust-crates rust-cargo

例如,在命名依赖项时可能存在任何未来问题.

[dependencies]
gccjit.rs = { git = "https://github.com/swgillespie/gccjit.rs.git" }
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我使用.rs的不是Rust源代码文件.这是不理想的还是没关系,因为它更容易默认为与存储库相同的名称?

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

She*_*ter 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
Run Code Online (Sandbox Code Playgroud)

您也可以尝试创建具有相同名称的包.你会看到:

$ cargo new 'gccjit.rs.git'
error: Invalid character `.` in crate name: `gccjit.rs.git`
use --name to override crate name
Run Code Online (Sandbox Code Playgroud)

谁控制箱子名称

不能那样控制进口箱子的名称; 箱子确定它和它已经挑一个:

[package]
name = "gccjit"
Run Code Online (Sandbox Code Playgroud)

如果要在导入时重命名现有包,则必须使用该package键匹配实际名称:

some_name = { package = "gccjit", git = "https://github.com/swgillespie/gccjit.rs.git" }
Run Code Online (Sandbox Code Playgroud)

请参阅如何在Rust 2018中以惯用方式别名包装箱?更多.

要在名称中使用句点,您似乎可以使用字符串键(虽然我认为这是一个错误):

"gcc.jit" = { package = "gccjit", git = "https://github.com/swgillespie/gccjit.rs.git" }
Run Code Online (Sandbox Code Playgroud)

但是,包名称必须是有效的Rust标识符,而不是.如果这样做,就无法使用该软件包.

无论如何,它是多余的

更多的意见,这样的名字是完全没有意义的.您不需要在名称中说"rs"或"rust",因为它当然是Rust代码.如果不是,则首先不能将其用作依赖项.

我们不会因为同样的原因而将我们的软件包称为"计算机源代码 - 令人敬畏的工具" - 这意味着很多.

包名称与源代码管理不同

Cargo和Rust不关心源代码控制存储库的名称.它与包名称分开.虽然最好让它们有点类似,但没有任何真正的理由它们必须是相关的.

包名称与库名称不同

这是一个使用次数非常少的功能,但是的名称(也就是Crates.io 上的包的名称)可能与的名称(导入到代码中的内容)不同.

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

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

[lib]
name = "graphics"
Run Code Online (Sandbox Code Playgroud)

不要使用它,因为尝试调试只是令人抓狂.

  • @NiklasRosencrantz*重命名它只意味着打破它* - 你是如何得出这个结论的?我展示了一个正确重命名crate(`some_name = {package ="...`)的示例,然后再显示一个滥用该功能的示例(`"gcc.jit"= {package ="...`). (2认同)