Neden DEMİRYOLU yok .NET?
Öncelikle C geliştirici Java RAII (Resource Acquisition Is Initialization) yokluğu ve .NET beni hep rahatsız etmiştir. Temizlik suçlusu olduğu gerçeğini try finally
ya . (verdiği tüketici sınıf yazar taşındı NET using
construct) belirgin olarak düşük gibi görünüyor.
Java tüm nesneler yığını bulunur, çünkü hiçbir destek DEMİRYOLU için var ve Çöp toplayıcı doğal olarak deterministik imha desteklemiyor neden, ama görüyorum .DEMİRYOLU için (görünüşte) mükemmel bir aday var değer türleri (struct
) giriş NET. Yığın üzerinde oluşturulan değer bir tür iyi tanımlanmış bir kapsam ve C yıkıcı semantik kullanılabilir. Ancak CLR değer tipi bir yıkıcı için izin vermez.
Rastgele aramalarım eğer değer tipi boxed çöp toplayıcısını yetkisi ve bu nedenle, bu yıkımın altında kalan bir argüman belirli olmayan hale bulundu. Bu argümanı yeterince güçlü olmadığını hissediyorum, DEMİRYOLU faydaları bir yıkıcı ile değer türü olamaz kutulu (ya da sınıf olarak kullanılan) olması gerektiğini söylemek için yeterince büyük.
Uzun lafın kısası benim sorum kesmektir: herhangi bir nedenle değer türleri için DEMİRYOLU tanıtmak amacıyla kullanılamaz .NET? (veya DEMİRYOLU bariz avantajları hakkında benim iddiam kusurlu olduğunu düşünüyor musunuz?)
Düzenleme:Açıkçası ilk dört cevaplar noktasını kaçırmış beri sorunu olmadığını ifade etmeliyim. BenbiliyorumFinalize
ve non-deterministik özellikleri hakkında, using
oluşturmak ve bu iki seçenek DEMİRYOLU aşağı hissediyorum biliyorum. using
a sınıfı tüketici hatırlamak gereken bir şey daha var (kaç kişi StreamReader
using
bir blok koymayı unutmuş?). Benim sorum dil tasarım, neden böyle oldu ve geliştirilebilir? hakkında felsefi bir
Genel bir kararlı ile örneğin yıkılabilir değer türü using
lock
anahtar kelimeleri gereksiz yapabilirim (kütüphane sınıflar tarafından ulaşılabilir):
public struct Disposer<T> where T : IDisposable
{
T val;
public Disposer(T t) { val = t; }
public T Value { get { return val; } }
~Disposer() // Currently illegal
{
if (val != default(T))
val.Dispose();
}
}
< / ^ hr .
Ben bir kez gördüm ama gelmişken bir Alıntı ile son yardım edemem, ancak şu anda kaynağını bulamadım.
Soğuk ölü elimi kapsam dışına çıktığında deterministik benim imha alabilir. --Anon
CEVAP
Daha iyi bir başlık olurdu "Neden DEMİRYOLU C#/VB yoktur". C /CLİ (C Başardı kürtaj evrimi ) C tam olarak aynı anlamda DEMİRYOLU vardır . Sadece CLİ dillerin dinlenmek aynı kesinleşmesi desen şeker sözdizimi hepsi (C /CLİ için yönetilen nesneleri Yıkıcı etkili finalisers), ama öyle.
http://blogs.msdn.com/hsutter/archive/2004/07/31/203137.aspx gibi olabilir
Neden sıralanmamış bir dizi daha hızlı...
Neden bu iki kez (1927) garip bir sonu...
Neden HTML düşün” renk? “chucknorris m...
Neden Google while(1); JSON yanıtların...
Neden char[] şifreler için Dize Java t...