Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Объявления внешних крейтов

Syntax
ExternCrateextern crate CrateRef AsClause? ;

CrateRefIDENTIFIER | self

AsClauseas ( IDENTIFIER | _ )

Объявление extern crate указывает зависимость от внешнего крейта.

Внешний крейт затем привязывается к объявляющей области видимости как данный идентификатор в пространстве имён типов.

Кроме того, если extern crate появляется в корне крейта, то имя крейта также добавляется в внешнюю прелюдию, делая его автоматически в области видимости во всех модулях.

Предложение as может использоваться для привязки импортируемого крейта к другому имени.

Внешний крейт разрешается в конкретное soname во время компиляции, и требование связи времени выполнения с этим soname передаётся линковщику для загрузки во время выполнения. soname разрешается во время компиляции путём сканирования пути библиотеки компилятора и сопоставления опционального crate_name с атрибутами crate_name, которые были объявлены на внешнем крейте при его компиляции. Если crate_name не предоставлен, предполагается атрибут name по умолчанию, равный идентификатору, указанному в объявлении extern crate.

Крейт self может быть импортирован, что создаёт привязку к текущему крейту. В этом случае предложение as должно использоваться для указания имени, к которому его привязать.

Три примера объявлений extern crate:

extern crate pcre;

extern crate std; // эквивалентно: extern crate std as std;

extern crate std as ruststd; // связывание с 'std' под другим именем

При именовании крейтов Rust дефисы запрещены. Однако пакеты Cargo могут использовать их. В таком случае, когда Cargo.toml не указывает имя крейта, Cargo прозрачно заменит - на _ (см. RFC 940 для более подробной информации).

Вот пример:

// Импорт пакета Cargo hello-world
extern crate hello_world; // дефис заменён на подчёркивание

Импорты с подчёркиванием

Зависимость от внешнего крейта может быть объявлена без привязки его имени в области видимости с использованием подчёркивания в форме extern crate foo as _. Это может быть полезно для крейтов, которые нужно только линковать, но на которые никогда не ссылаются, и это позволит избежать сообщений о неиспользовании.

Атрибут macro_use работает как обычно и импортирует имена макросов в macro_use прелюдию.

Атрибут no_link атрибут может быть применён к элементу extern crate для предотвращения линковки крейта.

Note

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

Example

#[no_link]
extern crate other_crate;

other_crate::some_macro!();

Атрибут no_link использует синтаксис MetaWord.

Атрибут no_link может быть применён только к объявлению extern crate.

Note

rustc игнорирует использование в других позициях, но выдает предупреждение. Это может стать ошибкой в будущем.

Только первое использование no_link на объявлении extern crate имеет эффект.

Note

rustc выдает предупреждение на любое использование после первого. Это может стать ошибкой в будущем.