Bu ifadeyi anlamak için öncelikle statik tip bir sistemin bize ne satın aldığını anlamalıyız. Esasen, statik tip bir sistemin bize verdiği şey bir garantidir: program tipi kontrol edilirse , belirli bir çalışma zamanı davranışı sınıfı meydana gelemez.
Kulağa iğrenç geliyor. Tip denetleyicisi teorem denetleyicisine benzer. (Aslında, Curry-Howard-İzomorfizme göre onlar aynı şeydir.) Teoremler hakkında çok tuhaf olan bir şey, bir teoremi kanıtladığınızda, teoremin ne söylediğini, artık daha fazla kanıtlamadığınızdır. (Örneğin, neden biri "Bu programı doğruladım kanıtladı" derse, her zaman "lütfen 'doğru' tanımlayın" diye sormalısınız.) Aynı şey tip sistemler için de geçerlidir. Biz dediğimizde ise ne anlama geldiğini, "Bir program tipi-güvenlidir" değil hiçbir olası hata oluşabilir. Sadece tip sisteminin bize önlemeyi vaat ettiği hataların meydana gelemeyeceğini söyleyebiliriz.
Böylece, programların sonsuz sayıda farklı çalışma zamanı davranışı olabilir. Bunlardan, sonsuz sayıda yararlıdır, ancak sonsuz sayıda birçok "yanlıştır" (çeşitli "doğruluk" tanımları için). Statik tip bir sistem, sonsuz sayıda yanlış çalışma zamanı davranışının belirli bir sonlu, sabit setinin meydana gelemeyeceğini kanıtlamamıza izin verir.
Farklı tip sistemler arasındaki fark, temel olarak hangi, kaç tane ve ne kadar karmaşık çalışma zamanı davranışlarının gerçekleşmediğini kanıtlayabilmesidir. Java gibi zayıf tip sistemler yalnızca çok temel şeyleri kanıtlayabilir. Örneğin, Java, döndüren olarak yazılan bir yöntemin a String
döndüremeyeceğini kanıtlayabilir List
. Ama, örneğin, bu olabilir değil yöntem döndürmez olmayacağını kanıtlıyor. Yöntemin bir istisna atmayacağını da kanıtlayamaz. Ve yanlış döndürmeyeceğini kanıtlayamaz String
- herhangi String
biri tip denetleyicisini tatmin edecektir. (Ve tabii ki, hatta null
aynı zamanda onu tatmin edecektir.) Java ispat edemez bile çok basit şeyler vardır, biz gibi istisnalar neden olan ArrayStoreException
, ClassCastException
ya da herkesin en sevdiği, NullPointerException
.
Agda gibi daha güçlü yazım sistemleri de "iki argümanın toplamını döndürür" veya "argüman olarak aktarılan listenin sıralı halini döndürür" gibi şeyleri kanıtlayabilir.
Şimdi, Elm tasarımcılarının çalışma zamanı istisnaları olmadığı ifadesiyle ne anlama geldiği, Elm'in tip sisteminin, diğer dillerde gerçekleşmediği kanıtlanamayan ve dolayısıyla yol gösterebileceği çalışma zamanı davranışlarının (önemli bir kısmı) olmadığını kanıtlayabileceğidir. çalışma zamanında hatalı davranışa (en iyi durumda bir istisna anlamına gelir, en kötü durumda bir çarpışma anlamına gelir ve en kötü durumda çarpışma, istisna ve sadece sessizce yanlış bir sonuç anlamına gelir).
Yani, onlar vardır değil "biz istisnalar uygulamak değil" diyerek. "Elm'e gelen tipik programcıların deneyimleyeceği tipik dillerde çalışma zamanı istisnaları olacak şeyler, tür sistemi tarafından yakalanıyor" diyorlar. Tabii ki, Idris, Agda, Guru, Epigram, Isabelle / HOL, Coq veya benzer dillerden gelen biri, Elm'i karşılaştırıldığında oldukça zayıf görecektir. İfade daha çok tipik Java, C♯, C ++, Objective-C, PHP, ECMAScript, Python, Ruby, Perl,… programcılarına yöneliktir.