Skip to content

Latest commit

 

History

History
160 lines (133 loc) · 3.69 KB

keywords.md

File metadata and controls

160 lines (133 loc) · 3.69 KB

r[lex.keywords]

Keywords

Rust divides keywords into three categories:

r[lex.keywords.strict]

Strict keywords

r[lex.keywords.strict.intro] These keywords can only be used in their correct contexts. They cannot be used as the names of:

r[lex.keywords.strict.list] The following keywords are in all editions:

  • as
  • break
  • const
  • continue
  • crate
  • else
  • enum
  • extern
  • false
  • fn
  • for
  • if
  • impl
  • in
  • let
  • loop
  • match
  • mod
  • move
  • mut
  • pub
  • ref
  • return
  • self
  • Self
  • static
  • struct
  • super
  • trait
  • true
  • type
  • unsafe
  • use
  • where
  • while

r[lex.keywords.strict.edition2018] The following keywords were added beginning in the 2018 edition.

  • async
  • await
  • dyn

r[lex.keywords.reserved]

Reserved keywords

r[lex.keywords.reserved.intro] These keywords aren't used yet, but they are reserved for future use. They have the same restrictions as strict keywords. The reasoning behind this is to make current programs forward compatible with future versions of Rust by forbidding them to use these keywords.

r[lex.keywords.reserved.list]

  • abstract
  • become
  • box
  • do
  • final
  • macro
  • override
  • priv
  • typeof
  • unsized
  • virtual
  • yield

r[lex.keywords.reserved.edition2018] The following keywords are reserved beginning in the 2018 edition.

  • try

r[lex.keywords.reserved.edition2024] The following keywords are reserved beginning in the 2024 edition.

  • gen

r[lex.keywords.weak]

Weak keywords

r[lex.keywords.weak.intro] These keywords have special meaning only in certain contexts. For example, it is possible to declare a variable or method with the name union.

  • 'static
  • macro_rules
  • raw
  • safe
  • union

r[lex.keywords.weak.macro_rules]

  • macro_rules is used to create custom macros.

r[lex.keywords.weak.union]

  • union is used to declare a union and is only a keyword when used in a union declaration.

r[lex.keywords.weak.lifetime-static]

  • 'static is used for the static lifetime and cannot be used as a generic lifetime parameter or loop label

    // error[E0262]: invalid lifetime parameter name: `'static`
    fn invalid_lifetime_parameter<'static>(s: &'static str) -> &'static str { s }
    

r[lex.keywords.weak.safe]

  • safe is used for functions and statics, which has meaning in external blocks.

r[lex.keywords.weak.raw]

  • raw is used for raw borrow operators, and is only a keyword when matching a raw borrow operator form (such as &raw const expr or &raw mut expr).

r[lex.keywords.weak.dyn.edition2018]

[!EDITION-2018] In the 2015 edition, dyn is a keyword when used in a type position followed by a path that does not start with :: or <, a lifetime, a question mark, a for keyword or an opening parenthesis.

Beginning in the 2018 edition, dyn has been promoted to a strict keyword.