Rustにおけるキーワードの役割一覧
概要: Rustにおけるキーワードの役割をできる限り列挙する。キーワードではないものについても一部取り上げる。
強キーワード部門
キーワード | 役割 |
---|---|
as |
修飾パス <T as Tr>::foo useとextern crateにおける別名 use foo as bar; 型の変換 x as usize |
box |
box式 box 1 boxパターン box x |
break |
break式 break 'a 1; |
const |
定数・関連定数 const X : i32 = 0; 関数型・関数宣言・関数定義 const fn f() 生ポインタ型 *const u8 |
continue |
continue式 continue 'a; |
crate |
extern crate extern crate combine; pub(restricted)構文 pub(crate) mod m; |
else |
if-else if b {} else {} if-let-else if let p = e {} else {} |
enum |
列挙型 enum E { ... } |
extern |
関数型・関数宣言・関数定義 extern "C" fn f() 外部アイテム extern "C" { ... } extern crate extern crate combine; |
false |
bool型の定数・パターン |
fn |
関数型・関数宣言・関数定義 fn f() |
for |
トレイト実装 impl Tr for T {} 高階の関数ポインタ for<'a> fn f(&'a u8) 高階のトレイトオブジェクト・トレイト境界 for<'a> Tr<&'a T> 高階のwhere節 where for<'a> &'a [u8]: Tr<'a> for式 for i in (0..10) {} |
if |
if式 if b {} else {} match腕のガード match x { Some(t) if t < 0 => { ... }, ... } |
impl |
実装 impl T {} impl Tr for T {} 匿名型 fn f() -> impl Fn() |
in |
pub(restricted)構文 pub(in path::to::module) fn f(); 配置構文 in place { expr } for式 for i in (0..10) {} |
let |
let文 let x = 0; if let/while let式 if let Some(x) = x {} |
loop |
loop式 loop {} 'a: loop {} |
match |
match式 match x { Some(y) => {}, None => {}} |
mod |
モジュール mod foo; mod foo {} |
move |
クロージャ(ムーブキャプチャー) move |x, y| z 廃止されたムーブ参照? &move T |
mut |
書き換え可能な生ポインタ型 *mut T 専有参照型 &mut T 可変static static mut X : i32 = 0; 可変束縛 let (x, mut y) = (1, 2); 専有借用 &mut x 専有参照外しパターン &mut p |
pub |
可視性 pub pub(self) pub(super) pub(crate) pub(in path) |
ref |
借用パターン ref p |
return |
return式 return return x |
self |
相対パス self::foo::bar pub(restricted)構文 pub(self) self引数 fn f(self: Box<Self>) self引数ショートカット fn f(&self) |
Self |
Self型引数 fn new() -> Self; |
static |
外部staticアイテム extern "C" { static X : u32; } staticアイテム static X : u32 = 0; |
struct |
構造体 struct S {} |
super |
相対パス super::super::X |
trait |
トレイト trait Tr {} |
true |
bool型の定数・パターン |
type |
型別名 type A<X> = Box<Box<X>>; 関連型(トレイトまたはトレイト実装) impl Tr for T { type X = (); } |
unsafe |
トレイト unsafe trait Send {} 関数型・関数宣言・関数定義 unsafe fn f() 実装 unsafe impl Send for T {} unsafe式 unsafe { ... } |
use |
インポートと再エクスポート use foo::bar; |
where |
where節(トレイト・実装・構造体・共用体・列挙型・型別名・関数宣言・関数定義) where T: Clone |
while |
while式 while b {} |
弱キーワード部門
弱キーワードは特定の文脈でキーワードに準じる扱いを受ける識別子のことである。
キーワード | 条件 | 役割 |
---|---|---|
default |
impl 内、 fn /type /const の前※実装アイテムマクロ名として使えないがバグかもしれない |
特殊化におけるデフォルトの実装 default fn f() { ... } |
union |
モジュールまたはブロック内、識別子の前 | 共用体 union U { A(u8), B(u32) } |
'static |
生存期間 | 最小(最長)の生存期間境界 |
予約キーワード部門
予約キーワードは構文上の役割を持たないキーワードだが、将来に向けて部分的に実装されている場合がある。
キーワード | 役割 |
---|---|
abstract |
|
alignof |
|
become |
|
do |
|
final |
|
macro |
宣言マクロ2.0 |
offsetof |
|
override |
|
priv |
|
proc |
|
pure |
|
sizeof |
|
typeof |
typeof式 |
unsized |
|
virtual |
|
yield |
基本型名部門
基本型名は構文上は通常の識別子であり、名前解決時に特別扱いされる。
識別子 | 役割 |
---|---|
i8 , i16 , i32 , i64 , i128 , isize |
符号つき整数 |
u8 , u16 , u32 , u64 , u128 , usize |
符号なし整数 |
f32 , f64 |
浮動小数点数 |
char |
Unicodeスカラー値 |
bool |
真理値 |
str |
UTF-8文字列 |
Prelude部門
preludeは既定で use
されているアイテムである。現在は std::prelude::v1
が使われている。
識別子 | 役割 |
---|---|
Copy |
ムーブしてもムーブ元が有効であることを示すトレイト T: Copy |
Send |
他スレッドにムーブできることを示すトレイト T: Send |
Sized |
バイト数が一定で、ポインタがthin pointerであることを示すトレイト T: ?Sized |
Sync |
参照を他スレッドにムーブできることを示すトレイト T: Sync |
Drop |
デストラクタを定義するためのトレイト impl Drop for T { fn drop(&mut self) {} } |
Fn |
&self で呼ばれるクロージャが実装するトレイト F: Fn(&[u8]) -> &u8 |
FnMut |
&mut self で呼ばれるクロージャが実装するトレイト Box<FnMut(i32) + 'a> |
FnOnce |
self で呼ばれるクロージャが実装するトレイト F: FnOnce(i32) -> T |
drop |
値をその場で破棄する関数 drop(this_variable) |
Box |
単一の所有者をもつヒープ上のデータ Box::new([1, 2, 3]) |
ToOwned |
別の型に複製できる型 s.to_owned() |
Clone |
同じ型に複製できる型 s.clone() |
PartialEq |
推移対称関係 x == y |
PartialOrd |
推移反対称関係 x < y |
Eq |
反射推移対称関係 x == y |
Ord |
全順序 x < y |
AsRef |
共有参照への明示的な変換 s.as_ref() |
AsMut |
専有参照への明示的な変換 s.as_mut_ref() |
Into |
明示的な変換 x.into::<io::Error>() |
From |
明示的な変換 (Into の逆) impl From<T> for S { ... } |
Default |
デフォルト値をもつ型 S { x: 1 .. Default::default() } |
Iterator |
イテレータ for i in v.iter() {} |
Extend |
複数要素の一括挿入 v.extend([1, 2, 3]).iter() |
IntoIterator |
イテレータに変換可能 for i in vec![1, 2, 3] {} |
DoubleEndedIterator |
両側から走査できるイテレータ for i in v.rev() {} |
ExactSizeIterator |
大きさの判明しているイテレータ v.iter().map(|&x| x + 1).len() |
Option |
NoneかSomeをとる型 fn f() -> Option<i32> { ... } |
Some |
中身があるとき let mut x = Some(0); |
None |
中身がないとき let mut x = None; |
Result |
成功したときの結果か失敗したときのエラー内容をとる型 fn read() -> Result<T, E> { ... } |
Ok |
成功 { ...; Ok(()) } |
Err |
失敗 return Err(MyError::MysteriousError) |
SliceConcatExt |
joinとconcat用 ["Chicken", "Egg"].join(" + ") |
String |
所有権のある文字列 let s = String::from("foo"); |
ToString |
to_string用 let s = 1.to_string(); |
Vec |
所有権のある可変長配列 let x = Vec::with_capacity(100); |
標準ライブラリのマクロ部門
標準ライブラリはデフォルトで #[macro_use]
されるため、以下のマクロは指示なしですぐに使うことができる。
マクロ | 役割 |
---|---|
assert! |
falseならパニックする assert!(x < n); |
assert_eq! |
等しくないならパニック assert_eq!(a + b, b + a); |
assert_ne! |
等しいならパニック assert_ne!(i, j); |
cfg! |
#[cfg()] のマクロ版。コンパイル時の条件次第でtrue/falseになる if cfg!(debug_assert) { ... } |
column! |
コンパイル時行番号 println!("{}", column!()); |
concat! |
リテラルの連結 println!("{}", concat!("foo", "bar", 10)); |
debug_assert! debug_assert_eq! debug_assert_ne! |
デバッグビルドでのみ有効化される assert*! マクロ |
env! |
コンパイル時環境変数展開 env!("PATH") |
file! |
コンパイル時ファイル名 println!("{}", file!()); |
format! |
sprintf的なやつ let s = format!("{:08x}", 12345); |
format_args! |
format! や println! の内部処理 |
include! |
#include 的なやつ include!("precompiled.rs"); |
include_bytes! |
コンパイル時に外部ファイルをバイト列リテラルに変換 let icon = include_bytes!("icon.png"); |
include_str! |
コンパイル時に外部ファイルを文字列リテラルに変換 let csv = include_str!("data.csv"); |
line! |
コンパイル時行番号 println!("{}", line!()); |
module_path! |
コンパイル時モジュールパス println!("{}", module_path!()); |
option_env! |
コンパイル時環境変数展開(ないかもしれない場合) option_env!("PATH") |
panic! |
パニックする panic!("There must be a bug!"); |
print! |
printf的なやつ print!("Hello, {}!\n", name); |
println! |
printf的なやつ+改行 print!("Hello, {}!", name); |
stringify! |
文字列化 println!("{}", stringify!(foo bar 0 1 # $ %)); |
thread_local! |
スレッドローカル変数の定義 thread_local! { static X : RefCell<Data> = RefCell::new(Data::new()); } |
try! |
try構文 ? とほぼ同じ |
unimplemented! |
パニックするが、未実装が理由のときに使うとよい |
unreachable! |
パニックするが、本来なら到達しないはずのところで使うとよい |
vec! |
可変長配列の生成 vec![1, 2, 3] vec![10; 10000] |
write! |
fprintf的なやつ write!(f, "Hello, {}!\n", name); |
writeln! |
fprintf的なやつ+改行 writeln!(f, "Hello, {}!", name); |