r[lex.keywords]
Rust divides keywords into three categories:
r[lex.keywords.strict]
r[lex.keywords.strict.intro] These keywords can only be used in their correct contexts. They cannot be used as the names of:
- Items
- Variables and function parameters
- Fields and variants
- Type parameters
- Lifetime parameters or loop labels
- Macros or attributes
- Macro placeholders
- Crates
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]
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]
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, afor
keyword or an opening parenthesis.Beginning in the 2018 edition,
dyn
has been promoted to a strict keyword.