Kısacası: tip sistemleri akademik bağlamda nasıl kategorize edilir; özellikle, farklı türdeki sistemler arasındaki farkları netleştiren saygın kaynakları nereden bulabilirim?
Bir anlamda, bu sorunun zorluğu bir cevap bulamıyorum, aksine çok fazla şey bulabiliyorum ve hiçbiri doğru olarak öne çıkmıyor. Arka plan şu anda aşağıdaki farklılıkları iddia eden Haskell wiki ile ilgili yazmaya ilişkin bir yazıyı geliştirmeye çalışıyorum :
- Yazma yok: Dilin hiçbir tür kavramı yok ya da yazılan bir bakış açısıyla: Dilde tam olarak bir tür var. Assembly dili sadece 'bit kalıbı' tipinde, Rexx ve Tk sadece 'text' tipinde, çekirdek MatLab ise sadece 'karmaşık-değerli matris' tipinde.
- Zayıf Yazma: Yalnızca birkaç ayırt edici tür vardır ve birkaç tür için eşanlamlı olabilir. C, booleans, tamsayılar, karakterler, bit kümeleri ve numaralandırmalar için tamsayı sayıları kullanır.
- Güçlü yazma: Ada, Wirthian dilleri (Pascal, Modula-2), Eiffel gibi ince taneli türler seti
Bu tamamen kişisel düşünceme aykırıdır, ki bunlar daha doğrusu:
- Zayıf Yazma: Nesnelerin türleri vardır, ancak içerik gerektirdiğinde örtük olarak diğer türlere dönüştürülür. Örneğin, Perl, PHP ve JavaScript, içinde
"1"
olabilecek herhangi bir bağlamda az ya da çok kullanılabilecek dillerdir1
. - Güçlü yazma: Nesnelerin türleri vardır ve örtük dönüşümler yoktur (aşırı yükleme bunları simüle etmek için kullanılabilirse de), bu nedenle bir nesneyi yanlış bağlamda kullanmak bir hatadır. Python'da bir diziyi bir dizge veya kayan nokta ile dizine almak bir TypeError istisnası atar; Haskell'de derleme zamanında başarısız olacaktır.
Bu konuda, benden daha deneyimli diğer insanlardan görüşlerini istedim ve bunlardan biri bu özelliği verdi:
- Zayıf yazma: Verilerde geçersiz işlemler yapılması kontrol edilmez veya reddedilmez, ancak yalnızca geçersiz / rastgele sonuçlar üretir.
- Güçlü yazma: Verilerdeki işlemlere yalnızca verinin işlemle uyumlu olması durumunda izin verilir.
Anladığım kadarıyla, ilk ve son karakterizasyonlar zayıf yazılmış, ikinci ise güçlü yazılmış. Birincisi ve ikincisi Perl ve PHP'yi zayıf yazılmış, üçüncüsü de onları güçlü yazılmış. Üçü de Python'u kesinlikle yazılmış olarak tanımlayacak.
Bence çoğu insan bana "iyi, fikir birliği yok, terimlerin kabul edilmiş bir anlamı yok" diyeceğini düşünüyorum. Bu insanlar yanlış ise, bunu duymak mutlu olurum, ama haklılar, o zaman nasıl do CS araştırmacılar tanımlamak ve tip sistemleri karşılaştırmak? Daha az problemli olan hangi terminolojiyi kullanabilirim?
İlgili bir soru olarak, bir dilin derlenmiş olup olmadığının o dilin bir özelliği olmadığı göz önüne alındığında tatmin edici bulduğum, “derleme zamanı” ve “çalışma zamanı” açısından dinamik / statik ayrımın sıklıkla verildiğini hissediyorum. uygulamaları olarak. Dinamik ve statik yazmanın tamamen anlamsal bir açıklaması olması gerektiğini düşünüyorum; "statik bir dil, her alt ifadenin yazıldığı dildir" satırları boyunca bir şey. Bu düşünceye açıklık getiren herhangi bir düşünceyi, özellikle referansları takdir ediyorum.