Приложение 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
  • 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 года. Если вы зависите от библиотеки, написанной с использованием версии 2015 года и имеющей функцию try, вам потребуется использовать синтаксис сырого идентификатора, в данном случае r#try, для вызова этой функции из кода версии 2018 года. См. Приложение E для получения дополнительной информации о редакциях Rust.