enum List {
Cons(i32, List),
Nil,
}
fn main() {
let _l = List::Nil;
}rustc (edition 2021) bu programa ne yapar?- aDerlenir;
List::Nil0 byte kapladığı için boş liste heap ayırmadan oluşturulur - b
E0072ile reddedilir:Listsonsuz boyutlu, varyantBox<List>gibi bir dolaylama ister✓ - cDerlenir, ama çalışma zamanında herhangi bir
Consdüğümü oluşturmak stack'i taşırır ve panic olur - d
E0382ile reddedilir, çünkü içListhenüz tanımlanırkenConsiçine move edilir
Açıklama:Bir enum'un boyutu derleme zamanında sonlu ve bilinir olmalıdır.
Cons(i32, List) içinde List'i doğrudan sakladığı için List'in boyutu kendine bağlı olurdu; derleyici bunu E0072 ile reddeder (rustc 1.98'de ölçüldü). Özyinelemeli parçayı bir işaretçinin arkasına almak (Cons(i32, Box<List>)) varyanta sabit 8 byte'lık bir alan verir; enum'un tamamı 64-bit hedefte 16 byte ölçülür. Burada çalışma zamanı diye bir aşama yoktur, program tip denetimini hiç geçmez.