Bu ay içerisinde .NET 4.0 versiyonu yayınlanacak bildiğiniz üzere. Yaklaşık bir yıldır, çeşitli platformlarda .NET 4.0 ve Visual Studio 2010 beraberinde tanışacağımız özellikler gösteriliyor, anlatılıyor. Kısacası hazırız aslında .NET 4.0’a…(!)

Peki neden .NET Framework,”4.0” oldu?…Ya da v4.0 altında gerçekten neler oldu biliyor muyuz?…Açıkcası kişisel olarak, biz yazılımcıların bazı önemli değişikliklere çok önem verdiğimizi düşünmüyorum. Yani hem kendimden, hem de gözlemlerime dayanarak söylüyorum bunu. İstisnalar var tabi ki bunu da biliyor, takip ediyorum…Neyse…Bundan dolayı da .NET Framework’ü hakkını vererek kullanıp, uygulamalar geliştirebildiğimize inanmıyorum.

1.0,1.1,2.0,3.0,3.5,4.0 şeklinde gidiyoruz bizde .NET Framework ile…Her versiyon aslında farklı bir yazılımcı jenerasyonu. En azından ben böyle düşünüyorum. 1.0-1.1 zamanında kendi master page yapısını oluşturan, 1.1’de kendi Ajax kütüphanesini yazan, 2.0’da kendi O/R mapping’ini yazıp Entity Framework’e kafa tutan bir çok kişi tanıyorum…AJAX’ı Microsoft’un çıkardığı bir yenilik sanan, arka tarafta işlerin nasıl döndüğünü bilmeyen kişiler de tanıyorum. Tabi ki artık bazı işlerin kolaylaşması, çok derinlerdeki olayların nasıl olduğu bilme gerekliliğini sorgular hala getiriyor. Ama eğer yazılım ile teknolojiye katma değer katmaya çalışıyorsak ve mühendislik yaklaşımından geliyorsak, nasıl olduğunu bilmesekte ne olduğunu bilmemiz gerektiğine inanıyorum.
Bundan dolayı .NET 4.0’ın derinliklerinde neler değiştiğini, kendi tecrübelerim ve öğrendiğim bilgiler doğrultusunda paylaşma gereği hissettim. Hani temeli iyi yaparsak, üst taraf daha sağlam olur yaklaşımı ile…

Öncelikle kendi çizmiş olduğum komik ama bence anlamlı resmi paylaşarak nasıl .NET 4.0’a geldik bunu hatırlayalım.

.NET 1.0 ve 1.1 bir çoğumuzun hatırlamak istemeyeceği bir dönem. “Karanlık Çağ” şeklinde adlandırılıyor olması sanırım çok da yanlış değil. .NET 2.0 ile beraber, temelli çok daha sağlam bir yapı ile geleceğe daha büyük umutlar ile baktık. Önceki versiyona göre daha istikrarlı ve ne olduğu daha belirgin bir framework’tü .NET 2.0.NET 2.0 ile mutlu mesut yaşarken, hızlı ilerleyen teknolojik kavramlar, .NET 3.0’ı attı önümüze…Yedik bir güzel…Hazmetmesi, adapte olması zordu…Yapı olarak fazla değişiklikler olmasa da, yapının üstüne gelen WCF, WPF, CS(Card Space),WF adaptasyonu zorlaştırdı biraz. Sonra .NET 3.5 çıktı…Biraz daha kolay hazmedelim diye .NET 3.0’daki yeniliklerin iyileştirildiği ve ek besin vitamini olarakta LINQ ve Entity Framework ile desteklenen bir versiyondu .NET 3.5
Şimdi de .NET 4.0…Çok daha kararlı, bazı şeylerin, önceki dönemlerdeki tecrübeler ile silinip atıldığı ve tekrar yazıldığı, parlak gözüken bir versiyon. İyileştirmelerden çok, geliştirmelerin olduğu, yenilikler ile teknolojik gelişmelere daha kolay ayak uydurabileceğimiz bir versiyon…

Peki neden farklı?

.NET Framework’de bulunan CLR, .NET 2.0 versiyonunda beri hiç değişmemişti. .NET 4.0 ile beraber CLR 4.0 ile tanışıyoruz. .NET 4.0 versiyonunda ki en önemli değişikliklerden biri de bu aslında. Peki neler değişti, neler gitti, neler geldi…

Garbage Collection değişiklikleri

CLR 4.0 ile beraber Garbage Collection tarafında iyileştirmeler yapılmış. Performans konusunda yapılan bu iyileştirmeler ile GC’nin çalışma algoritmalarında büyük değişiklikler var. .NET Framework tarafında yaratılan objeler belli koleksiyonlarda tutuluyor. Objeler yaşam sürelerine göre bu koleksiyonlar da konumlanıyor. GC’da bu koleksiyonlardaki objeleri yaşam sürelerine göre topluyor,yok ediyor…CLR 4.0’da bu işler artık daha hızlı.

İç içe çalışan CLR

CLR 4.0’ın bence en güzel yeniliklerinden biri de, içerisinde başka CLR versiyonlarının da çalışabilmesi. Ne demek oluyor bu açalım biraz daha…. .NET Framework ile çalışan ana uygulama tek bir CLR versiyonu yükleyebiliyordu. Bu da uygulamalarda destek sorununa neden olabiliyordu. Mesela CLR 1.0 versiyonu ile çalışan bir uygulamaya, CLR 2.0 versiyonu ile bir şey yazamıyorduk. CLR 4.0 ile artık bu sorun ortadan kalkıyor. Plug-in yazmak artık çok daha kolay olacak kısacası…Bunun ile ilgili bir örnek ilerleyen yazılarımda olacak, telaşa mahal yok…

Yakalanamayan hatalar(Ayrıntılar için CSE’ı google da aratın)

Önceki CLR versiyonlarında bazı unmanaged işlemlerden doğan hataları yakalamak normal try-catch blokları ile mümkün değildi. InvalidMemory,AccessViolation falan filan gibi. CLR 4.0 ile artık bu tarz hataları yakalamak daha kolay. Bunun için [HandleProcessCorruptedStateExceptions] özelliğini programımızın başlangıcına eklememiz yeterli.

Profiling yenilikleri

Uygulamaları profile etmek için önceki CLR versiyonlarında üretim ortamına Visual Studio kurmamız gerekmekteydi. Artık buna gerek yok…

Dump Debuging

Belli arayüzler ile artık uygulamalarımızda dump debuging yapabileceğiniz. Hata olduğunda “Gönderim mi,göndermiyim mi” sorusu ile başbaşa kaldığımız ekran .NET 4.0 ile kendi uygulamalarımız adına biraz daha anlam kazanacak.

Çok çekirdekli .NET

Ay çekirdeği tadındaki bu en güzel yenilik, artık çok çekirdekli işlemcilerde, bu çekirdeklerden faydalanmamızı sağlayacak Parallel Extensions olarak karşımıza çıkıyor. CLR thread’leri artık bu çekirdekler arasında dağıtılabilinecek…Şahane…

Daha bir çok ilginç yenilik var. Zamanla gerektiği kadar bunları öğrendikçe,kullandıkça paylaşmaya çalışacağım. Yukarda dediğim temel olayından dolayı…Neyse şimdilik bu kadar…