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: перебрать элементы итератора, реализовать трейт или указать время жизни высшего ранга (higher ranked lifetime).
  • if: ветвление по результату условного выражения.
  • impl: реализовать собственную функциональность типа или функциональность трейта.
  • in: часть синтаксиса цикла for.
  • let: связать переменную.
  • loop: безусловный цикл.
  • match: сопоставить значение с образцами.
  • mod: определить модуль.
  • move: заставить замыкание забрать владение всем, что оно захватывает.
  • mut: обозначить изменяемость ссылок, сырых указателей или привязок в образцах.
  • pub: обозначить публичную видимость полей структур, блоков 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

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

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