型推論

Rust は、どのように変数が 使用されているか を確認することで、型を判別します。

fn takes_u32(x: u32) {
    println!("u32: {x}");
}

fn takes_i8(y: i8) {
    println!("i8: {y}");
}

fn main() {
    let x = 10;
    let y = 20;

    takes_u32(x);
    takes_i8(y);
    // takes_u32(y);
}
This slide should take about 3 minutes.

このスライドは、変数の宣言と使用方法による制約に基づいて、Rust コンパイラが型を推測する仕組みを示しています。

このように宣言された変数は、どのようなデータも保持できる動的な「任意の型」ではない、という点を強調することが非常に重要です。このような宣言によって生成されたマシンコードは、型の明示的な宣言と同一です。コンパイラが代わりに作業を行い、より簡潔なコードの作成を支援します。

整数リテラルの型に制約がない場合、Rust はデフォルトで i32 を使用します。これは、エラー メッセージに {integer} として表示されることがあります。同様に、浮動小数点リテラルはデフォルトで f64 になります。

fn main() {
    let x = 3.14;
    let y = 20;
    assert_eq!(x, y);
    // エラー: `{float} == {integer}` の実装がありません
}