Изменения в новых версиях / Rust 2018

// *** before: ***
// голое имя трейта в позиции типа означало объект трейта,
// и его было не отличить от самого трейта
fn draw_all(shapes: &[Box<Shape>]) {
    for s in shapes {
        s.draw();
    }
}

// *** in version Rust 2018: ***
// объект трейта помечается словом dyn - видно, что вызов через таблицу
fn draw_all(shapes: &[Box<dyn Shape>]) {
    for s in shapes {
        s.draw();
    }
}