.Net Framework, BCL ve CLR

   Verdiğim eğitimlerde en çok karıştırıldığını gördüğüm konulardan birisidir .Net Framework, Base Class Library (BCL, Temel Sınıf Kütüphanesi) ve Common Language Runtime (CLR, Ortak Dil Çalışma-Zamanı) kavramları. Pek çok insan .Net Framework = BCL = CLR diye düşünmekte. Aslında bu kavramlar birbirine bağlı; fakat bir o kadar da birbirinden ayrı kavramlardır.

    .Net framework bir omurgadır ve bu omurga içerisinde olabildiğince geniş bir kütüphane ve birbirleriyle birlikte çalışabilen bir grup programlama dili yer almaktadır. Bu kütüphane ve programlama dilleri ortak bir çalışma zamanı üzerinde çalışmaktadır.

   Base Class Library (Temel Sınıf Kütüphanesi) tüm .Net dillerince kullanılabilen ve dosya okuma/yazmadan, grafik oluşturmaya, veritabanı etkileşimlerine kadar pek çok farklı noktada yazılım geliştiricilere destek sunan oldukça geniş bir kütüphanedir. Base Class Library çoğunlukla Framework Class Library (FCL, Omurga Sınıf Kütüphanesi) ile karıştırılmaktadır. Aslında FCL, BCL’i de kapsayan ve içerisinde Microsoft ile başlayan namespace’lerin de bulunduğu bir süper settir. Base Class Library her yeni .Net framework sürümüyle birlikte gelişen ve güncellenen bir kütüphanedir.

   Common Language Runtime (CLR, Ortak Dil Çalışma-Zamanı) özel bir çalışma zamanı ortamıdır ve .Net Framework’ün altında yatan temel yapı taşıdır. .Net dillerinin derlenmesiyle oluşan ara bir dil olan Common Intermediate Language (CIL, MSIL ya da kısaca IL. Ortak Ara Dil) Common Language Runtime tarafından çalışma-zamanında yorumlanarak işletim sistemlerinin anlayabileceği dil’e (örneğin; assembly) dönüştürülür. Dolayısıyla Common Language Runtime, geliştirilen uygulamalara işletim sistemi ve platformdan bağımsız sanal bir ortam, bir eko sistem sunar. IL kodlarının çalışma-zamanındaki bu dönüşüm/derleme işine just-in-time (JIT) compile (gerektiğinde/zamanında derleme) adı verilmektedir.

    Her üç kavramı da ayrı ayrı ele aldıktan sonra, bir araya getirecek olursak;

   .Net Framework; geniş bir kütüphane olan ve tüm .Net dillerince kullanılabilen Base Class Library, .Net dilleri ve bu dillerin derlenmesiyle oluşan Common Intermediate Language’i yorumlayarak işletim sisteminin anlayabileceği hale dönüştüren Common Language Runtime’dan oluşmaktadır.

  Şimdiye kadar paylaştığım bilgiler ışığında .Net Framework, BCL ve CLR kavramlarının kafanızda daha netleştiğini umuyorum. Şimdi de bu bilgileri aklınızda tutarak aşağıda yer alan .Net yol haritasını inceleyelim;

Microsoft .Net yol haritası

   Bu yol haritasında şunu rahatlıkla görebiliriz ki; her yeni .Net framework sürümü yeni bir CLR sürümü anlamına gelmiyor. Bu noktada, özellikle .Net Framework ve .Net dillerinde önemli değişim ve yeniliklerin geldiği .Net Framework 2.0, 3.0, 3.5 ve 3.5 SP1 sürümlerinin hepsinde de CLR sürümünün 2.0 olarak kaldığını düşünecek olursak akıllara bu yeniliklerin nasıl olduğu sorusu kaçınılmaz olarak geliyor. Arka planda oluşan CIL kodlar ve bu kodları yorumlayan CLR aynı kalıyorsa bu değişiklik ve yenilikler nereden gelmekte?

   Şüphesiz ki bu yenilikler bir sihirle .Net Framework’e dahil olmamakta. CLR sürümü dolayısıyla da CIL sürümü değişmeden gelen her bir yenilik mutlaka BCL (ve hatta FCL) ve/veya derleyici desteğiyle gelmektedir. Bir .Net diline eklene CLR sürümü değişmeden bir anahtar kelime ekleniyorsa mutlaka derleyicide düzenleme yapılmış, BCL gözden geçirilmiştir.

    Bu bilgi ardında şunu rahatlıkla söyleyebiliriz ki; .Net Framework 2.0-3.5 SP1 arasındaki tüm yenilikler derleyici ve BCL desteğiyle mümkün olmuştur. Yine yukarıdaki yol haritasına göz atacak olursak .Net Framework 4.0 ile birlikte CLR 4.0 girmesi, bu sürümdeki yeniliklerin arka planda da düzenleme ve değişiklik gerektirdiği anlamına gelmektedir.

    Paylaştığım bu bilgileri akıl süzgecinden geçirecek olursak kolaylıkla şöyle bir bakış açısı da edinmemiz mümkün olacaktır;

.Net Framework 2.0’dan sonra .Net Framework 3.5 SP1 sürümüne kadar yapılan pek çok değişiklik aslında 2.0 sürümüyle de öyle ya da böyle yapılabilir (unutmayın hepsi nihayetinde aynı ara dil’e –Common Intermediate Language’e- dönüştürülmekte). Bunu anlamı, bu sürümler arasındaki pek çok yenilik aslında mevcut işlerimizin, yöntemlerimizin daha kolay, daha anlaşılır ve daha hızlı yapılması adına gelmiştir ve aslında arka planda eski kullandığımız kodlara dönüştürülmektedir.

   Sizden ricam, paylaştığım bu bilgiler ışığında Lambda ifadelerini, Extension (genişleme) metodlarını, anonim türleri ve LINQ sorgularını bir kez daha gözden geçirmeniz. Eminim ki bu bakış açısıyla incelediğinizde onları daha rahat anlayabilir ve programlarınızda kullanabilirsiniz.

Fatih Boy

Ankara'da yaşayan Fatih, bir kamu kurumunda danışman olarak çalışmaktadır. ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook - Google+

2 yorum

  1. MURAT   •  

    Fatih hocam öncelikle saygılar sevgiler paylaşımlarınız dan dolayı Allah sizden razı olsun. Emeğinize sağlık. Teşekkürler

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir