C# CLR, CLS, MSIL Nedir?



Merhaba bu yazımda CLR, CLS, MSIL olgularının ne anlama geldiğini en basit şekilde anlatacağım. Zaten C# veya Java yazıyorsanız programlamaya ilginiz varsa bu olguları biliyorsunuzdur bu durumda yeniden bir hatırlamış olursunuz bilmiyorsanızda yeni bir şey öğrenmiş olursunuz..


CLR ( Common Language Runtime )


C# ile üretilmiş kodların sistem üzerinde çalıştırılmasını sağlayan mekanizmadır. Bir C# kodu yazıp derlediğimizde bu kod Microsoft Intermediate Language ( MSIL ) 'a dönüştürülür. Bu kod çalıştırılabilir bir kod değildir. Bu kod " sözde kod " ( pseudocode ) içeren bir dosyadır. Bu kod anca bulunduğu sistemde bir ara program ile çalıştırılır. Bu program MSIL'i, sistem üzerinde çalıştırır. İşte C# ta bu CLR 'dir. Yani CLR 'nin olduğu her ortamda ( işletim sistemi ve işlemci farketmeksizin ) C# da derlenmiş kodlar daha doğrusu MSIL çalışacaktır.


Program çalışacağı zaman C# ile derlenen kodlar yani MSIL kodlar; bir JIT ( Just-In-Time - Tam zamanında ) derleyici tarafından kullanılarak çalıştırılabilir koda dönüştürülürler. C# ( veya .NET ) kodları çalıştırıldığı zaman CLR, bu JIT derleyiciyi çalıştırır. JIT derleyici programınızın ihtiyaçlarına göre MSIL 'i yerel dile çevirir. Yani MSIL olarak ürettiğiniz her kod CLR 'nin olduğu her ortamda o sisteme uygun bir dile çevrilir ve yürütülür. Bu kodun içinde yeralan metadata olarak tanımlanan çıktı bulunur. Bu çıktı sayesinde programınızın diğer kodlarla etkileşimi sağlanır.


CLR ,programlarımızı değişik şekilde derleyebilir. Varsayılan derleme türü JIT(Just IN TIME- çalışam anında derleme) 'dır. Program çalışırken daha önce derlenmemiş bir parçasına gelince hemen o kısmı da derler ve bunu hafızda chach'e koyar. Tekrar aynı program parçasını çalıştırmak gerekirse burayı hafızadan çalıştırır. Eğer RAM 'imizi yeteri kadar büyükse, programın tamamı derlenmiş ve hafızada depolanmış durumda olabilir. Bu durumda programımız çok hızlı çalışır.


Hafızamızın yeteri kadar büyük olmadığı durumlarda EconoJIT (Ekonomik JIT) derleyicisini kullanabiliriz. Bu derleyici ile programın derlenmiş kısımları hafızada depolanmaz ve her seferinde aynı program parçası derlenir. Tabi ki bu derleyici normal JIT'e göre programlarımızı daha yavaş çalıştırır. Ama RAM 'imizi çok daha az kullanır.

CLR ile gelen üçüncü derleyicimiz PreJIT(ön JIT derleyicisi) ise derleme işini program çalışmadan önce yapar ve tüm makine kodlarını bir yerde saklar. Çalışma anında çok hızlı olan programımız diğer JIT derleyicileriyle derlenmiş olanlara nazaran çok hızlı çalışır.


Kısaca C# kodumuz iki defa derleme aşamasından geçer program kodu MSIL'ye, MSIL ise makine koduna çevrilir.



CLS ( Common Language Specification - Ortak Dil Spesifikasyonu )


Common Language Specification(CLS) bünyesinde barındırdığı birtakım yapıları ve kısıtları ile kütüphane(library) ve derleyici(compiler) yazabilmek için rehberlik yapmaktadır. CLS yazılan bir kütüphanenin CLS'yi destekleyen diğer programlama dilleri ile entegre şekilde çalışabilmesini ve bu diller tarafından da kullanılabilmesini sağlamaktadır. CLS CTS'nin bir altkümesidir. CLS uygulama geliştiriciler için büyük önem arzetmektedir. Öyle ki bir uygulama geliştirici yazdığı kodun diğer kod geliştiriciler tarafından da kullanılabilir olmasını gözönünde bulundurmalıdır. CLS'nin kriterleri ve kuralları gözönünde bulundurularak yazılan bir API(Application Program Interface) diğer programlama dilleri içerisinden kullanılabilmekte Common Language Runtime tarafından da işletilebilmektedir.


.NET uyumlu programlama dili oluştururken belirli standartlara uyulması gerekir. Bu standartlar CLS (Common Language Specifications - Dillerin ortak özellikleri) ile belirlenmiştir.


Kaynaklar : C#Nedir.com, Ceviz.com

4 yorum :