1.Gün

Bu yazıda, kursumuzun ilk gününde bahsettiğimiz konuların özetini bulabilirsiniz.

.NET nedir?

Microsoft'un ASP'si ile veya PHP ile yapılan uygulamalar tam olarak insanların isteklerine cevap veremiyordu. Her ne kadar iyi ve gelişmiş web uygulamalarını bir yere kadar yapabiliyorduksa da belirli bir noktadan sonra C++, Delphi veya VB ile geliştirdiğimiz modülleri web uygulamamıza ekleyerek sorunlarımızı halletmeye çalışyorduk. Tabi bu tür yöntemler programın gelişme süresini uzatıyordu. Zamanın giderek önem kazandığı bir devirde haliyle programlarımızı da hızlı bir şekilde geliştirmemiz gerekiyor(du). Hızlı uygulama geliştirme (Rapid Application Development- RAD) geleneksel programlama araçlarıyla ve prgramcının yetenekleriyle çözüm bulunacak bir mesele değil. Artık programlama dilleri dille birlikte gelen kütüphaneler ve bunlar hakkındaki dokümantasyonları ile birlikte değerlendiriliyor.

.NET ile birlikte programcının hizmetine sunulan 3400'den fazla sınıf modern anlamda çok güzel bir geliştirme ortamı sunuyor. Bu sayede programlamları daha hızlı bir şekilde geliştirme imkanına sahip bulunuyoruz. .NET kullanarak yazdığımız ASP.NET, Windows Forms veya mobil cihazlar için geliştirdiğimiz bir uygulamayı birinden diğerine dönüştürmek işi çok kolay bir şekilde yapılabiliniyor. Bu sayede aynı anda hem windows hem de web uygulamaları geliştirmek çok hoşunuza gidecektir :-). .

NET framework'unun bize sunduğu diğer güzel bir özellik ise platform bağımsızlığıdır. Artık yazdığınız Windows uygulamaları sadece Windows yüklü sistemlerde değil .NET framework'unun kurulu olduğu tüm platformlarda çalışabilecektir. Her ne kadar şimdilik bu alt yapının sadece Windows versiyonuna sahip olsak da Linux grupları tarafından bu alt yapının Linux versiyonunu çıkartma yönündeki çabalar uzun bir süredir devam etmektedir.

Peki bunca hoş özellikleri bize sağlayan .NET alt yapısında program yazarken hangi dili veya dilleri kullanmak zorundayız? Bu konuda Microsoft çok radikal bir karar alarak gelecek için hazırlanmış yeni alt yapıda Common Language Runtime (CLR) ile uyumlu her .NET dilini kullanmamıza olanak sağlıyor. .NET ile gelen SDK'da C#, VB.NET ve Js.NET kullanarak program yazabiliyoruz. Diğer taraftan 30'un üzerinde programlama diliyle .NET uygulaması geliştirebilirsiniz.

CLR denen şey tam olarak nedir?

.NET altyapısında programların çalışmasını kontrol eden ve işletim sistemi ile programımız arasında yer alan arabirimdir. Normalde yazdığımız programlar derlenirken makine diline çevrilirdi ve program bu şekilde işletim sistemi ile direkt bağlantı kurarak çalışırdı. Fakat platform bağımsız bir geliştirme ve yürütme ortamı istiyorsanız ne olacak? İşte tam bu anda CLR devreye girer ve .NET programlarını farklı platformlarda makineye ve işletim sistemine göre programımızı çalıştırır. Normalde bir Windows Linux veya MACOS kurulu sistemler aynı programın kodunu çalıştıramazlar. Bu platformlar için programın ayrı ayrı yazılıp onlara göre hazırlanmış derleyicilerde derlenmesi gerekir. Dünyada çok sayıda yaygın platform olduğunu düşünürsek bunların herbiri için ayrı ayrı derleme işlemini tek bir işletim sisteminde yapmamız imkansız gibidir. Bu durumda çözüm ortak bir aradil kullanmak ve herbir platform için bu aradile çevrilmiş programın kodunu çalıştıracak altyapıları hazırlamaktır.

Şimdi şu soruya sıra geldi: "İyi de .NET hangi aradili kullanıyor?" Sorumuzun cevabı MSIL (Microsoft intermediate Language) .NET platfomunda hangi dili kullanırsak kullanalım yazdığımız programın kodu direkt olarak makine diline değil de MSIL'e çevrilir. Bu sadece programı çalıştırdığımız sistemde kurulu olan CLR çalışma anında MSIL kodlarını çevirerek programımızı çalıştırır çalışma anında derleme işlemini ise JIT derleyicileri (Just in Time compilers) üstlenir.

Peki neden C#?

C#, (C şarp şeklinde okunur) güçlü modern nesne tabanlı ve aynı zaman type-safe (tip-güvenli) bir programlama dilidir. Aynı zamanda C#, C++ dilinin güçlülüğünü ve Visual Basic' in ise kolaylığını sağlar. Büyük olasılıkla C# dilinin çıkması, Java dilinin çıkmasından bu yana programcılık adına yapılan en büyük gelişmedir. C#, C++ 'ın gücünden Visual Basic 'in kolaylığından ve Java 'nın da özelliklerinden faydalanarak tasarlanmış bir dildir.

C ve C++ programcıları için en büyük sorun sanırım hızlı geliştirememedir. Çünkü, C ve C++ programcıları çok alt seviye ile ilgilenirler. Üst seviyeye çıkmak istediklerinde ise zorlanırlar.Ama C# ile artık böyle bir dert kalmadı.Aynı ortamda ister alt seviyede isterseniz de yüksek seviyede program geliştirebilirsiniz. C# dili Microsoft tarafından geliştirilen .NET paltformunun en temel ve resmi dili olarak lanse edilmiştir. C# dili, Turbo Pascal derleyicisini ve Delphi 'yi oluşturan takımın lideri olan Anders Heljsberg ve Microsoft'da Visual J++ takımında çalışan Scott Wiltamuth tarafından geliştirilmiştir.

C# dışında hangi dilleri kullanabilirdik diye merak edenler buraya tıklayabilirler. Gördüğünüz gibi, pekçok dil ile uygulamalarımız geliştirebilmekteyiz.

.NET'in CLR, CTS ve JIT derleyicileri

.NET uyumlu programlama dili oluştururken belirli standartlara uyulması gerekir. Bu standartlar CLS (Common Language Specifications - Dillerin ortak özellikleri) ile belirlenmiştir. CTS (Common Type System) ise veri tipleri nesneler arayüzler ve programlama dillerine ait özellikleri tanımlar ve CLS'in bir parçası olarak karşımıza çıkar. CLS'de tanımlanmış kurallara uymak şartı ile istersek kendi programlama dilimizi dahi geliştirebiliriz veya herhangi bir dili .NET platformunda uygulama geliştirmek üzere değiştirebiliriz.

CLR programlarımızı değişik şekilde derleyebilir. Varsayılan derleme türü JIT (Just In Time - Çalışma 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.

Kolayca görebileceğimiz birkaç noktaya da parmak basmak istiyorum. .NET ile yazdığınız programlar diğerlerine göre yavaş çalışır. Çünkü iki defa derleme aşamasından geçerler program kodu MSIL'ye MSIL ise makine koduna çevrilir. Diğer taraftan .NET ile programlarımız platform bağımsız olacak .NET uyumlu herhangi bir dil ile program geliştirebileceğiz ve programımız CLR altında daha güvenli bir şekilde çalışacaktır.

.NET perfromans testindeki sonuçlara göre : Genelde C#, Java'dan 3.30 kat daha hızlı. C#, Visual C++ 6.0'dan ise 3.11 kat daha hızlı çalışıyor. Hatta VB.NET kodu VB 6.0'a nazaran 46.45 kat daha hızlı çalışıyor. :-)


Hakkında açıklama yapmamı istediğiniz konu(lar) olursa lütfen yazınız.