Tip sistemleri hataları önler
Tip sistemleri yasadışı programları ortadan kaldırır. Aşağıdaki Python kodunu göz önünde bulundurun.
a = 'foo'
b = True
c = a / b
Python'da bu program başarısız olur; bir istisna atar. Java, C #, Haskell gibi bir dilde , her neyse, bu yasal bir program bile değil. Bu hatalardan tamamen kaçınırsınız çünkü giriş programlarında bu mümkün değildir.
Benzer şekilde, daha iyi bir tip sistem daha fazla hataya neden olmaz. Süper gelişmiş tip sistemlere geçersek, şöyle şeyler söyleyebiliriz:
Definition divide x (y : {x : integer | x /= 0}) = x / y
Şimdi tip sistemi, 0'a bölünme hatası olmadığını garanti eder.
Ne tür hatalar
Aşağıda, hata sistemlerinin nasıl önleyebileceğinin kısa bir listesi verilmiştir.
- Aralık dışı hatalar
- SQL enjeksiyonu
- 2 genelleme, birçok güvenlik sorunları (Ne kokuşma denetimi içinde içindir Perl )
- Sıra dışı hatalar (init aramayı unutmak)
- Kullanılacak değer alt kümesini zorlamak (örneğin, yalnızca 0'dan büyük tam sayılar)
Nefretli kedi yavruları (Evet, şakaydı)
- Kesinlik kaybı
- Yazılım işlem belleği (STM) hataları (bu, türler de gerektiren saflık gerektirir)
- 8 genelleştirilmesi, yan etkilerin kontrol edilmesi
- Veri yapıları üzerindeki değişmezler (ikili bir ağaç dengelidir?)
- Bir istisna unutmak veya yanlış atmak
Ve unutmayın, bu aynı zamanda derleme zamanındadır. Sadece tip hatalarını kontrol etmek için% 100 kod kapsamı ile testler yazmaya gerek yok, derleyici sadece sizin için yapar :)
Örnek olay: Typed lambda matematiği
Pekala, en basitçe yazılmış lambda matematiği olan tüm tip sistemleri inceleyelim .
Temel olarak iki tip var.
Type = Unit | Type -> Type
Ve tüm terimler değişkenler, lambdalar veya uygulamalardır. Buna dayanarak, iyi yazılmış herhangi bir programın sona erdiğini kanıtlayabiliriz. Programın sıkışıp kalacağı veya sonsuza dek döngüleneceği bir durum asla yoktur. Bu normal lambda hesaplarında kanıtlanamaz çünkü doğru değil.
Bunu düşünün, programımızın sonsuza dek döngüde olmadığından emin olmak için tip sistemlerini kullanabiliriz, değil mi?
Dinamik tiplere sapma
Dinamik tip sistemler statik tip sistemler ile aynı garantileri sunabilir, fakat derleme zamanı yerine çalışma zamanında. Aslında, çalışma zamanı olduğundan, aslında daha fazla bilgi sunabilirsiniz. Bununla birlikte, özellikle de fesih gibi statik özelliklerle ilgili bazı garantileri kaybedersiniz.
Bu nedenle, dinamik türler belirli programları dışlamaz, ancak hatalı biçimlendirilmiş programları istisnalar atma gibi iyi tanımlanmış eylemlere yönlendirir.
TLDR
Bu yüzden uzun ve kısa olanı, bu tip sistemler belirli programları dışlamaktır. Programların çoğu bir şekilde bozulmuştur, bu nedenle, tip sistemleri ile bu bozuk programlardan kaçınırız.