#rust #web-component #rust-cargo #webassembly
#Ржавчина #rust-cargo
Вопрос:
Согласно руководству, грузовые пакеты могут иметь несколько исполняемых целевых объектов, но разрешен только один целевой объект библиотеки.
Пакет может содержать ноль или один библиотечный ящик и столько двоичных ящиков, сколько вы хотите. В пакете должен быть хотя бы один ящик (либо библиотека, либо двоичный файл).
Почему он ограничен одним? Каковы причины и преимущества?
Комментарии:
1. В чем преимущество наличия нескольких библиотек?
2. @Shepmaster Хороший вопрос. Может быть то же самое с преимуществами наличия нескольких исполняемых файлов ?
3. @Shepmaster Потому что я хочу организовать свой код таким образом, чтобы каждая библиотека имела четкую область видимости
4. @DimanNe вы все еще можете использовать это с несколькими пакетами.
Ответ №1:
Груз — это прежде всего менеджер пакетов. Таким образом, основная роль пакета заключается в определении библиотеки.
Когда мы используем ящик в качестве зависимости, мы указываем только имя пакета в нашем Cargo.toml
. Поскольку библиотека может быть не более одной, Cargo не требует, чтобы вы указывали, какую из них использовать. Если бы было разрешено определять несколько библиотек в одном пакете, то нам нужно было бы указать способ определения зависимостей между ними, поэтому у нас было бы два способа объявления зависимостей (внешние пакеты и внутренние ящики), что сделало бы систему более сложной.
С другой стороны, добавление зависимости, которая не предоставляет библиотеку, не имеет смысла, по крайней мере, для Cargo, поскольку Cargo заботится только о целевой библиотеке в этом контексте. Таким образом, нет причин ограничивать другие типы целевых объектов (двоичные файлы, примеры, тесты и т.д.) Одним для каждого.
Ответ №2:
Я ожидал бы, что грузовой пакет может иметь только одну целевую библиотеку, потому что library crate
по определению представляет собой набор элементов (функций, типов, признаков, макросов, значений и т.д.), В то время как у binary crate
есть только одна внешне видимая вещь, основная точка входа. Следовательно, в то время как имя библиотечного ящика является просто корневым модулем в иерархии, имя двоичного ящика является единственным.