En azından biraz aşina olduğum her modern OO programlama dilinin (temelde sadece Java, C # ve D) kovaryant dizilere izin verdiğini fark ettim. Yani, bir dize dizisi bir nesne dizisidir:
Object[] arr = new String[2]; // Java, C# and D allow this
Kovariant diziler statik tip sistemde bir deliktir. Derleme zamanında algılanamayan yazım hatalarını mümkün kılarlar, bu nedenle bir diziye her yazım çalışma zamanında kontrol edilmelidir:
arr[0] = "hello"; // ok
arr[1] = new Object(); // ArrayStoreException
Çok sayıda dizi mağaza yaparsam bu korkunç bir performans hit gibi görünüyor.
C ++ 'in kovaryant dizileri yoktur, bu nedenle böyle bir çalışma zamanı kontrolü yapmaya gerek yoktur, yani performans cezası yoktur.
Gerekli çalışma zamanı kontrollerinin sayısını azaltmak için herhangi bir analiz yapıldı mı? Örneğin, şunu söylersem:
arr[1] = arr[0];
biri, mağazanın başarısız olamayacağını iddia edebilir. Eminim düşünemediğim birçok başka optimizasyon vardır.
Modern derleyiciler aslında bu tür optimizasyonlar yapıyor mu, yoksa örneğin bir Quicksort'un her zaman O (n log n) gereksiz çalışma zamanı kontrolleri yapması gerçeğiyle yaşamak zorunda mıyım?
Modern OO dilleri, eş değişkenli dizileri destekleyerek oluşturulan ek yükleri önleyebilir mi?