Professional Documents
Culture Documents
Page 1 of 17
2 / 17
3 / 17
4 / 17
5 / 17
Tm .NET dilleri tarafndan paylalan ortak temel snf ktphanesi: Artk karmak API arlar sona erdi. .NET ile birlikte uygulama gelitiricinin hizmetine sunulan 3500den fazla snftan oluan zengin ktphane, daha hzl program gelitirme imkan ve btn .NET dilleri tarafndan kullanlan tutarl bir nesne modeli sunuyor. Programlama modelinden bamsz uygulama gelitirme ortam: Tek bir uygulama gelitirme ortam (Visual Studio 2010) kullanarak ASP.NET, masast form (windows), mobil, web servisi ve remoting uygulamalar gelitirilebilir.
Basitletirilmi masast uygulama gelitirme ve yaynlama modeli: .NET ortamnda gelitirilen bir masast uygulamas, herhangi bir windows iletim sisteminin kurulu olduu makinede altrlabilir, gereken tek ey .NET Frameworknn kurulu olmasdr. Ayrca sistem kayt defterine (registry) yazlmasna gerek yoktur. Bunun yannda .NET ayn makinede bir .dllin farkl versiyonlar ile allmasna izin verdii iin .dll cehennemi (.dll hell) ad verilen durum olumamaktadr.
6 / 17
7 / 17
.NETin Yaptalar
.NETin salad baz avantajlar incelendi, imdi de bu avantajlar hayata geirmek iin gereken (birbirleriyle balantl) yapta incelenecek: CLR, CTS ve CLS. Yazlm gelitiricinin bak asyla .NET yeni bir alma zaman ve ok ynl bir temel snf ktphanesi olarak grlebilir.
8 / 17
9 / 17
10 / 17
Assembly Nedir?
Hangi .NET dilinin kullanldndan bamsz olarak .NET binaryleri bir dosya uzants alrlar (*.dll ya da *.exe). Burada dikkati ekilmesi gereken nokta bu binarylerin iletim sistemine zel komutlar iermemesidir. Bunun yerine .NET binaryleri, platformdan bamsz Common Intermediate Language(CIL) adndaki ara dili ierirler.
Tm .NET derleyicileri kaynak kodu assembly ierisinde CILe derler. IL ksaltmas ile ilgili bir noktaya dikkat ekmek gerekiyor. .NETin gelitirilme aamasnda ILin resmi ad Microsoft intermediate language (MSIL) iken final srmyle birlikte bu terim Common intermediate language (CIL) olarak deitirildi. Dolaysyla kaynaklarda geen MSIL ve CIL ayn kavram iaret etmektedir. .NET ortamndaki bir programlama dilinin derleyicisi kullanlarak bir .dll ya da .exe oluturulduunda bu bir assembly ierisine koyulur. Daha nce bahsedildii gibi assembly, CIL kodu ierir ve bu kod, ihtiya duyulana kadar platforma zel bilgil ere derlenmez. Burada ihtiya duyulan nokta ile kastedilen, .NET alma zaman tarafndan kullanlmak zere bavurulan IL kod bloudur (Metot ars gibi) unu da eklemek gerekir ki binary dosya (.exe ya da .dll uzantl) ile assembly tektir ve ayn kavramlardr; alt seviye bir programlama dili olan Assembly ile sadece isim benzerlii vardr. Ayrca altrlabilir kod (.exe) ve ktphane kodu (.dll) ayn assembly yapsna sahiptir ve terim olarak her ikisi de assembly olarak arlr. Aralarndaki tek gerek fark altrlabilir assembly (.exe) program iin ana giri noktas (Main metodu) ierirken, ktphane assemblysi (.dll) bunu iermez.
11 / 17
Metadata ve Manifesto
Assembly, CIL dnda bir de metadata ierir. Tip metadata, binary ierisindeki her bir tipin ayrt edici zelliklerini tanmlar. Daha aydnlatc olmas asndan yle bir rnek verelim: Mevcut evimizden baka bir eve tanrken eyalar kutulara koyarz. Eer kutularn zerine tek tek ierisinde neler olduunu bir kada yazp yaptrrsak yeni evimizde aarken aradmz kolayca buluruz. Metadata, kutunun zerindeki bu listedir ve assembly ierisindeki .dll ya da .exenin sahip olduu tm tipler hakknda bilgi ierir. rnein X adnda bir snf varsa, tip metadas X snfnn tredii snf, varsa hangi arayzleri uygulad gibi ayrntlar tarken, X tipinin her bir yesinin tm tanmlamalarn da ierir. Bir assemblyde ayn zamanda kendisini tanmlayan bilgileri ieren assembly metadata blm bulunur. Assembly ad, versiyonu, kltr bilgisi, ksa bir aklama, baka assemblylere olan referanslar gibi bilgilerin tamamna assembly metadata denir ve manifesto adyla assembly ierisinde yer alr. Bir assemblynin assembly metadatas tamasnn arkasndaki gerek, ierisindeki kodu aran uygulama ya da dier assemblylerin o assemblyyi nasl kullanacaklarn renmek iin registryye ya da baka bir veri kaynana bavurmalarna gerek kalmamasdr. yleyse bir assembly ierisindeki kaynak kodun CIL karl, tip metadatas, manifesto bilgisi ve kaynaklar yer alr.
12 / 17
Blm : .NET Uygulama Gelitirme Platformu Konu : Ortak Ara Dilin Rol
13 / 17
Ortak Ara Dilin (Common Intermediate Language) Rol .NET assemblyleri hakknda elde edilen bilgiler nda platformun ortak ara dilinin (CIL) rol biraz daha ayrntl incelenebilir. CIL, herhangi bir platform -zel direktif setinin yerine gemitir. Seilen .NET tabanl dilin hangisi olduundan bamsz, ilgili derleyici CIL direktifleri retir. rnek olarak aadaki C# kodu basit bir hesap makinesini modelliyor. imdilik szdizimi ile ok ilgilenmeye gerek yok; ancak HesapMak snfnn ierisindeki Topla() metodunun formatna dikkat: //Hesap.cs using System; namespace HesapMakinesiOrnek { //C# hesap makinesi public class HesapMak { public int Topla(int x, int y) { return x + y; } } //Bu snf, programn giri noktasn ierir. class HesapMakUygulamasi { static void Main(string[] args) { HesapMak hesap = new HesapMak(); int cevap = hesap.Topla(23, 41); Console.WriteLine("23 + 41 = {0}", cevap); Console.ReadLine(); } } } C# derleyicisi (csc.exe) ile bu kaynak kod dosyas derlendiinde; CIL direktifleri Manifest HesapMak ile HesapMakUygulamasi snflarnn her ayrntsn tanmlayan metadata bilgisi
ieren tek dosyal (single-file) bir *.exe assembly elde ederiz. Bu assembly ildasm.exe ile alrsa Topla() metodunun CIL kullanlarak aadaki gibi temsil edildii grlr. (Visual Studio 2010 Tools altndaki Visual Studio 2010 Command Prompta ildasm.exe yazlarak bu ara alabilir ve ilgili .dll ya da .exenin yolu gsterilir) :
int32 y) cil managed { // Code size 9 (0x9) .maxstack 2 .locals init ([0] int32 CS$1$0000) IL_0000: nop IL_0001: ldarg.1 IL_0002: ldarg.2 IL_0003: add IL_0004: stloc.0 IL_0005: br.s IL_0007 IL_0007: ldloc.0 IL_0008: ret } // end of method HesapMak::Topla
Bu metot iin retilen CIL kodundan pek bir ey anlalmamas ok nemli deildir. Burada zerinde durulmas gereken nokta u ki; C# derleyicisi iletim sistemine zel kodlar deil, CIL retir. Tekrarlamakta fayda var, bu zellik btn .NET tabanl derleyiciler iin geerlidir. Bunu gsterebilmek iin ayn uygulamann C# yerine Visual Basic .NET (VB.NET) kullanlarak yazldn varsayalm : 'Hesap.cs Imports System Namespace HesapMakinesiOrnek 'Bir VB.NET 'Modlsadece static yeler ieren bir snftr. Module HesapMakUygulamasi Sub Main() Dim hesap As New HesapMak Dim sonuc As Integer sonuc = hesap.Topla(23, 41) Console.WriteLine("23 + 41 = {0}", sonuc) Console.ReadLine() End Sub End Module //C# hesap makinesi Class HesapMak Public Function Topla(ByVal x As Integer, ByVal y As Integer) As Integer Return x + y End Function End Class End Namespace
Eer Topla() metodunun CIL direktiflerine bakacak olursak C# kaynak kodu iin retilenlerin VB.NET iin retilenlerle ayn olduunu grrz.
15 / 17
.method public instance int32 Topla(int32 x, int32 y) cil managed { // Code size 9 (0x9) .maxstack 2 .locals init ([0] int32 Topla) IL_0000: nop IL_0001: ldarg.1 IL_0002: ldarg.2 IL_0003: add.ovf IL_0004: stloc.0 IL_0005: br.s IL_0007 IL_0007: ldloc.0 IL_0008: ret } // end of method HesapMak::Topla
CILin Yararlar
Bu noktada kaynak kodun platforma zel komut setine (makine diline) deil de CILe derlenmesinden tam olarak ne elde edildii merak edilebilir. Bunun cevab ncelikle dil entegrasyonudur. Yukarda da grdmz gibi btn .NET tabanl derleyiciler neredeyse ayn CIL kodunu retiyorlar. Dolaysyla btn diller iyi-tanmlanm bu binary ortamda aralarnda anlaabileceklerdir. Terimler u an iin yabanc gelebilir; ancak aadaki rnekler verilebilir Bir dilde yazlm snf, baka dilde yazlm bir snfn yelerini kaltm yoluyla kullanabilir. Bir snf hangi dilde gelitirildiinden bamsz olarak baka bir snf rneini ierebilir. Nesneler ya da nesne referanslar metotlar arasnda parametre o larak geirilebilir. Farkl dillerde yazlm metotlar arrken hata ayklayc ile metot armlar arasnda gezilebilir; yani farkl dillerdeki kaynak kodlar arasnda adm adm ilerlenebilir.
Ayrca CILin platformdan bamsz olmasndan yola karak .NET Frameworkn de platformdan bamsz olduunu syleyebiliriz. (Tek bir kod blounun saysz iletim sistemi zerinde alabilmesi) Bu platform-bamszlk Windows iletim sistemlerinde geerli olmakla beraber bir -ok Windows olmayan platformda deneme aamasnda da olsa uygulamalar mevcuttur. (Mono ve Portable.NET projeleri) zet olarak CILin getirdiklerine baklnca iin en gzel yan .NETin yazlm gelitiriciye hangi dil ile bunu yapmak istedii seeneini sunmasdr.
sunucuda datlacaksa (bellek ou zaman sorun olmayacaktr) jitter yksek bellekli ortamda ilevini yerine getirmesi iin optimize edilecektir. Bu yolla yazlm gelitiriciler, etkin bir ekilde tam-zamannda-derlenecek ve farkl mimariler kullanlarak altrlacak kod bloklar yazabilirler. Btn bunlara ek olarak kullanlan jitter ile CIL komutlar uygun makine kodlarna derlendiinde, sonular uygun bir yolla hedef iletim sisteminin belleinde saklanacaktr. Buna gre DosyayaYaz() isimli metoda bir ar yaplrsa, ilk arda CIL komutlar platforma zel kodlara derlenecek ve sonraki kullanmlar iin hafzada tutulacaktr. Dolaysyla DosyayaYaz() metodunun ikinci arlnda CILi yeniden derlemeye gerek kalmayacaktr.
Bu ders notu, Ak Akademi projesi erevesinde TCM tarafndan Microsoft Trkiye iin hazrlanmtr. Tm haklar Microsoft Trkiye ye aittir. zinsiz oaltlamaz, para ile satlamaz.
17 / 17