【问题标题】:Is there a problem with naming a crate containing the string ".rs"?命名包含字符串“.rs”的 crate 是否有问题?
【发布时间】:2019-02-13 11:29:27
【问题描述】:

在命名依赖 .rs 时会不会有任何未来的问题,例如,

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

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

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

【问题讨论】:

    标签: rust rust-cargo rust-crates


    【解决方案1】:

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

    您如何自己确定这一点

    尝试使用你提出的代码,你会看到:

    $ 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
    

    谁控制箱子名称

    无法以这种方式控制导入的 crate 的名称; 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 代码。如果不是,您一开始就不能将其用作依赖项。

    出于同样的原因,我们不会将我们的软件包称为“计算机源代码真棒工具”——这是隐含的。

    包名与源代码管理不同

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

    包名与库名不同

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

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

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

    不要使用它,因为尝试调试只会让人抓狂。

    【讨论】:

    • 我仍然不明白,如果重命名只是意味着破坏它,为什么我们甚至可以重命名它。为什么?
    • @NiklasRosencrantz 重命名只是意味着打破它——你是怎么得出这个结论的?在展示滥用该功能的示例 ("gcc.jit" = { package = "...) 之前,我展示了一个正确重命名 crate 的示例 (some_name = { package="...)。
    猜你喜欢
    • 1970-01-01
    • 2014-10-14
    • 2023-03-19
    • 2021-09-07
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多