petri je napisao(la):
Nek objasni neko detaljnije kako i zasto je koncept .NET-a toliko dobar i prosperitivan?
E ovako,.... premda sam ja postavio ovu temu zeleci da saznam nesto vise o .NET arhitekturi, C#.NET, Java,.... i jos mnogo toga, malo sam se potrudio u poslednjih nekoliko nedelja pa sam prelistao neke knjige te cu pokusati da iznesem svoja zapazanja.
.NET je Microsoftova tehnologija koja u sebi integrise Razvojnu i Izvrsnu platformu. .NET nije programski jezik vec platforma, razvojno okruzenje u kome se moze programirati u vise razlicitih jezika (Pascal, C/C++, C#, VB, Java,... ). Prilikom kompajliranja, izvorni kod se ne kompajlira u prirodni, masinski vec u specijalni medjujezik MSIL- Microsoft Intermediate Language (slican Javinom Byte kodu) pri cemu se dobijaju .exe/.dll faljovi. Ti faljovi se tek prilikom izvrsavanja programa prevode u masinski. Na taj nacin je postignuto sledece:
1---------
Jezicka interoperabilnost tj. mogucnost da se klase napisane u jednom programskom jeziku pozivaju iz drugog. Tako je moguce da se na jednom projektu okupe vrsni strucnjaci iz odredjenih oblasti i zajednicki urade posao bez obzira na kom jeziku programiraju - vec je bilo reci o tome da je manje vazno u kom jeziku programiras vec da imas razvijenu programersku logiku i kreativnost.
To je omogucio medjujezik MSIL (ili krace IL). Mislim da ce se kroz primer lakse razumeti cemu to prevodjenje u IL:
Npr. Pascal: celobrojni tip se oznacava rezervisanom recju "integer"
C++ : celobrojni tip se oznacava rezervisanom recju "int"
VB: nesto drugacije ne znam tacno sada ali nema veze
...
Ako u Pascal-u zelimo iskoristiti neki metod iz neke klase iz C++, kada budemo zeleli da koristimo neki celobrojni podatak Pascal kompajler nece znati sta je to "int" i javice gresku.
Zato se u .NET prilikom kompaljiranja, npr. C++ koda, "int" tip prevodi u SystemInt32 tip u IL jeziku. Kada iz Paskala zelimo da prihvatimo taj podatak mi se u stvari obracamo medjujeziku IL i iz njega uzimamo tip SystemInt32 koji Pascal prepoznaje kao Integer.
Zbog sveg toga svi .NET jezici su malo modifikovani da bi mogli da citaju IL kod, pa je tako nastao C++.NET, VB.NET, ... sve sa postfiksom .NET. Nista u sintaksi jezika nije izmenjeno tako da se programeri gotovo trenutno prilagodjavaju. Prisutne su samo neka ogranicenje, tj. skup pravila koja jedan programski jezik mora da izpuni da bi se proglasio .NET kompatibilnim jer razliciti jezisi podrzavaju i razlicite operzcije i koristenje podataka tako da se te specificnosti ne koriste. Npr. u C++ je moguce visestruko nasledjivanje klasa ali drugi jezici to ne poznaju pa je preporucljivo da ne koristiti to da bi bio .NET kompatibilan. (tu je jos i preopterecivanje operatora i jos mnogo toga, ne znam ni ja dovoljno jos)Mislim da je i to moguce ali postoje neke fore.
2 --------------
Platformska nezavisnost - jer se program prevodi iz IL prilikom izvrsavanja tako da se prilagodjava platformi na kojoj se izvrsava i koristi sve njene prednosti.
Npr. Prilikom klasicnog non.NET kompajliranja u .exe, program se kompajlira na jednoj platformi a kasnije izvrsava na nekoj drugoj. Tako programi pisani na Pentium3 arhitekturi, prilikom izvrsavanja na Pentium4 ne mogu iskoristiti nikakve prednosti koje ona nudu u odnosu na P3.
I ranije je postojala mogucnost jezicke interoperabilnosti ali preko COM tehnologije. COM komponente su u stvari bile kao interface prema nekim klasama i tako u stvari prilagodjavale jedan kod drugom (kao u sendvicu izmedju dva programa pisana na razlicitim jezicima), ali ovo je mnogo bolje i efikasnije. Posle se pojavio i COM+ ali nemam pojma sta je on doneo.
I tako, program napisan na nekom od .NET jezika mora se izvrsavati na masini na kojoj je instaliran .NET Runtime jer on obezbedjuje to prevodjenje sa IL u masinski kod. To je ta njegova izvrsna komponenta. (slicno kao sa Javom za cije programe je potrebno instalirati Java Virtual Machine). Taj CLR - Common Language Runtime pored prevodjenja sadrzi i izvesni Garbage Collector za ciscenje Heap-a ako se ne koriste klasicni destructori klasa, upravljanje memorijom, ...... ne znam ni ja sta sve jos.
Sve ovo jos vise dobija na znacaju buduci da elektronsko bankarstvo, pametni frizideri, razni Web servisi, i... ko zna sta sve ljudi nece da smisle, sve vise postaje sastavni deo naseg zivota. Veoma bi bilo tesko uklopiti toliko razlicitih programa. Npr. u svakoj prodavnici ce u bliskoj buducnosti biti moguce bezgotovinsko placanje karticama, svaka ce imati svoj kompjuter i software koji ce biti napisan u razlicitom jeziku. Moci cete odmah online da pristupite svojoj banci, koja ima svoj Informacioni Sistem napisan u drugom jeziku, svoj Web Service,... i proverite i azurirate stanje na racunu prilikom placanja, obavite razne vidove transkcija i sl. sve to mora biti brzo, pouzdana i nadasve kompatibilno.
E da, sve se ovo nece zavrsiti samo na Microsoft platformi vec postoje pokusaji da se .NET prosiri i na druge Operativne sisteme. Projekat se zove MONO, kao sto je i silverglider rekao, a tacna adressa je, za one koje mrzi da kucaju u google:
http://www.go-mono.com
Eto, ne znam zasto sam vam sve ovo napisao ali mislim da nece skoditi. Ukoliko ne skodi onda je sigurno da koristi
ZAMOLIO BIH ISKUSNIJE PROGRAMERE DA ME ISPRAVE UKOLIKO SAM POGRESIO I NAPISAO NESTO STO NIJE TACNO, ILI SVE OVO UOPSTE NE VALJA, JER NAPOMINJEM DA SAM TEK NEDAVNO POCEO DA SE BAVIM OVOM PROBLEMATIKOM.
Pozdrav.