.Net Framework hakkında o kadar çok efsane üretilmiş durumda ki C# ın C++ ın devamı olduğunu iddia edenler dahi vardır. Yazılım tarihi araştırmacısı olarak bunları .Net Framework'ü bilmeyenlerin uydurduğuna kanaat getirdim. Size bu sürecin gelişimini ve Bill Gates'in kafasından geçenlerden bahsedeceğim.
2000 li yılların başındaydı. Borland'ın Delphi'sinin revaçta olduğu yıllar diyebilirim. Piyasada yazılım geliştirmek zordu, çünkü işi bilen sayısı az ve bilgisini paylaşmamaktaydı. Hatta hatırlarım açık kaynak yazılım platformları o dönemde yeni yeni oluşmaya başlamış, insanların yazılımı daha iyi öğrenmesi için toplumsal girişimlerde bulunuluyordu (acaba*). İyi yazılımcı olmak için Java bilmek gerekiyor gibi tuhaf iddialar dolanıyor C++ bilenlerin diğer yazılımcılardan üstün olduğuna inanılıyordu. E haliyle C++ öğrenmek için bu işin temelini biraz anlamak gerekiyor.
Çok fazla değil sanırım 2001 de Bill Gates geliştirici ekibe geri döneceğini duyurmuş, işin başına geçerek yeni birşeyler yapılması gerektiğini söylemişti. Microsoft'un belki de dönüm noktasıydı. Microsoft Visual Basic 6.0 ürünü tam nesnel değildi. Şu anda ki VB.Net le de alakası yoktu o dönemlerde. Hala bazı 'tipler' tarafından da VB.Net in VB 6.0 ın devamı olduğu fikri tartışma boyutundadır. Ki keza C# ın da C++ nın devamı olduğu fikri Visual Studio'nun varsayılan dilleri (dilleri diyorum dili demiyorum dikkat edin) VB ve C++, 6'ncı versiyondan 7'nci versiyona geçtiğinde (Visual Studio = .Net Framework değildir) VB.Net ve C# olarak yol aldığı için kabiliyetlerinde aynı boyutta kaldığına inanlar oldukça çok.
Bu arada Bill Gates sanırım Java'nın yapısından esinlenerek (sanmak fiili burada varsayım olduğundan değil aksini söylemem ticari sıkıntı yaşatacağı için) yeni bir yapı kurmaya karar verdi. Java bir katman üzerinden her sistemde çalışabilen ama farklı kod kullanmadan bunu sağlamaktaydı. E Bill amca her zaman ki gibi daha iyisini kafaya koymuştu. Bu sistem hem birçok yazılım dili ile kodlanabilmeli hem de birçok platformda çalışabilmeliydi.
Planın ilk bölümü: CLR şeklinde isimlendirilen ara kodlar üretilmeye karar verildi. Yazılacak kodlar CLR diline dönüştürülerek saklanacak yürütme aşamasında .Net Framework bu kodları yürüterek (bu kodlar C# değil daha temel bir sistem) kernek katmanına geçirilecekti.
Planın ikinci bölümü: Windows tabanında çalışan .Net Framework ve Linux için Mono projesi. Bu iki proje ile Windows ve Linux ortamında kodların çalıştırılması başarıldı. Tabi mobil frameworkler de ayrı.
Plan işe yaramıştı. Yaklaşık 30 farklı dille iki platformda yazılım geliştirmek mümkündü. Yalnız bu 30 farklı dil aynı sonucu üretebiliyordu. Native derleyicilerde derleyici farklılığı yüzünden kodların assamble edilmesi arasında ciddi algoritma farklılıkları ve dosya boyutları oluşabilmektedir. Uzman bir yazılımcı iseniz bu konunun ciddi bir husus olduğunu bilirsiniz. Bazı geliştiriciler Pascal ve C gibi dillerde birçok derleyici bulabildiği için projelerine göre derleyici seçiyordular. Ancak .Net Framework'de böyle bir sorun yok. Çünkü derleyici tek ve istediğiniz dilde geliştirebiliyorsunuz. Aslında derleyici zaten tam bir derleme yapmıyor. Standart native kodun geri dönüşümü imkansız sayılırken derlenmiş .Net kodlarının geri dönüştürülmesi zor değil (konuya hakim olmalısınız). Buradan da anlaşılacağı gibi derleme işlemi tamamlanmadığı için hangi dil kullanmışsınız bir manası yok.
Gelişimin temeli bu. Ancak temel olarak yanlış bilinen hususların başını C# ın .Net Framework'ün ana dili olduğuna dair hurafeler. C# ve VB.Net Microsoft'un yıllarca gözdesi olmuş iki dildir (C++ ve VB den başlayarak). Bu iki dilin arasında güç açısından hiçbir testte hiçbir şekilde fark görülmemiştir. (Ancak VB ile C++ arasında ki fark ciddi idi. Örneğin ADO standart veri işlemlerinde C++ da %25 daha hızlı çalışabiliyordu). Bunun temel sebebi aslında kodların hiçbir anlamı olmadığı, .Net Framework nesnelerinin tek oluşundandır. Kullandığınız primitif veri tiplerinden tutun en karmaşık kütüphanelere kadar her şey zaten .Net Framework'ün kendi yapıları. Pascal veya C++ da memory yönetimi yapabiliyordunuz (uzmanlar bilir pointer meselelerini) ve memory manuplasyonları oldukça kullanılırdı. Şu anda bu işlemleri yapmıyoruz, zaten alt yapıda .Net oldukça başarılı ve başka bir yapıya ihtiyaç duymuyor.
İşte kısacası Bill amca ürettiği yeni sistemle herkese bildiği yazılım diliyle aynı güçte uygulama üretme imkanı sundu. Bunun dışında gerçek bir C++ yazılımcısı iseniz zaten klasik C++ ve .Net kütüphanelerini bir arada bulunduran C++.Net uygulama geliştirme ortamıda Visual Studio da var. Üzgünüm hiçbir şey C++ ın yerini dolduramaz :) Bu arada .Net Framework yayıldıkça Java'yı öğrenenlerin sayısıda arttı malum model.
Asıl tartışma konusuna gelelim. Yanlış bilinenler. C# ın diğer dillerden üstünlüğü olmadığını anladık. Tabi C# istesekde istemesek de en çok kullanılan dil (ki VB.Net sevenlerden olmama rağmen C# ile çalışmaktayım) ve bunun biraz da hata mesajları stak trace lerin bu dilde oluşması da diyebiliriz. Tabi VB dilinin terminolojisde C# a göre yüksek bir dil olduğu (daha anlaşılır) gerçeğini unutmamak gerek. Ayrıca VB.Net tip dönüşümlerinde yapay zeka kullanabilme yeteneğine sahip (ToString fonksiyonundan bıkanlara duyurulur), geliştirme aşamasında birçok hazır fonksiyonu ile (örneğin isnumeric fonksiyonu VB de bir stringin metne dönüşebilme ihtimali varmı diye kontrol edebilirken C# da int.tryparse gibi hata üzerinden denetleme yapan bir mekanizmaya sokmak) ve en en önemlisi VB geliştirme ortamının arka planda koca bir projeyi sürekli canlı olarak build etmesi ile anında hataları gözlemleyebilme imkanı da var. Bu karmaşık projelerde çok işe yarayan bir durum.
Biraz VB yi fazlamı övdüm bilemiyorum ancak Bill amca kopamadığı VB yi süslemeyi unutmamış. Bunun dışında PHP, Pascal ve Java gibi dillerle de .Net ortamında uygulama geliştirebilirsiniz. Bu arada Bill amca bize bir sürpriz hazırlamış, herhangi bir .Net dili ile Java uygulaması geliştirebiliyoruz. Evet bu gayet mümkün. Bu konuda ilerleyen yazılarımda bilgi vereceğim.
Tekrar görüşünceye dek esenlikle kalın...
0 yorum:
Yorum Gönder