Okunma: 1385 kez
.NET, Microsoft tarafından çıkarılan Java gibi platform bağımsızlık esasını kendine slogan kabul etmiş bir teknolojidir. Uygulama geliştiriciler, bu teknolojiyi kullanarak çeşitli yazılım ürünleri oluşturmaktadır. Yazılan kodların derlenip çalışabilir hale gelmesi, birçok geliştirici için gizemli bir olaydır.
Daha çok çıkan hataların incelenmesi ve gerekirse tekrar derlenmesi için çalışılır. Visual Studio gibi herhangi bir Integrated Development Environment(IDE) ile yazılan formlar, F5 tuşuna bastıktan sonra, hiç de azımsanmayacak bir süreç içine girer. Bu süreci -en azından- genel hatları bilmek uygulama geliştiriciler için önemli bir konudur. F5 tuşuna basıp formun ekranda görünmesine kadar geçen süre içinde neler olmaktadır sorusu, üzerinde düşünülmesi gerekilen bir sorudur.
Mümkün olduğunca az kod yazıp, platform ve mimari farklılıklarına yakalanmadan uygulama geliştirmek, uygulama geliştiriciler için önemli bir konu haline gelmişti. Java’nın platform bağımsızlığından sonra çıkan .NET in de genel amacı bunu gerçekleştirmekti. Kodlar bir defa yazılacak, ek gereksinimler ve kısıtlamalar göz önüne alınmadan her yere taşınabilecek şekilde tasarlanacaktı. Microsoft yazılım mimarları, Gates’in bu hedefine ulaşmak için çalışmalara başladı. Uzun süren çalışmalar, “veriye her yerden her şekilde ulaşabilme” hayalini bir nebze olsun gerçekleştirilmeye çalıştı. Ama bu tam bir özgürlük anlamına gelmiyordu. Yapılan çalışmalar henüz Microsoft tabanlı sistemler için özgürlükten bahsetmenin mümkün olduğunu; fakat diğer ortamlar için bu hayalin şimdilik erken olduğunu gösteriyordu. Bu da Java gibi bir bağımsızlık sağlamıyordu. Çalışmalar, Mono adı verilen Linux ortamında .NET ile yazılmış uygulamaların çalışmasını sağlayan bir katmana doğru yol aldı. Halen de bu çalışmalar devam etmektedir.
Yazılım sektöründe adından sıkça bahsedilen “platform bağımsızlık” terimi aslında şuana kadar tam olarak sağlanmış değildir. Çünkü bu terim denince akla ilk gelen Java dilinin, Java Virtual Machine(JVM) denilen bir sarmal olmaksızın çalışmasını beklemek mümkün değildir. Java uygulamaları doğrudan işletim sistemi yerine bu sarmal ile haberleşmekte, sarmal kendine gelen ve bytecode adı verilen kod parçalarını işletim sisteminin anlayabileceği dile, makine koduna, çevirmektedir. Dikkat edilirse JVM, platform farklılıklarının çözümü için araya giren bir sarmal vazifesindedir. Eskiden makine diline çevrilen kaynak kodlar JVM’ in anlayacağı dile çevrilmekte, JVM de bunu alıp platforma özgü bir hal almasını sağlamaktadır.
Bir diğer bakış açısı ile olaya bakmak gerekirse Java, temelde birçok ortamı destekleyen bir dildir. Yani platform olarak birçok farklı yapıya destek verir. İster Windows, ister Linux ister bir diğer işletim sistemi olsun fark etmez. Intel veya AMD olması da bir sorun teşkil etmemektedir haliyle. Bu, ters çevrilmiş bir huniye benzer. Üst tarafta Java’dan gelen kaynaklar, alt tarafta ise bunu destekleyen çok geniş bir platform ailesi olacak şekilde tasarlanmıştır.
.NET de ise durum biraz farklıdır. Alt yapıda geniş bir platform ailesine hizmet verebilmek yerine, üstte farklı dil desteği bulunmaktadır. Bunu da normal bir huniye benzetebiliriz. Üst kısım geniş bir dil ailesi için, alt kısım ise platform kısmını belirlemek için düşünülebilir. Bu yapı sayesinde .NET dil ailesi şeklinde bir tabir kullanılmaktadır. VB veya C# bilmeniz, uygulamalarınız için herhangi bir fark oluşturmayacaktır. Sonuçta altyapıda gerekli düzenlemeler yapıldığı için herhangi kısıt olmaksızın uygulama geliştiriciler çalışabilmektedir.
.NET’ in en önemli yapıtaşı, Framework olarak belirtilebilir. Bu yapı, kendini 2 önemli alt bileşene ayırır. Bunlar CLR(Common Language Runtime) ve CL(.NET Framework Class Library) olarak karşımıza çıkar. CL içinde uygulama geliştirirken kullandığımız kütüphaneler bulunmaktadır. Formlar, nesneler ve kontroller hep bu yapı içinde yer alır.
CLR yapısına gelmeden önemli olan iki kavramdan daha bahsetmemek gerekecektir. Bunlar Common Type System(CTS) ve Common Language Specification(CLS). CTS, geliştirilen uygulamalarda kullanılan dillerin nesne yapıları ve tiplerini ortak bir tipe dönüştürülerek, geneli kucaklayan bir yapının oluşmasını sağlar. Bu sayede ister Visual Basic .NET(VB.NET) ile ister C#.NET ile uygulama geliştirin her ikisinin de gideceği yer aynıdır. Yani VB.NET veya C#.NET içinde tanımladığınız bir tip, tabir yerinde ise, .NET tipine dönüşecektir.
Common Language Specification(CLS), daha genel bir standarttır. Uygulama geliştirme dilleri arasında ortaklık oluşturmak için tasarlanmıştır. Bu yapı, dillerin uyması gereken asgari özellikleri belirler. Derleme aşamasına gelebilmek için bu özelliklere uyulması gerekmektedir. CLS destekli diller ile geliştirilen uygulamalar bir üst seviyeye dönüştürülür. Bunlar Intremediate Language (IL) olarak isimlendirilir. Yani bir diğer ifadeyle, CLS destekli diller ortak bir ürün verecek şekilde çalışır. Bu da farklı diller arasında uygulama geliştirmeye olanak sağlar. .NET dil ailesi olarak belirtilen diller de CTS’ yi paylaşan dillerdir. Hepsi IL koduna dönüştürülür ve CLR ile işlenmeye hazır hale gelirler.
Microsoft Intremediate Language(MSIL), ara bir seviyedir. Çalıştırabilir makine kodundan çok bazı ek işlemler ile çalıştırılabilir hale gelecek kodlardır. Bundan sonra kodlar, son seviye olan makine koduna dönüştürülür. IL, işlemci ve platformdan bağımsız bir haldir. Burada ortak hale dönüştürülmüş kodlar bulunmaktadır. Yani Visual Basic ile yazılmış bir kod ile C# ile yazılmış kod, IL seviyesinde, aynı şekilde bulunur. MSIL, CLR vasıtası ile derlenir. CLR, üzerinde bulunduğu mimari yapıyı bildiği için, o mimariye ait kimi bilgileri de kullanarak Just In Time Compiler(JIT) ile kodu derler. Makine kodun oluştuğu yer burasıdır.
CLR, MSIL kodun JIT ile derlenip makine kodun oluştuğu yerdir. CLR’ nin görevi bununla kalmaz. Buna ek olarak birçok görevi bulunur. Hafıza, threadler, güvenlik, istisna ve debug gibi birçok yönden yazılımın çalışmasına etki eder. .NET Framework’ un önemli bir bölümünü oluşturur.
CLR içindeki JIT, MSIL’ i derledikten sonra dönüşen makine kodunu, hafıza yükler. Yazılım çalışmaya başlar. Bir defa bu noktaya gelen kod, sonraki çağırımlarda buradan kullanılır. Bu nedenledir ki, uygulamaların ilk defa çalıştırılması her zaman yavaş olmakta, sonraki çağırımlar ise daha hızlı gerçekleşmektedir.
Genel olarak kodun yaşam süreci böyledir. Her bir kısaltma için sayfalarca yazı yazılabilir. Bu yapıyı bilip uygulama geliştirmek, yazdığınız koda daha bir hâkimiyet sağlayacaktır.

Etiketler:
Genbilim Yazarları
Genbilim Yazarları
Net Mimarisi
Sadece kayıtlı kullanıcılar yorum yazabilirler. Lütfen hesabınıza giriş yapınız veya kayıt olunuz. |