Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Идентификаторы

Lexer
IDENTIFIER_OR_KEYWORD → ( XID_Start | _ ) XID_Continue*

XID_Start<XID_Start определено в Unicode>

XID_Continue<XID_Continue определено в Unicode>

RAW_IDENTIFIERr# IDENTIFIER_OR_KEYWORD

NON_KEYWORD_IDENTIFIERIDENTIFIER_OR_KEYWORDкроме строгих или зарезервированных ключевых слов

IDENTIFIERNON_KEYWORD_IDENTIFIER | RAW_IDENTIFIER

RESERVED_RAW_IDENTIFIERr# ( _ | crate | self | Self | super )

XID_Start `XID_Start` определено в Unicode
XID_Continue `XID_Continue` определено в Unicode
NON_KEYWORD_IDENTIFIER кроме строгих или зарезервированных ключевых слов IDENTIFIER_OR_KEYWORD
RESERVED_RAW_IDENTIFIER r# _ crate self Self super

Идентификаторы соответствуют спецификации UAX31 для версии Unicode 16.0, с добавлениями, описанными ниже. Некоторые примеры идентификаторов:

  • foo
  • _identifier
  • r#true
  • Москва
  • 東京

Используемый профиль из UAX #31:

  • Start := XID_Start, плюс символ подчёркивания (U+005F)
  • Continue := XID_Continue
  • Medial := пусто

Note

Идентификаторы, начинающиеся с подчёркивания, обычно используются для обозначения намеренно неиспользуемого идентификатора и отключают предупреждение о неиспользовании в rustc.

Идентификаторы не могут быть строгими или зарезервированными ключевыми словами без префикса r#, описанного ниже в разделе Сырые идентификаторы.

Символы неразрывного нулевой ширины (ZWNJ U+200C) и соединения нулевой ширины (ZWJ U+200D) не допускаются в идентификаторах.

Идентификаторы ограничены ASCII-подмножеством XID_Start и XID_Continue в следующих ситуациях:

  • Объявления extern crate (за исключением идентификатора в AsClause)
  • Имена внешних крейтов, на которые ссылается path
  • Имена module, загружаемые из файловой системы без атрибута path
  • Элементы с атрибутом no_mangle
  • Имена элементов во внешних блоках

Нормализация

Идентификаторы нормализуются с использованием Формы нормализации C (NFC), как определено в UAX15. Два идентификатора считаются равными, если равны их формы NFC.

Процедурные (proc-macro) и декларативные (mbe) макросы получают нормализованные идентификаторы на входе.

Raw идентификаторы

Сырой идентификатор похож на обычный идентификатор, но с префиксом r#. (Обратите внимание, что префикс r# не является частью самого идентификатора).

В отличие от обычного идентификатора, сырым идентификатором может быть любое строгое или зарезервированное ключевое слово, кроме перечисленных выше для RESERVED_RAW_IDENTIFIER.

Использование токена RESERVED_RAW_IDENTIFIER является ошибкой.