Statik olarak yazılan diller genellikle değişken türlerini bildirmenizi gerektirir; bu da hataları azaltmak için derleme zamanında kontrol edilir. "Statik olarak yazılan" ifadesinde "statik" kelimesi, kodu çalıştırmadan önce kodu inceleme süreci olan "statik kod analizi" anlamına gelir. Statik olarak yazılan bir dilin değişkenin türünü bir ifadenin veya gerçek parametrelerin sağ tarafından çıkarması mümkün olsa da, pratikte statik olarak yazılan çoğu dil değişken türlerinin açıkça bildirilmesini gerektirir.
Dinamik olarak yazılan diller genellikle değişkenlere sahip bildirimler gerektirmez ve her atama deyiminin sağ tarafını veya bir işlev çağrısının gerçek parametrelerini değerlendirmenin sonucu olarak hesaplanan türe göre değişken türleri belirler. Değişken ömrü boyunca birden fazla atama verilebildiğinden, türü zaman içinde değişebilir ve bu nedenle "dinamik olarak yazılır" olarak adlandırılır. Ayrıca, çalışma zamanı ortamının her değişken için geçerli türün kaydını tutması gerekir, bu nedenle tür, değişken bildirimi yerine değere bağlıdır. Bu bir çalışma zamanı tipi bilgi (RTTI) sistemi olarak düşünülebilir.
Statik ve dinamik olarak yazılan dillerin öğeleri birleştirilebilir. Örneğin, C # hem statik hem de dinamik olarak yazılan değişkenleri destekler ve nesneye yönelik diller genellikle tür hiyerarşisini aşağıya çevirmeyi destekler. Statik olarak yazılan diller genellikle döküm, yansıma ve dinamik çağırma gibi tür denetimini atlamak için çeşitli yollar sağlar.
Güçlü ve Zayıf Yazma, bir değişkenin gerçekte başka bir türdeymiş gibi bir tür kullanması nedeniyle dilin hataları önlemeye çalıştığı sürekliliği ifade eder. Örneğin, hem C hem de Java statik olarak yazılan dillerdir, ancak Java C'den daha güçlü bir tür denetimi kullanır. Aşağıdaki C kodu derlemek ve çalıştırmaktan mutluluk duyar ve çalışma zamanında b değişkenine rastgele bir değer koyar, büyük olasılıkla bir hata:
char *a = "123";
int b = (int)a;
Eşdeğer Java kodu, genellikle tercih edilen bir derleme hatası üretir:
String a = "123"
int b = (int)a;