Otimização de Nicho

#[derive(Debug)]
enum List<T> {
    Cons(T, Box<List<T>>),
    Nil,
}

fn main() {
    let lista: List<i32> = List::Cons(1, Box::new(List::Cons(2, Box::new(List::Nil))));
    println!("{lista:?}");
}

Uma Box não pode estar vazia, portanto o ponteiro é sempre válido e não nulo (null). Isto permite que o compilador otimize o layout da memória:

PilhaHeaplista12null