SORU
26 ŞUBAT 2009, PERŞEMBE


C saf fonksiyonlar#

Biliyorum C# paralel programlama bir çok destek alıyorum, ama AFAIK hala yan etkileri doğrulama için yapıları yoktur, değil mi?

C daha zor artık sanırım# zaten ortaya koydu. Ama bu almak için bir planları var mı? Ya F# tek .Yan etkileri doğrulama için yapıları olduğu NET bir dil?

CEVAP
26 ŞUBAT 2009, PERŞEMBE


C# dili değil, ama .NET çerçeve olabilir.

Sözleşmeler kütüphane statik analiz araçları tanıttı .NET 4 sunuyorlar olabilir:

Microsoft kullanarak [Değişmez] ve [Saf] içinde .NET 3.5 çerçeve şimdi.

Örneğin, bkz: [Microsoft.Sözleşmeler.Değişmez] ve [Microsoft.Sözleşmeler.Saf] içinde .NET system.core.dll 3.5,. Ne yazık ki, iç ediyorlar. Ancak, Microsoft.Sözleşmeler*. çoğunlukla şartnameye doğar# araştırma ve Spec# bir parçası olacak olan Sözleşmeler API içine katlanmış .NET 4.0.

Bu ne gelirse göreceğiz. Eğer pre-release olmadığını görmek için kontrol etmedim .NET 4.0 bit [Sabit] Sözleşmeler API [Saf] gibi veya herhangi bir API içerir. Eğer yaparlarsa, statik analiz aracı kuralı yerine, derleyici zorlamak için olacak sanırım.

editBen sadece latest pre-release drop of MS Code Contracts dan Microsoft.Contracts.dll bu hafta yüklü. İyi haber: [Saf] ve [Mutability(Mutability.Değişmez)] öznitelikleri olacağını gösteriyor kütüphanede var .NET 4.0. Woohoo!

2 düzenleyinŞimdi .NET 4 çıktı, bu tür baktım. [Pure] hala sistemde yok.Tanılama.Sözleşmeler ad. Genel kullanım için tasarlanmış değil, daha ziyade, Sözleşme ile kullanmak için API öncesi ve sonrası durumu kontrol ediyor. Derleyici, neither does the Code Contract checker tool enforce purity zorlanmaz. [Mutability] gitti. Microsoft kullanarak nerede olduğunu ilginç bir şekilde, Mutability ve Saf bağlıyor .NET 3.5 (system.core.dll iç Bigınteger sınıfı).NET 4 Bigınteger Sistem içine taşındı.Rakamsal, ve bu tür kapalı [Saf] ve [Mutability] öznitelikleri kaldırmıştır.Sonuç: görüntülenir .NET 4 yan etkileri doğrulama için hiçbir şey yapmaz.

3 düzenlemekİle son zamanlarda (geç 2011) önizlemesi Microsoft Rosyln compiler-as-a-servis araçları -- inanılan planlanan RTM Visual Studio 2015 -- bak gibi olacaklar, güçlü destek bu gibi şeyler; yazabilirsiniz uzantıları derleyici için onay için saflık ve değişmezliğini tanıdı ve sorun, derleyici uyarı eğer bir şey dekore edilmiş olan bu nitelikler yok takip kuralları. Öyle olsa bile, bu destek için bir kaç yıl bakıyoruz.

4 düzenleyinŞimdi Rosyln burada yaz gibi 2015, saf/derleyici bir uzantısı oluşturmak için yeteneği değişmezliğini tanıdı gerçekten var. Ancak, mevcut çerçeve kod, ne de 3. parti kütüphane kodu için bir şey yapmaz. Ama ufukta C# 7 proposal for immutable types. Bu derleyici tarafından uygulanacak ve yeni bir takdim ederdeğişmezve bir [Sabit] özniteliği anahtar kelime için C#.NET çerçeve. Kullanımı:

// Edit #4: This is a proposed design for C# 7 immutable. 
// Compiler will implicitly mark all fields as readonly.
// Compiler will enforce all fields must be immutable types.
public immutable class Person
{
    public Person(string firstName, string lastName, DateTimeOffset birthDay)
    {
        FirstName = firstName; // Properties can be assigned only in the constructor.
        LastName = lastName;
        BirthDay = birthDay; 
    }

    public string FirstName { get; } // String is [Immutable], so OK to have as a field
    public string LastName { get; }
    public DateTime BirthDay { get; } // Date is [Immutable] too.
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • glowpinkstah

    glowpinkstah

    16 Mayıs 2006
  • Mr_BrettHooge

    Mr_BrettHoog

    3 Ocak 2011
  • Titan Lee Hai

    Titan Lee Ha

    14 Temmuz 2008