Есть ли проблема с именованием ящика, содержащего строку «.rs»? - PullRequest
0 голосов
/ 13 февраля 2019

Могут ли быть какие-либо будущие проблемы в именовании зависимостей .rs, например,

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

В приведенном выше коде я использую .rs для чего-то, что не является файлом исходного кода Rust.Это не идеально или все в порядке, потому что по умолчанию будет проще использовать то же имя, что и хранилище?

Если объект называется .rs, он может быть автоматически распознан как исходный код Rust, но в этомдело это не так.

1 Ответ

0 голосов
/ 13 февраля 2019

Да, есть проблема.Не делайте этого.

Как вы сами это определили

Попробуйте использовать предложенный код, вы увидите:

$ 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

Кто контролирует имена ящиков

Вы не можете таким образом контролировать имя импортированного ящика; ящик определяет его , и он уже выбран:

[package]
name = "gccjit"

Если вы хотите переименовать существующий пакет при импорте, вы должны использовать packageключ для совпадения с настоящим именем:

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

См. Как идиоматически псевдоним ящика в Rust 2018? для получения дополнительной информации.

Чтобы использовать точку в имени,казалось бы, вы можете использовать строковый ключ (хотя я думаю, что - это ошибка ):

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

Однако имя пакета должно быть допустимым идентификатором Rust, а периоды - нет.Если вы сделаете это, то не сможете использовать пакет .

В любом случае это излишне

Более основанное на мнении мнение, такое имя совершенно бессмысленно.Вам не нужно произносить «rs» или «ржавчина» в названии, потому что конечно это код Rust.Если это не так, вы не могли бы использовать его в качестве зависимости в первую очередь.

Мы не называем наши пакеты «computer-source-code-awesome-tool» по той же причине - это подразумевает многое.

Имена пакетов отличаются от управления исходным кодом

Cargo и Rust не волнует, как называется ваш репозиторий контроля версий.Это отдельно от названия пакета.Хотя лучше, чтобы они были чем-то похожими, нет никакой реальной причины, по которой они вообще должны быть связаны.

Имена пакетов отличаются от имен библиотек

Это особенность с оченьнебольшое количество использований, но имя вашего пакета (он же имя ящика на Crates.io) может отличаться от имени вашей библиотеки (что импортируетсяв код).

Поршень является самым большим "нарушителем" этого, о котором я знаю:

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

[lib]
name = "graphics"

Пожалуйста, не используйте это, поскольку это просто сводит с умапопытка отладки.

...