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

Приложение A: Ключевые слова

Следующий список содержит ключевые слова, зарезервированные для текущего или будущего использования языком Rust. Как таковые, они не могут использоваться в качестве идентификаторов (за исключением сырых идентификаторов, как мы обсудим в разделе «Сырые идентификаторы»). Идентификаторы — это имена функций, переменных, параметров, полей структур, модулей, крейтов, констант, макросов, статических значений, атрибутов, типов, типажей или времён жизни.

Ключевые слова, используемые в настоящее время

Ниже приведён список ключевых слов, используемых в настоящее время, с описанием их функциональности.

  • as — выполнение примитивного приведения типов, уточнение конкретного типажа, содержащего элемент, или переименование элементов в операторах use
  • async — возвращает Future вместо блокировки текущего потока
  • await — приостанавливает выполнение до готовности результата Future
  • break — немедленный выход из цикла
  • const — определение константных элементов или константных сырых указателей
  • continue — переход к следующей итерации цикла
  • crate — в пути модуля ссылается на корень крейта
  • dyn — динамическая диспетчеризация для объекта типажа
  • else — альтернатива для управляющих конструкций if и if let
  • enum — определение перечисления
  • extern — связывание внешней функции или переменной
  • false — булева константа ложь
  • fn — определение функции или типа указателя на функцию
  • for — перебор элементов из итератора, реализация типажа или указание времени жизни более высокого порядка
  • if — ветвление на основе результата условного выражения
  • impl — реализация собственной функциональности или функциональности типажа
  • in — часть синтаксиса цикла for
  • let — связывание переменной
  • loop — безусловный цикл
  • match — сопоставление значения с образцами
  • mod — определение модуля
  • move — заставляет замыкание принимать владение всеми своими захватами
  • mut — обозначает изменяемость в ссылках, сырых указателях или связываниях образцов
  • pub — обозначает видимость public в полях структур, блоках impl или модулях
  • ref — связывание по ссылке
  • return — возврат из функции
  • Self — псевдоним типа для определяемого или реализуемого типа
  • self — субъект метода или текущий модуль
  • static — глобальная переменная или время жизни, длящееся всё время выполнения программы
  • struct — определение структуры
  • super — родительский модуль текущего модуля
  • trait — определение типажа
  • true — булева константа истина
  • type — определение псевдонима типа или ассоциированного типа
  • union — определение объединения; является ключевым словом только при использовании в объявлении объединения
  • unsafe — обозначает небезопасный код, функции, типажи или реализации
  • use — вводит символы в область видимости; задаёт точные захваты для обобщений и ограничений времени жизни
  • where — обозначает предложения, ограничивающие тип
  • while — условный цикл на основе результата выражения

Ключевые слова, зарезервированные для будущего использования

Следующие ключевые слова пока не имеют никакой функциональности, но зарезервированы Rust для потенциального использования в будущем.

  • abstract
  • become
  • box
  • do
  • final
  • gen
  • macro
  • override
  • priv
  • try
  • typeof
  • unsized
  • virtual
  • yield

Сырые идентификаторы

Сырые идентификаторы — это синтаксис, позволяющий использовать ключевые слова там, где они обычно не разрешены. Вы используете сырой идентификатор, добавляя префикс r# перед ключевым словом.

Например, match — это ключевое слово. Если вы попытаетесь скомпилировать следующую функцию, использующую match в качестве имени:

Имя файла: src/main.rs

fn match(needle: &str, haystack: &str) -> bool {
    haystack.contains(needle)
}

вы получите следующую ошибку:

error: expected identifier, found keyword `match`
 --> src/main.rs:4:4
  |
4 | fn match(needle: &str, haystack: &str) -> bool {
  |    ^^^^^ expected identifier, found keyword

Ошибка показывает, что вы не можете использовать ключевое слово match в качестве имени функции. Чтобы использовать match в качестве имени функции, вам нужно использовать синтаксис сырого идентификатора, вот так:

Имя файла: src/main.rs

fn r#match(needle: &str, haystack: &str) -> bool {
    haystack.contains(needle)
}

fn main() {
    assert!(r#match("foo", "foobar"));
}

Этот код скомпилируется без каких-либо ошибок. Обратите внимание на префикс r# в имени функции в её определении, а также в месте вызова функции в main.

Сырые идентификаторы позволяют использовать любое слово по вашему выбору в качестве идентификатора, даже если это слово является зарезервированным ключевым словом. Это даёт нам больше свободы в выборе имён идентификаторов, а также позволяет интегрироваться с программами, написанными на языке, где эти слова не являются ключевыми. Кроме того, сырые идентификаторы позволяют использовать библиотеки, написанные на другой редакции Rust, чем использует ваш крейт. Например, try не является ключевым словом в редакции 2015, но является таковым в редакциях 2018, 2021 и 2024. Если вы зависите от библиотеки, написанной с использованием редакции 2015 и имеющей функцию try, вам нужно будет использовать синтаксис сырого идентификатора, r#try в данном случае, чтобы вызвать эту функцию из вашего кода в более поздних редакциях. См. Приложение E для получения дополнительной информации о редакциях.