.NET Managed – Unmanaged Code, CLR, CLS, CTS ve Early&Late Binding
CLR – Common Language Runtime
Direkt makina belleğine erişebildiğimiz dillere unmanaged code, arada CLR gibi bir katmanın daha bulunduğu dillere ise managed code denir. Cloud ile ilgilenenleriniz varsa bilir. Cloud’da bir sistem direkt olarak cloud provider tarafından yönetiliyorsa, buna fully managed denir. Yani sen best practicelere ve işlere kafa yorma cloud bunu senin için halledecek gibi. Burada da managed code için aynı şeyi söyleyebiliriz. Yazı memory management üzerine olduğu için memory management üzerinden ilerleyeceğim. Bildiğiniz gibi low level dillerde çoğu bellek manipülasyonunu kendimiz yaparken high level managed code‘lar bize bellek numaraları için vakit kaybetme onu ben hallediyorum diyor. Yani benim tarafımdan managed edilecek diyor.
CIL (Common Intermediate Language), .NET platformunda kullanılan ara dilin (intermediate language) adıdır. .NET uygulamaları, kaynak kodları C# gibi yüksek seviyeli dillerde yazılsa da, bu kaynak kodlar önce CIL adı verilen bir ara dile derlenir. Bu ara dil, platform bağımsızdır ve .NET ortamında çalışabilen herhangi bir dil tarafından üretilebilir.
Normal şartlarda yazılım dilleri ile makina kodlarına, hafızadaki verilere ulaşılabilir aksiyon alınabilir. CLR’ın temel görevi .Net programının çalışmasından sorumlu olmaktır. Böylece compile edilen kodun makina diline çevrilmesini sağlamaktır. .Nette yazılmış tüm programlar CLR tarafından çalıştırılırlar.
CLR, CIL kodlarını çalıştıran bir sanal makinedir. CIL kodlarını alır, JIT derlemesi uygular ve bu kodları doğrudan bilgisayarın işlemcisinde çalıştırabilir hale getirir. CLR, .NET uygulamalarının yönetilmiş bir ortamda çalışmasını sağlar ve bir dizi önemli görevi üstlenir, bu görevler arasında bellek yönetimi, güvenlik kontrolleri, hata yönetimi ve çoklu iş parçacığı desteği bulunur.
.NET CLR (Common Language Runtime), Microsoft’un .NET platformunun temel bileşenlerinden biridir. CLR, .NET programlarını çalıştıran bir sanal makinedir. Bu, .NET uygulamalarının farklı platformlarda çalışabilmesini sağlar, çünkü .NET uygulamaları platform bağımsız bir ara dilde (intermediate language) yazılır ve bu dil, CLR tarafından çalıştırılır.
CLR’nin başlıca görevleri şunlardır:
- Arabellek Yönetimi (Memory Management): CLR, otomatik bellek yönetimi sağlar. Bellek tahsisi, kullanılmayan belleği otomatik olarak serbest bırakır, bu da geliştiricinin manuel bellek yönetiminden kurtulmasını sağlar.
- Güvenlik (Security): CLR, .NET uygulamalarının güvenli bir şekilde çalışmasını sağlar. Code Access Security (CAS) gibi güvenlik özellikleri, uygulamaların belirli kaynaklara erişimini kontrol etmeye yardımcı olur.
- Garbage Collection: CLR, .NET uygulamalarında kullanılan nesnelerin bellekten otomatik olarak temizlenmesini sağlar. Bu, bellek sızıntılarını önler ve programın daha verimli çalışmasına yardımcı olur.
- İş Parçacığı Yönetimi (Thread Management): CLR, .NET uygulamalarında çoklu iş parçacığı (multithreading) desteği sağlar. Bu, eş zamanlı ve paralel programlamayı destekler.
- JIT Derlemesi (Just-In-Time Compilation): .NET uygulamaları, kaynak kodları önceden derlenmez, bunun yerine CLR tarafından çalıştırıldıkları sırada Just-In-Time derlemesi kullanılarak derlenir. Bu, platform bağımsızlığını artırır.
- Hata Yönetimi (Exception Handling): CLR, .NET uygulamalarındaki istisnaların yönetimini sağlar.
CLR, .NET platformunda çok önemli bir rol oynar ve bu platformun temel altyapısını oluşturur. Geliştiriciler, CLR’nin sunduğu avantajlardan yararlanarak daha güvenli, daha verimli ve daha kolay bakım yapılabilir .NET uygulamaları geliştirebilirler.
CLS – COMMON LANGUAGE SPECIFICATION
.Net çatısı altında bulunan programlama dillerinin ortak noktasını barındırır ve diğer dillerle olan etkileşimi sağlar.
Yazdığımız kodun farklı programlama dilleriyle geliştirilien uygulamalarda da kullanılabilir olması için CLS uyumlu olmalı ve CLS uyumlu geliştirdiğimiz kodlar, CLS uyumlu olan dillerde yorumlanabilir.
CLS’in amacı, hangi programlama diliyle geliştirilmiş olursa olsun nesnelerin birbiriyle tam etkileşim sağlamasıdır. Yani sonuç olarak .NET’de geliştirdiğimiz bir sınıf başka .net dillerinde de yorunlanabilir ya da VB ve c# assemblysini referans etmek yeterlidir.
CTS – COMMON TYPE SYSTEM
CLR’ın bir alt kümesi, programlama dillerinde kullanılan verilerin (int, double, byte, string) arasında uyum sağlar.
Early (Static) Binding ve Late (Dynamic) Binding
Early (Static) Binding
- Hangi method gerçekten o class’a ait hangisi değil gibi hethod ve propertyleri compile time’da tanır ve işler.
- Statik objelerdir.
- Performans yüksek ve hızlıdır.
- İlgili class ya da property buna ait değil exceptionu gibi runtime hatalarını da önler.
Late (Dynaming) Binding
- Compiler objenin hangi obje olduğunu bilmez ve bu objenin hangi method ve properyleri tuttuğunu da bilmez.
- Objeler dinamiktir.
- Nesnenin tipine ve ne tuttuğuna çalışma zamanında (runtime) karar verilir.
- Earyle bindinge göre görece yavaştır.