Вывод типов

Движок вывода типов весьма умён. Он делает куда больше, чем просто смотрит на тип r-value при инициализации. Он также следит за тем, как используется значение после инициализации, чтобы определить его тип. Вот расширенный пример вывода типов:

fn main() {
    // Благодаря выведению типов компилятор знает, что `elem` имеет тип `u8`.
    let elem = 5u8;

    // Создадим пустой вектор (расширяемый массив).
    let mut vec = Vec::new();
    // В данном месте компилятор не знает точный тип `vec`, он лишь знает,
    // что это вектор каких-то значений (`Vec<_>`).

    // Добавляем `elem` в вектор.
    vec.push(elem);
    // Ага! Теперь компилятор знает, что `vec` — это вектор, который хранит в себе тип `u8`
    // (`Vec<u8>`)
    // ЗАДАНИЕ ^ Попробуйте закомментировать строку `vec.push(elem)`

    println!("{:?}", vec);
}

Не потребовалось никакой аннотации типов переменных, компилятор счастлив, как и программист!