关键字

keywords.md
commit 64923185890763048d190ce92cb668b58acbc49a

Rust 将关键字分为三类:

译者注:下文 KW 为 keywords 的简写。

规定关键字

规定关键字仅能在正确的上下文中使用。它们不能用作:

Lexer:
KW_AS : as
KW_BREAK : break
KW_CONST : const
KW_CONTINUE : continue
KW_CRATE : crate
KW_ELSE : else
KW_ENUM : enum
KW_EXTERN : extern
KW_FALSE : false
KW_FN : fn
KW_FOR : for
KW_IF : if
KW_IMPL : impl
KW_IN : in
KW_LET : let
KW_LOOP : loop
KW_MATCH : match
KW_MOD : mod
KW_MOVE : move
KW_MUT : mut
KW_PUB : pub
KW_REF : ref
KW_RETURN : return
KW_SELFVALUE : self
KW_SELFTYPE : Self
KW_STATIC : static
KW_STRUCT : struct
KW_SUPER : super
KW_TRAIT : trait
KW_TRUE : true
KW_TYPE : type
KW_UNSAFE : unsafe
KW_USE : use
KW_WHERE : where
KW_WHILE : while

2018 版本增加了下述规定关键字。

Lexer 2018+
KW_ASYNC : async
KW_AWAIT : await
KW_DYN : dyn

保留关键字

保留关键字尚未使用,但已保留供将来使用。它们与严格的关键字有相同的限制。其背后的原因是,禁止当前程序使用这些关键字,从而使当前程序与未来版本的 Rust 兼容。

Lexer
KW_ABSTRACT : abstract
KW_BECOME : become
KW_BOX : box
KW_DO : do
KW_FINAL : final
KW_MACRO : macro
KW_OVERRIDE : override
KW_PRIV : priv
KW_TYPEOF : typeof
KW_UNSIZED : unsized
KW_VIRTUAL : virtual
KW_YIELD : yield

2018 版本增加了下述保留关键字。

Lexer 2018+
KW_TRY : try

待修正关键字

待修正关键字仅在特定的上下文中才有特殊的含义。例如,可以声明一个名为 union 的变量或方法。

  • union 用来声明一个联合体,且仅在联合体声明中是关键字。

  • 'static 用于静态生命周期,且不能用作泛型生命周期参数。

    // error[E0262]: invalid lifetime parameter name: `'static`
    fn invalid_lifetime_parameter<'static>(s: &'static str) -> &'static str { s }
    
  • 2015 版本中,dyn 是一个关键字,当在类型位置使用时,其后跟随的路径不能以 :: 开头。

    自 2018 版本开始,dyn 被提升为规定关键字。

Lexer
KW_UNION : union
KW_STATICLIFETIME : 'static

Lexer 2015
KW_DYN : dyn