Имена
Сущность — это языковая конструкция, на которую можно ссылаться каким-либо образом в исходной программе, обычно через path. Сущности включают типы, элементы, обобщённые параметры, переменные привязки, метки циклов, времена жизни, поля, атрибуты и линты.
Объявление — это синтаксическая конструкция, которая может вводить имя для ссылки на сущность. Имена сущностей действительны в пределах области видимости — области исходного текста, где на это имя можно ссылаться.
Некоторые сущности явно объявлены в исходном коде, а некоторые неявно объявлены как часть языка или расширений компилятора.
Пути используются для ссылки на сущность, возможно, в другом модуле или типе.
Времена жизни и метки циклов используют специальный синтаксис с предшествующей кавычкой.
Имена разделены на различные пространства имён, позволяя сущностям в разных пространствах имён иметь одинаковое имя без конфликта.
Разрешение имён — это процесс во время компиляции, связывающий пути, идентификаторы и метки с объявлениями сущностей.
Доступ к определённым именам может быть ограничен на основе их видимости.
Явно объявленные сущности
Сущности, которые явно вводят имя в исходном коде:
- Элементы:
- Объявления модулей
- Объявления внешних крейтов
- Use-объявления
- Объявления функций и параметры функций
- Псевдонимы типов
- Объявления структур, объединений, перечислений, вариантов перечислений и их именованные поля
- Объявления констант
- Объявления статических элементов
- Объявления элементов трейтов и их ассоциированные элементы
- Элементы внешних блоков
- Объявления
macro_rulesи метапеременные матчеров - Ассоциированные элементы реализаций
- Привязки образцов оператора
let
- Атрибут
macro_useможет вводить имена макросов из другого крейта
- Атрибут
macro_exportможет вводить псевдоним для макроса в корень крейта
Кроме того, вызовы макросов и атрибуты могут вводить имена путём разворачивания в один из вышеперечисленных элементов.
Неявно объявленные сущности
Следующие сущности неявно определены языком или введены опциями компилятора и расширениями:
- Прелюдия языка:
- Логический тип —
bool - Текстовые типы —
charиstr - Целочисленные типы —
i8,i16,i32,i64,i128,u8,u16,u32,u64,u128 - Машинно-зависимые целочисленные типы —
usizeиisize - Типы с плавающей точкой —
f32иf64
- Логический тип —
- Элементы, атрибуты и макросы прелюдии стандартной библиотеки
- Крейты стандартной библиотеки в корневом модуле
- Внешние крейты, связанные компилятором
- Вспомогательные атрибуты derive действительны внутри элемента без явного импорта
- Время жизни
'static
Кроме того, корневой модуль крейта не имеет имени, но на него можно ссылаться с помощью определённых квалификаторов путей или псевдонимов.