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