Rust Reserved Keywords

author: 371tti


予約語

Rust の予約語は、言語の基本的な構文や機能を定義するために使用されます。これらのキーワードは、識別子(変数名や関数名など)として使用することはできません。

stable(Edition 2024 / strict keywords)

識別子(変数名・関数名など)として使えない ガチ予約語(doc.rust-lang.org)

制御構文

if

条件分岐の if 式。Rust の if は式なので値を返せる(let x = if cond { ... } else { ... };)。

else

if の分岐先。else if もここに含まれる(else {} / else if ... {})。

match

パターンマッチの match 式。網羅性(exhaustive)チェックが強いのが特徴。

while

条件が true の間繰り返すループ。while let もこの系統(パターンで回す)。

for

イテレータ(IntoIterator)を使うループ。for x in iter {} の形。

loop

無限ループ(ただし break で値を返して抜けられるので、式としても使われる)。

break

ループを終了するためのキーワード。break は値を返すことができ、ループの結果として使用されることがあります。

continue

現在の周回を打ち切って次の反復へ進む。

return

関数から即時に戻る。return expr; で値を返す(末尾式で返すのが基本だが明示も可能)。


定義 / 構造 / 名前空間

fn

関数定義。fn name(args) -> Ret { ... }

struct

構造体定義(フィールド付き / タプル / ユニット構造体)。

enum

列挙型(バリアント)定義。Rust の代数的データ型(ADT)の中心。

union

共用体定義。unsafe と絡むことが多い(どのフィールドが有効かを自分で管理する必要)。

trait

トレイト定義(インターフェース + デフォルト実装 + 関連型/定数 など)。

impl

実装ブロック。impl Type {}(固有メソッド)や impl Trait for Type {}(トレイト実装)。

type

型エイリアス定義(type Name = ...;)。新しい型を作るわけではなく“別名”。

const

定数定義。コンパイル時に評価できる値(定数評価)として使う。

static

静的変数。基本はグローバル領域に置かれ、ライフタイム 'static を持つ。可変 static mutunsafe

let

変数束縛(ローカルの名前付け)。パターン束縛もできる(let (a,b) = ...;)。

mod

モジュール定義(名前空間)。ファイル/ディレクトリ構造と関連する。

use

パスの導入(インポート)。use foo::bar as baz; のように別名も可能。

crate

パスで使うキーワード。crate::...現在のクレートのルートから参照する。

super

パスで使うキーワード。super::...親モジュールを指す。

self

文脈により意味が変わる:

  • パス:self::...現在のモジュール
  • メソッド引数:selfレシーバ(所有権を持つ self)

Self

トレイト/impl の中で **「実装対象の型」**を表す型名(大文字)。


型・変換・境界(文法要素として重要)

as

キャスト/型変換の構文(expr as T)。数値変換などで使う(ただし安全性は自分で保証)。

in

for pat in iter構文要素

where

ジェネリクス境界の指定(where T: Trait, ...)。型引数が多いときに読みやすい。


所有権 / 参照 / ミュータビリティ

move

クロージャが捕捉(capture)するときに 環境をムーブする指定。所有権をクロージャへ移す。

mut

可変を表す。let mut x(可変束縛)、&mut T(可変参照)など。

ref

パターン内で 参照として束縛する(例:let ref r = x;)。最近は参照パターンや借用推論で出番は減りがち。


安全性 / FFI / 可視性

unsafe

安全性をコンパイラが保証できない操作を許可する印。unsafe {} ブロック、unsafe fnunsafe trait などで使う。

extern

FFI(外部関数インターフェース)関連。extern "C" { ... }extern crate ...(今はあまり使わないがキーワードとして残る)。

pub

可視性(公開)指定。pub, pub(crate), pub(super), pub(in path) など。


動的ディスパッチ / 非同期

dyn

動的ディスパッチのトレイトオブジェクト(Box<dyn Trait> など)を明示するキーワード。(doc.rust-lang.org)

async

async fn / async {} ブロックなどで、Future を返す非同期構文。

await

future.await で Future の完了を待つ(非同期ランタイムに制御を返しつつ待機)。


真偽値リテラル(予約扱い)

厳密には「キーワード枠で扱われるリテラル」。(doc.rust-lang.org)

true

真(bool リテラル)。

false

偽(bool リテラル)。


reserved(将来の使用のために予約 / Edition 2024)

今は機能が無い or 未安定だが、将来の言語拡張のために名前だけ確保されている語。 2024 では gen が追加、try は 2018 から reserved。(doc.rust-lang.org)

abstract

将来の抽象化(抽象的な定義/実装)用途に備えて予約。現状の stable Rust では意味を持たない。

become

過去に 末尾呼び出し最適化(TCO) などの文脈で議論された名残として予約されている(現状は未使用の予約語)。Nightly では一時期 become 式が利用可能だった。(doc.rust-lang.org)

box

過去に “box 式” などの構文と関係していた歴史があり、将来の用途も含め予約されたまま。Nightly では一時期 box 式が利用可能だった。(doc.rust-lang.org)

do

将来の構文拡張用に予約(例えば do { ... } 風の文法などの余地)。現状未使用。

final

OOP 的な「継承禁止」などを連想させる語として予約されているが、現状の Rust で意味は無い(将来用の確保)。

macro

将来のマクロ定義構文(macro ...)などのために予約。現状は macro_rules! が主流で、この語自体は未使用。

override

OOP 的な “オーバーライド明示” を連想させる語として予約。現状未使用。

priv

pub の逆(非公開指定)を連想させる語として予約。現状未使用。

typeof

C 系の typeof に近い「型を得る」構文を連想させる語として予約。現状未使用。

unsized

?Sized 等のサイズ不定型周りの将来拡張を見据えて予約。現状未使用。

virtual

かつての “virtual 構文” 系の試行や将来拡張の余地として予約。現状未使用。

yield

ジェネレータ/コルーチン系の構文で使われ得るため予約。現状 stable では通常使えない(将来の機能枠)。Nightly では yield 式が利用可能。(doc.rust-lang.org)

try

2018 以降の edition で reserved。try { ... } のような try ブロック構文など将来/不安定機能のために確保されている。Nightly では try 式が利用可能。(doc.rust-lang.org)

gen(Edition 2024 で追加)

2024 edition で新たに予約。将来の gen blocks(ジェネレータブロック) 導入のために確保された。(doc.rust-lang.org)


参考:予約語をどうしても識別子にしたい場合(raw identifiers)

予約語でも r# を付ければ識別子として使える(ただし reserved を名前に使うのは将来互換の観点で非推奨)。(doc.rust-lang.org)

let r#type = 1;
fn r#match() {}