Managed Code / Unmanaged Code

Yazılım dillerini ve geçmişten günümüze geliştirilme süreçlerini incelediğinizde iki farklı terim karşınıza çıkabilir. Managed vs Unmanaged Language. Yani yönetilen ve yönetilemeyen yazılım dilleri.

Aslında Microsoft tarafından kazandırılan Managed Code terimi sebebi ile Unmanaged Code/Language terimi de kullanılır oldu.

Bilindiği gibi yazılım dilleri sayesinde makine kodlarına ulaşılabilir, istenilen aksiyonlar gerçekleştirilebilir. Örneğin hafızadaki verilere ulaşıp bunları bir işlemler zincirinden geçirebilirsiniz.

İşte bu noktada hazırlanan kod parçacıklarının sisteme ne kadar yalın ulaşabildiği ve ulaşamadığı önem kazanıyor.

Microsoft .NET Framework ile birlikte aynı zamanda Common Language Runtime ismi verilen bir sanal makine bileşeni de duyurdu.

Bu bileşenin temel görevi .NET programlarının çalıştırılmasından sorumlu olmak ve böylece compile edilen kodun makine diline çevrilmesini sağlamaktı. Çünkü yüksek runtime performansının sağlanabilmesi için ilgili programın çalıştırılmadan önce makine koduna çevrilmesi gerekmektedir. Bu metoda aynı zamanda Dynamic Translation ya da Just-In-Time Compilation da denmektedir.

Yukarıdaki Comman Lnaguage Runtime (CLR) bileşen diyagramında görüldüğü gibi hazırlanan Source Code öncelikle ByteCode'a çevrilmelidir. ByteCode bilgisayar tarafından kullanılan bir makine kodu olmadığından bir sonraki adımda sanal makine içerisinde bu kod makine koduna çevrilir. Bu da ilgili programın çok daha performanslı çalışmasını sağlar.

.NET Framework için yazılmış tüm programlar yazılım dilinden bağımsız olarak CLR tarafından çalıştırılır. Bu da aslında ilgili yazılım diline otomatik memory management, Exception Handling, Standard Types, Security gibi ek özellikler sağlar.

Asıl konumuza dönecek olursak Microsoft tarafından ortaya çıkarılan Managed Code ilgili programın yalnızca Common Language Runtime sanal makinesi üzerinde çalıştırılması sayesinde elde edilebilir. Bu da aslında hazırlanan uygulamanın compile edilmesi ile .exe dönüştürülmesi işleminin CIL üzerinde yapılmasıdır. Bu da makine üzerindeki erişimlerin arasında artık ek bir sanal makine katmanı olması anlamına geliyor. Unmanaged code ile makine diline direk erişim sağlanabilmesi mümkün iken Managed Code ile bu erişim aradaki katmanın size sağladığı sınırlar dahilinde gerçekleşebiliyor.

Evet sınırlarımız biraz daralmış olabilir ancak Managed Code kullanımı ile birlikte bu katman kodun gerçekten ne yapacağını garantiye almakta ve gerekli güvenlik önemlerini her bir kod parçacığı çalıştırılmadan önce sunmaktadır.