Çok fazla sebep var. Eric Lippert, nedenlerin feature X
C # 'da olmadığını, sadece bütçelerinde olmadığı için defalarca dile getirdi. Dil tasarımcılarının bir şeyleri uygulamak için sınırsız zaman veya parası yoktur ve her yeni özelliğin de bununla ilgili bakım maliyetleri vardır. Dili mümkün olduğu kadar küçük tutmak, dil tasarımcıları için kolay değildir - alternatif uygulamalar ve araçlar yazan herkes için de daha kolaydır (örneğin IDE'ler) Ek olarak, bir dil yerine bir dil yerine uygulandığı zaman, ücretsiz taşınabilirlik. Birim testi bir kütüphane olarak uygulanıyorsa, yalnızca bir kez yazmanız yeterlidir ve bu, dilin uygun bir uygulamasında çalışacaktır.
D'nin birim testi için sözdizimi düzeyinde bir desteğe sahip olduğunu belirtmekte fayda var . Bunu neden atmaya karar verdiklerini bilmiyorum, ama D'nin "yüksek seviyeli bir sistem programlama dili" olduğu anlamına geliyor. Tasarımcılar, güvenli olmayan, düşük seviyeli C ++ kodunun geleneksel olarak kullanıldığı ve güvenli olmayan koddaki bir hatanın inanılmaz derecede pahalı - tanımsız davranışı için geçerli olmasını istedi. Bu yüzden bazı güvenli olmayan kodların çalıştığını doğrulamanıza yardımcı olacak herhangi bir şey için fazladan çaba harcamanın onlara mantıklı geldiğini düşünüyorum. Örneğin, yalnızca belirli güvenilir modüllerin denetlenmeyen dizi erişimi veya işaretçi aritmetiği gibi güvenli olmayan işlemler gerçekleştirmesini zorlayabilirsiniz.
Hızlı gelişme, onlar için de bir öncelikti, öyle ki D kodunun bir kodlama dili olarak kullanılabilir olması için yeterince hızlı derlediği bir tasarım hedefi haline getirdiler. Pişirme birimi testlerini doğrudan dile getirin, böylece sadece derleyiciye fazladan bir bayrak göndererek testlerinizi gerçekleştirebilirsiniz.
Ancak, harika bir birim test kütüphanesinin sadece bazı metotları bulmak ve çalıştırmaktan çok daha fazlasını yaptığını düşünüyorum . Haskell'in QuickCheck'ini ele alalım , örneğin "x ve y için" gibi şeyleri test etmenizi sağlar f (x, y) == f (y, x)
. QuickCheck daha iyi bir birim test üreticisi olarak tanımlanır ve "bu giriş için bu çıkışı bekliyorum" den daha yüksek seviyede test etmenize olanak sağlar. QuickCheck ve Linq hepsi o kadar farklı değil - ikisi de etki alanına özgü diller. Öyleyse, bir dilin test desteğini cıvatalamak yerine, neden DSL'leri pratik yapmak için gereken özellikleri eklemiyorsunuz? Sadece ünite testleriyle değil, sonuç olarak daha iyi bir dille biteceksiniz.