SORU
6 EKİM 2008, PAZARTESİ


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
6 EKİM 2008, PAZARTESİ


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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Commander Chalkboard

    Commander Ch

    20 Ocak 2014
  • Lin Steven

    Lin Steven

    17 EKİM 2006
  • snookie77

    snookie77

    2 Mart 2006