FABRKNT
Reth 入門 — Rust Ethereum の世界へ
Rust環境を整える
レッスン 9 / 11·CONTENT12 分20 XP
コース
Reth 入門 — Rust Ethereum の世界へ
レッスンの役割
CONTENT
順序
9 / 11

レッスン8 — Rust クイックリファレンス

問い

Reth / Revm / Alloy のコードを読むのに頻出する Rust 文法を 1 レッスンで一気に。網羅的でなく「これだけ知っていれば 80% 読める」最小セット。

原理(最小モデル)

  • 変数. let x = 5;(不変、デフォルト)/ let mut y = 10;(可変)/ const PI: f64 = 3.14;(コンパイル時定数)。
  • 関数. fn add(a: i32, b: i32) -> i32 { a + b }、最後の式が戻り値(; なし)、return も使えるが慣用的でない。
  • 所有権. let s1 = String::from("hello"); let s2 = s1; で s1 ムーブ(使用不可)、&s1 で借用、&mut s1 で可変借用。
  • Result / Option / ?. Result<T, E>(成功 / 失敗)+ Option<T>(あり / なし)+ ? でエラー早期 return。
  • if は式. let x = if cond { a } else { b }; 三項演算子なし、if 自体が値を返す。
  • match. パターンマッチ、全パターン網羅必須、_ でデフォルト。
  • struct / enum. struct Point { x: f64, y: f64 } / enum Color { Red, Green, Blue }impl Point { fn new(...) -> Self { ... } } でメソッド。
  • trait. 共有インターフェース、impl Display for Point { ... } で実装、<T: Trait> でジェネリック境界。
  • async / await. async fn fetch() -> Result<...>.await で完了待ち、Tokio ランタイム上。
  • マクロ. println! / vec! / format! / assert_eq! 等、! 付き、コンパイル時展開、関数より柔軟。

具体例 + ステップで組み立てる

Rustクイックリファレンス

これから書くコードに登場するRust構文を一気に押さえる。「Rustを学ぶ」専用コースは別にあるが、Reth/Revm/Alloyを学ぶ中でRustも自然に身につく よう、必要箇所で都度説明する。

1. 変数:letlet mut

Rustの変数はデフォルトで 不変(immutable) である。書き換えるときは mut を付ける。

let x = 10;        // 不変
// x = 11;        // コンパイルエラー!

let mut y = 10;    // 可変
y = 11;            // OK

2. 基本データ型

意味
i32, i64符号付き整数
u32, u64, u128符号なし整数
booltrue / false
&str借用された文字列(読み取り専用、軽い)
String所有された文字列(書き換え可能、ヒープ)

&strString の違い」は最初に混乱しやすい。今は &str は他人の家を覗く感じ、String は自分の家を持つ感じ」 だけ覚えれば十分である。所有権は次のティアで詳しく扱う。

3. 関数

fn add(a: i64, b: i64) -> i64 {
    a + b   // 末尾にセミコロンを付けないと「式」として返り値になる
}
  • 引数は 名前: 型
  • 返り値は -> 型
  • 最後の式(セミコロンなし)が暗黙の return

4. メソッドの呼び方

Rustの値はメソッドを持つ。例:

let s = "0x123";
s.starts_with("0x");  // true / false
s.len();              // 5
"hello".to_uppercase(); // "HELLO"

5. 条件分岐:if / else

let n = 7;
if n % 2 == 0 {
    println!("even");
} else {
    println!("odd");
}

if 自体が「式」なので、値を返すこともできます:

let parity = if n % 2 == 0 { "even" } else { "odd" };

6. 表示:println!

! が付いているのは マクロ だからです(関数ではない)。{} がプレースホルダー。

let name = "Alloy";
println!("Hello, {}!", name);          // Hello, Alloy!
println!("{} + {} = {}", 1, 2, 1 + 2); // 1 + 2 = 3

7. コレクション:Vec

可変長の配列である。スマートコントラクトのスタックやトランザクションリストなど、Rust EVMコードで頻出する。

let mut v: Vec<i64> = Vec::new();
v.push(10);
v.push(20);
let last = v.pop();   // Some(20)
println!("{:?}", v);  // [10]

{:?}デバッグ表示 用のプレースホルダーである。

8. これだけ覚えればOK

ここまでが Reth/Revm/Alloy の最初のコード読解に必要な「最小限の Rust」である。次の宿題でこれらをすべて使う。

構文一言
let x = ...不変な変数
let mut x = ...可変な変数
fn name(arg: T) -> R {}関数定義
x.method()メソッド呼び出し
if .. else ..条件分岐(式としても使える)
println!("{}", x)表示
Vec<T>可変長配列

完璧に覚える必要はない。書きながら少しずつ思い出す のが正解である。

まとめ(3行)

  • 頻出文法 = 変数 / 関数 / 所有権 / Result / ? / if 式 / match / struct / enum / trait / async / マクロ。
  • 「これだけ知っていれば 80% 読める」最小セット、網羅的でなく即実用、不明箇所は doc.rust-lang.org で都度確認。
  • 次は最初の宿題「0x チェック」、Rust Playground で実際に書いてみる。