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 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 metota 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 ç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, ek güvenlik gibi ekstralar 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 alır ve gerekli güvenlik önemlerini kod çalıştırılmadan önce sunar.
Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar