Приложение 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 зарезервировал их для возможного использования в будущем:
abstractbecomeboxdofinalgenmacrooverrideprivtrytypeofunsizedvirtualyield
Сырые идентификаторы
Сырые идентификаторы (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.