1 Ocak 2018 Pazartesi

C#'ın Tarihçesi, .NET Framework ve Common Language Runtime (CLS)


Merhaba, bu yazıda C, C++ ve C#'ın kısa bir tarihçesinden bahsedeceğim. Ardından .NET Framework ve derleme zamanında neler yaşandığından, Common Language Runtime (CLS)'in görevinden kısaca bahsedeceğim.

C#'a geçmeden önce günümüzün nesneye yönelik programlama dilleri C# ve Java'nın ortaya çıkmasında büyük rolü olan C ve C++ dillerinin tarihçesinden de kısaca bahsetmek istiyorum.

C Dili: Modern Programlama Çağının Başlangıcı

Daha önceleri Pascal Programlama Dili kayda değer bir başarı elde etmiş olsa da günümüzün programlama dillerinin şekillenmesinde ana model C Programlama Dili olmuştur.  

C dili, 1960'ların yapısal programlama (structured programming) devrimi sonucu ortaya çıkmıştır. 1970 yılında ABD'li ünlü bilgisayar mühendisi Dennis Ritchie (1941 - 2011) tarafından icat edilmiştir.

Yapısal programlama dillerinden önce program yazmak oldukça zordu. Kodlar "spagetti kod" denilen atlamalar (go to ifadesini çoğu programcı hatırlar), çağrılar ve döngülerden oluşan, takibi zor program yapılarından ibaretti. Yapısal programlama ise bu karışıklıklardan (spagetti kod vb) kurtulmak için ortaya atıldı. C ile beraber birçok yapısal dil mevcuttu fakat C'nin estetik, esnek, sade ve performanslı olması bu dillerin önüne geçti ve böylece 1980'lerin en yaygın kullanılan yapısal dili oldu. 

C dilinin bütün esnekliğine rağmen kısıtlayıcı yönleri de mevcuttu. C'nin en büyük problemlerinden birisi de programlar büyüdükçe kontrol edilmesi zor bir hal almasıydı. Programlar belli bir büyüklükten sonra esneklikten çıkıp, karmaşık ve yönetilemez bir hal alıyordu. Her ne kadar iyi programlanıyor olursa olsun C dili, belli bir büyüklüğe ulaştıktan sonra mutlaka bu engele çarpacaktı. İşte bu noktada C++ dili imdada yetişmiştir.

C++'ın Doğuşu ve Nesneye Yönelik Programlama

Yukarda bahsettiğimiz program büyüklüğü ve karmaşıklığı sonrasında çözüm olarak Object Oriented Programming (OOP) denilen programlama yapısı ihtiyacı ortaya çıktı. 

C++ ilk olarak 1979 yılında Bjarne Stroustrup tarafından ortaya kondu. C++, C'nin üzerine inşa edilerek nesne yönelimli özelliği eklenmiştir. Dolayısıyla C++, C'nin bütününü içermektedir. Bahsettiğimiz karmaşıklığı önlemek ve nesneye yönelik programlama dili olması itibariyle 10 yıllık bir süreçten sonra 1990 yılında C++ en yaygın kullanılan dil haline gelmiştir. Günümüzde bile hala bazı yüksek performas gerektiren konularda C++ kullanılmaktadır. 

C++ tamamiyle yeni bir dil ortaya atmak için çıkarılmasa da C# ve Java gibi dillerin ortaya çıkmasında büyük bir atılım olmuştur. 

C#'ın Doğuşu

Bilindiği üzere Java, platform bağımsızlık ilkesine dayanarak C ve C++ dillerinden türemiştir. Java her ne kadar platform bağımsız bir dil olsa da bazı özellikleri açısından yetersiz kaldığı durumlar olmuştur. Bunlardan bir tanesi; karışık dillerle birlikte çalışabilme becerisidir. Bir diğeri de, Windows platformları entegrasyonudur. Her ne kadar JVM yüklü bir makinede Java sorunsuz çalışabiliyor olsa da Java Windows'a tam hakim değildir. Dünyada en çok kullanılan işletim sistemi olan Windows için doğrudan destekten yoksun olması Java'nın bir dezavantajı olarak karşımıza çıkmaktadır. 

Yukarda bahsettiğim nedenlerden dolayı Microsoft, kendi yağında kavrulmak istedi ve C#'ı geliştirdi. 1990'ların başında .NET temelleriyle birlikte C# şekillenmiş olsa da, Microsoft ilk kez 2000'li yılların ortalarında C# alfa versiyonunu piyasaya sürmüştür. İlk sürümünden sonra çok hızlı gelişti ve Microsoft'un vazgeçilmez programlama dili haline geldi. Çıktığı ilk günden günümüze kadar her dönemin ihtiyaçlarına yönelik sayısız çözümler ve tasarımlar sundu. Bu sayede hiçbir zaman popülaritesi düşmedi.

C#'ın baş mimarı Anders Hejlsberg'tir, Bill Gates değildir :) Genelde Microsoft'un bütün araçlarının yazarı Bill Gates olduğu kanısı vardır ya onun için ayrıca buna dikkat çekmek istedim. Anders Hejlsberg aynı zamanda Turbo Pascal'ın da mimarıdır. 

C# öğrenilmesi kolay, sade ve çok esnek bir dildir. Aynı zamanda .NET'in gözbebeği ve çok şık bir dildir. Oldukça güçlüdür. OOP'un bütün güçlü nimetlerini kapsamlı bir şekilde ve eksiksiz olarak kullanır. .NET'in en önemli silahıdır. Microsoft, en büyük yatırımı C# için yapmıştır. 

C# ve Java'nın ataları C ve C++'tır. C# ve Java'nın temelleri bu iki dil üzerine kurulmuş olduğundan C# ve Java birer kuzen gibidir. Bu nedenle ortak yönleri ve benzerlikleri oldukça fazladır. Bu vesileyle C#'ı OOP yönüyle öğrenen birisi rahatlıkla Java'yı da öğrenebilir.

C#'ın Gelişimi ve Sürümleri

Kısaca bahsetmek gerekirse;

C# 1.0 ilk sürümdür. 1.0'dan kısa bir süre sonra 1.1 sürümünü yayınlamıştır. Bu iki sürüm arasında küçük farklılıklar bulunmaktadır fakat 2.0 için durum tamamen farklıdır. 

C# 2.0 önemli yenilikler eklemiştir. Bunlardan bazıları: jenerikler, anonim metotlar ve kısmi sınıf tanımlamaları (partial class

C# 3.0 da büyük yenilikleri getirdi. Bunlardan bazıları: Lambda deyimleri, LINQ (Language Integrated Query), extension metotları ve belirtilmemiş tipte değişkenlerdir. (Bu kavramlara ayrıca başka yazılarda değineceğim)

C# 4.0 ile gelen en önemli özelliklerden biri de dinamik tiplerdir (daha sonra değineceğim). Bir diğer önemli özellik de Task Parallel Library (TPL) ve Parallel LINQ (PLINQ) şeklinde özetlenebilir.

.NET Framework Nedir?

.NET Framework farklı dillerin (örneğin; C#, VB.NET gibi) birlikte çalışmasına olanak tanır ve Windows platformu için program taşınılabilirliği sağlar. Örneğin; C# ve VB.NET ile ayrı ayrı yazılmış uygulamaları uygun .NET Framework sürümü kurulu bir makinede rahatlıkla çalıştırabilirsiniz. .NET Framework'un sürümleri arasında bir hiyerarşi söz konusudur. En tepedeki sürüm bütün sürümleri çalıştırabilmektedir. .NET Framework, Windows kurulumu ile birlikte gelmekte, ayrıca sonradan da yüklenebilmekte veya güncellenebilmektedir. .NET Framework'u (Java Virtual Machine) JVM'ye benzetebiliriz. 

Common Language Runtime (CLR) Nedir?

Common Language Runtime (Ortak Dil Çalışma Zamanı) .NET kodunun çalışmasını kontrol eder. CLR'nin çalışma yapısı şu şekildedir: Bir C# kodu derlendiğinde, elde edilen çıktı, direk çalıştırılabilir kod olmayıp MSIL (Microsoft Intermediate Language) denilen bir çıktı üretir. MSIL bir sözde kodtan (pseudo code) ibarettir. Bu kod, CPU'dan bağımsız bir Assembly dili demektir.  CLR ise bu elde edilen çıktının çalıştırılabilmesini sağlar. Bu şu demek oluyor: MSIL çıktısı elde edilecek şekilde derlenen her program CLR'ın uygulandığı her ortamda çalışabilir demektir. Bu da .NET Framework'un taşınılabilirliğini sağlamaktadır. 

Bir sonraki makalede görüşünceye dek hoşçakalın...



Paylaş:

0 yorum:

Yorum Gönder

Bu Blogda Ara