Приложение 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 для потенциального использования в будущем:
abstractbecomeboxdofinalgenmacrooverrideprivtrytypeofunsizedvirtualyield
Сырые идентификаторы
Сырые идентификаторы — это синтаксис, который позволяет использовать ключевые слова там, где они обычно не разрешены. Вы используете сырой идентификатор, добавляя префикс 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 для получения дополнительной информации об изданиях.