Rust 構文入門

Rustの構文を構成する構造や部品を理解しよう

はじめに

コードの階層構造

プログラムは、大きな構造から小さな部品へと分解できます。この関係を知ると、コードの見え方が変わります。

ステップ 1

部品(トークン)の役割を知る

println!("Hello, world!"); の各部分にマウスカーソルを合わせてみてください。

println!("Hello, world!");

ここに解説が表示されます。

ステップ 2

単純な構造(文とマクロ)を理解する

コードのまとまりにカーソルを合わせると、その構造がわかります。下のステップ3のツリーも連動して光ります。

println!("Hello, world!") ;

ここに解説が表示されます。

ステップ 3

コンパイラの視点 (単純な構文木)

コンパイラはコードをこの「木」の形で理解します。ツリーの各部分に触れると、ステップ2のコードも連動します。

  • 文 (Statement)
    • マクロ呼び出し (MacroInvocation)
      • マクロ名: Identifier "println"
      • 引数 (arguments)
        • 値 (Literal): "Hello, world!"

ステップ 4

制御構文を分解する

条件分岐や繰り返しなど、より複雑な命令の構造を見てみましょう。タブで切り替えてください。

if score >= 80 { ... }
else if score >= 60 { ... }
else { ... }

ここに解説が表示されます。

  • ExprIf
    • cond: ExprBinary (score >= 80)
    • then_branch: Block
    • else_branch: ExprIf
      • cond: ExprBinary (score >= 60)
      • then_branch: Block
      • else_branch: ExprBlock
for i in 0..5 { ... }

ここに解説が表示されます。

  • ExprForLoop
    • pat: PatIdent "i"
    • expr: ExprRange (0..5)
    • body: Block
match fruit {
"apple" => ... ,
"orange" => ... ,
_ => ... ,
}

ここに解説が表示されます。

  • ExprMatch
    • expr: ExprPath "fruit"
    • arms: [...]
      • Arm
        • pat: PatLit "apple"
        • body: Expression {...}
      • Arm
        • pat: PatLit "orange"
        • body: Expression {...}
      • Arm
        • pat: PatWild (_)
        • body: Expression {...}