Приложение 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: Обозначает публичную видимость в полях структур, блоках impl или модулях.
  • ref: Связывает по ссылке.
  • return: Возвращает из функции.
  • Self: Псевдоним типа для типа, который мы определяем или реализуем.
  • self: Объект метода или текущий модуль.
  • static: Глобальная переменная или время жизни, длящееся в течение всего выполнения программы.
  • struct: Определяет структуру.
  • super: Родительский модуль текущего модуля.
  • trait: Определяет трейт.
  • true: Логический литерал "истина".
  • type: Определяет псевдоним типа или ассоциированный тип.
  • union: Определяет объединение; является ключевым словом только при использовании в объявлении 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

#![allow(unused)]
fn main() {
 [Этот код не компилируется!] 
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 для получения дополнительной информации об изданиях.