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. Поэтому они не могут использоваться в качестве идентификаторов (за исключением сырых идентификаторов (raw identifiers), о которых мы поговорим в разделе «Сырые идентификаторы»). Идентификаторы — это имена функций, переменных, параметров, полей структур, модулей, крейтов, констант, макросов, статических значений, атрибутов, типов, трейтов или времён жизни.

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

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

  • as: Выполняет примитивное приведение типов (casting), позволяет уточнить конкретный трейт, содержащий элемент, или переименовать элементы в выражениях use.
  • async: Возвращает Future вместо блокировки текущего потока.
  • await: Приостанавливает выполнение до тех пор, пока результат Future не станет готов.
  • break: Немедленно завершает цикл.
  • const: Определяет константные элементы или константные сырые указатели.
  • continue: Переходит к следующей итерации цикла.
  • crate: В пути модуля указывает на корень крейта.
  • dyn: Выполняет динамическую диспетчеризацию для объекта трейта.
  • else: Резервный вариант для конструкций управления потоком if и if let.
  • enum: Определяет перечисление.
  • extern: Связывает внешнюю функцию или переменную.
  • false: Логический литерал ложного значения.
  • fn: Определяет функцию или тип указателя на функцию.
  • for: Выполняет перебор элементов итератора, реализует трейт или определяет время жизни более высокого ранга.
  • if: Выполняет ветвление на основе результата условного выражения.
  • impl: Реализует встроенную (inherent) или трейтовую функциональность.
  • in: Часть синтаксиса цикла for.
  • let: Привязывает значение к переменной.
  • loop: Создаёт безусловный цикл.
  • match: Сопоставляет значение с шаблонами.
  • mod: Определяет модуль.
  • move: Заставляет замыкание получить владение всеми захваченными значениями.
  • mut: Обозначает изменяемость для ссылок, сырых указателей или привязок шаблонов.
  • pub: Обозначает публичную видимость для полей структур, блоков impl или модулей.
  • ref: Выполняет привязку по ссылке.
  • return: Возвращает значение из функции.
  • Self: Псевдоним типа для типа, который мы определяем или реализуем.
  • self: Текущий объект метода или текущий модуль.
  • static: Глобальная переменная или время жизни, существующее в течение выполнения всей программы.
  • struct: Определяет структуру.
  • super: Родительский модуль текущего модуля.
  • trait: Определяет трейт.
  • true: Логический литерал истинного значения.
  • type: Определяет псевдоним типа или связанный тип.
  • union: Определяет union; является ключевым словом только при использовании в объявлении union.
  • unsafe: Обозначает небезопасный код, функции, трейты или реализации.
  • use: Импортирует символы в область видимости.
  • where: Определяет ограничения для типа.
  • while: Выполняет цикл на основе результата выражения.

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

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

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

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

Сырые идентификаторы (raw identifiers) — это синтаксис, позволяющий использовать ключевые слова там, где это обычно запрещено. Для использования сырого идентификатора перед ключевым словом добавляется префикс 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 (edition), чем используется в вашем крейте. Например, try не является ключевым словом в редакции 2015, но становится таковым в редакциях 2018, 2021 и 2024. Если ваш проект зависит от библиотеки, написанной для редакции 2015 и содержащей функцию try, вам потребуется использовать синтаксис сырого идентификатора — в данном случае r#try — чтобы вызвать эту функцию из вашего кода в более новых редакциях.

См. Приложение E для получения дополнительной информации о редакциях Rust.