Home TürkçeC# .Net Framework, BCL ve CLR

.Net Framework, BCL ve CLR

by Fatih Boy
2 comments

   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.

Şu Yazıları da Sevebilirsiniz

2 comments

MURAT 4 Nisan 2012 - 09:21

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

Reply
Fatih Boy 6 Nisan 2012 - 23:15

Faydalı olmasına sevindim 🙂

Reply

Leave a Comment

* Bu formu kullanarak, verilerinizin bu web sitesi tarafından saklanması ve kullanılmasını kabul ediyorsunuz.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Bu web sitesi deneyiminizi geliştirmek için çerezleri kullanır. Bunu kabul ettiğinizi varsayacağız, ancak isterseniz vazgeçebilirsiniz. Kabul Et Daha Fazla Bilgi