Her zaman bir algoritmanın hiç ifade edilip edilemeyeceğinden çok daha kolay bir konu olarak gördüm. Eğer Mitchell'in uydurma programı gibi programları gerçekten çalıştırmak isteseydim, sadece uygun Turing Machine simülatörünü statik olarak yazdığım dile yazardım.
Statik tip sistemle ilgili püf noktası, sadece esnekliğin daha kolay korunabilen kod yazmanıza izin verdiği durumlarda doğru esneklik türlerini sunmaktır.
Dinamik olarak yönetilmesi bazen statik olarak yazılmış dillerden daha kolay olduğu düşünülen program yapılandırma tekniklerine ilişkin bazı örnekler.
Jenerikler ve Kaplar
ML (c. 1973) ve CLU'dan (c. 1974) önceki statik olarak yazılan dillerde , kırmızı-siyah bir dizgi ağacı, kırmızı-siyah bir tamsayı ağacı, kırmızı-siyah bir yüzen ağaç veya kırmızı-siyah ağaç öğeleri belirli türü Foo
. Bununla birlikte, hem statik olarak kontrol edilen hem de bu veri türlerinden herhangi birini işleyebilen kırmızı-siyah bir ağacın tek bir uygulamasını oluşturmak zordu (belki imkansız). Problemin etrafındaki yollar (1) tip sisteminden tamamen kurtulmaktı (örneğin: kullanarakvoid *
C), (2) kendinize bir tür makro önişlemci yazmak ve daha sonra istediğiniz her bir özel tip için kod üreten makrolar yazmak veya (3) ayıklanan türün türünü kontrol etmek için Lisp / Smalltalk (ve Java) yaklaşımını kullanmak nesne dinamik olarak.
ML ve CLU, genel, statik olarak yazılan kap tipleri yazmanıza izin veren sırasıyla çıkarılmış ve açıkça bildirilmiş (statik) parametreli türler kavramını tanıttı.
Tipi Polimorfizm
Simula67 (c. 1967) ve Hope (c. 1977) öncesi statik olarak yazılan dillerde , hem dinamik gönderim yapmak hem de her alt tip için vakayı kapsadığınızı statik olarak kontrol etmek mümkün değildi . Birçok dilde etiketlenmiş sendikalar vardı , ancak programlarının case
veya switch
ifadelerinin veya atlama tablolarının olası her etiketi kapsadığından emin olmak programcının sorumluluğundaydı .
Simula modelini (C ++, Java, C #, Eiffel) izleyen diller, derleyicinin her alt sınıfın üst sınıf tarafından bildirilen tüm yöntemleri uygulayıp uygulamadığını denetleyebileceği alt sınıflara sahip soyut sınıflar sağlar. Hope modelini izleyen dillerde (SML / NJ'den Haskell'e kadar tüm ML varyantları) derleyicinin her typecase
ifadenin tüm alt türleri kapsadığını kontrol edebileceği cebirsel alt türleri vardır.
Maymun Düzeltme ve En Boy Odaklı Programlama
Dinamik tip sistemler çeşitli prototipleme tekniklerini çok daha kolay hale getirir. Türlerin, dizelerden işlevlere (örneğin, Python, Javascript, Ruby) hash haritaları ile temsil edildiği dillerde, belirli bir türe dayanan her modülün davranışını küresel olarak değiştirmek kolaydır; yazın.
Maymun yamalarının programların bakımını zorlaştırmak için kullanılabileceği açık yollar olsa da, "kötülük" yerine "iyi" için de kullanılabileceği yollar da vardır. Özellikle en boy yönelimli programlama ile , dosya türünü sanallaştırılmış bir dosya sistemine işaret edecek şekilde değiştirmek, "serbest" için birim test altyapılarının oluşturulmasına izin vermek veya basit istisna türlerini değiştirmek gibi şeyler yapmak için maymun yamalama teknikleri kullanılabilir. daha iyi hata ayıklama için yakalandıklarında günlük iletilerini yazdırın.
1970'lerde temel statik kontrol fikirlerinin bulunduğu Generics ve Subtype Polymorphism'den farklı olarak, yön odaklı programlama için statik kontrol (bence) aktif bir araştırma alanıdır. 2001'den beri AspectJ adında bir dil olması dışında pek bir şey bilmiyorum .