Appendix A - Keywords - The Rust Programming Language
Appendix A - Keywords - The Rust Programming Language
The following list contains keywords that are reserved for current or future use by the Rust
language. As such, they cannot be used as identifiers (except as raw identifiers as we’ll
discuss in the “Raw Identifiers” section). Identifiers are names of functions, variables,
parameters, struct fields, modules, crates, constants, macros, static values, attributes, types,
traits, or lifetimes.
The following is a list of keywords currently in use, with their functionality described.
The following keywords do not yet have any functionality but are reserved by Rust for
potential future use.
abstract
become
box
do
final
macro
override
priv
try
typeof
unsized
virtual
yield
Raw Identifiers
Raw identifiers are the syntax that lets you use keywords where they wouldn’t normally be
allowed. You use a raw identifier by prefixing a keyword with r# .
For example, match is a keyword. If you try to compile the following function that uses
match as its name:
Filename: src/main.rs
fn match(needle: &str, haystack: &str) -> bool {
haystack.contains(needle)
}
The error shows that you can’t use the keyword match as the function identifier. To use
match as a function name, you need to use the raw identifier syntax, like this:
Filename: src/main.rs
fn main() {
assert!(r#match("foo", "foobar"));
}
This code will compile without any errors. Note the r# prefix on the function name in its
definition as well as where the function is called in main .
Raw identifiers allow you to use any word you choose as an identifier, even if that word
happens to be a reserved keyword. This gives us more freedom to choose identifier names,
as well as lets us integrate with programs written in a language where these words aren’t
keywords. In addition, raw identifiers allow you to use libraries written in a different Rust
edition than your crate uses. For example, try isn’t a keyword in the 2015 edition but is in
the 2018 edition. If you depend on a library that’s written using the 2015 edition and has a
try function, you’ll need to use the raw identifier syntax, r#try in this case, to call that
function from your 2018 edition code. See Appendix E for more information on editions.