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

问题描述 投票:0回答:1

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

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

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

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

rust rust-cargo rust-crates
1个回答
7
投票

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

How you could have determined this for yourself

尝试使用您提出的代码,您将看到:

$ 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

Who controls crate names

你不能那样控制进口箱子的名称; 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标识符,而不是。如果这样做,就无法使用该软件包。

It's redundant anyway

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

出于同样的原因,我们不会将我们的软件包称为“计算机源代码 - 令人敬畏的工具” - 这意味着很多。

Package names are different from source control

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

Package names are different from library names

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

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

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

[lib]
name = "graphics"

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

© www.soinside.com 2019 - 2024. All rights reserved.