Citat:
Ivan Dimkovic
Pa .NET jeste daleko vece prikovavanje za platformu od Win32 API-ja...
Dok sa Win32 APIjem aplikacija moze da se izbori prostim lakim nivoom apstrakcije (recimo interfejs ka Win32 APIju, X11/POSIX API-ju i QNX Photon API-ju, File I/O moze vrlo jednostavno da se apstrakuje izmedju POSIX-a i Win32jke), .NET uvodi skroz nova pravila:
- Nove programske jezike (C++ .NET, C# .NET) - dakle, vise neces moci da koristis, recimo, GCC cross-compiler i da proizvodis Win32, Mac i Linux kod - vec bi morao imati vise nezavisnih projekata (a i tada je pitanje da li bi C++ .NET kod bio uopste kompatibilan sa obicnim native kompajlerima)
- Vrlo kompleksne API-je kao sto su WPF/WCF koje je jako tesko "apstrakovati" (da ne pricamo o performansma) i jednostavno zameniti drugim ne-Windows alternativama - u pitanju su vrlo kompleksne klasne biblioteke koje zahtevaju vrlo specifican stil programiranja. Cisto primera radi, Win32 API je imao(ima) Winsock API koji je skoro identican BSD Socket API-jem i moguce je imati jedan .CPP fajl koji bi bio kompatibilan i sa POSIX platformama i sa Win32 platformom - u slucaju .NET-a i WCF-a mozes da se pozdravis sa tim
Dakle .NET je daleko cvrsce vezivanje za platformu - kada isprojektujes moderan projekat u .NET-u (koji koristi nove tehnologije kao sto su WxF) to je Windows projekat cvrsto vezan za Microsoft Windows platformu i Microsoft razvojne alate i bez ikakve nade da se izvrsava na nekom drugom sistemu sa lakim portovanjem.
.NET je zapravo odgovor Microsofta na Javu i ubijanje mogucnosti laganog seljenja aplikacija sa Windows platforme (mada, iskreno, Java nikada nije ni bila konkurentna za desktop aplikacije) - uzeli su dobre stvari iz VM-a i DOBRO se potrudili da prikuju bilo sta ozbiljno na Windows platformu
Da se razumemo - nije to nikakva "Zavera", vec normalna poslovna strategija. Microsoft je kompanija koja zivi od proprietary tehnologija i mogucnosti da naplacuje premijum za te tehnologije (kroz Windows OS) - sasvim je normalno ocekivati da ce uraditi sve sto mogu da korisnike prikuju za njihove tehnologije i da otezaju migraciju na konkurentne platforme.
Sto se tice portabilnosti, ja se ovde skoro u potpunosti slazem s tobom, ali ne vidim da su vrata zatvorena (u potpunosti) da se tako nesto portuje, mozda ne sada, ali nekad u buducnosti da.
S druge strane, ako se ogranicimo na Windows, neka prica o performasama ne drzi previse vodu zato sto je sve stvar potrebe u datom trenutku. Vecini nisu potrebne time critical i/ili aplikacije s maksimalno redukovanim footprint-om, tako da je .NET kao platforma fino resenje za sto brzi development. U principu tebi niko ne brani da imas native DLL i da u njemu drzis optimizovan kod na koji ces da se pozivas iz svog managed projekta. P/Invoke, ako se pravilno koristi ne predstavlja preterano usko grlo i moze da odgovori vecini zahteva. E sada, ko god je koristio C++/CLI i njegov interop zna da je situacija jos bolja sto se performasi tice.
Verovatno ce u buducnosti postojati bolji interop i kada je Mono/(Linux/BSD) platforma u pitanju, tako da ce svako moci da pokrije mahom sve potrebe.
Iskreno, nije mi nikakva namera da branim .NET, ali sta recimo sa Expression stablima, refleksijom, DLR-om i jos nekim stvarima... ne moze to tako lako bez nekog VM-a izmedju. Ja inace, kada mogu da biram, prvenstveno koristim C++ i odgovarajuce prekaljene biblioteke koje su de facto u native svetu. Evo, pre neki dan mi je palo na pamet da pogledam sta se desilo sa OpenC++-om ili da nadjem nesto slicno i nazalost, nisam uspeo.