Co to .NET?

Platforma .NET, Microsoft .NET Framework, a także sam .NET lub dotnet to określenia, które coraz częściej występują w nazwach produktów i prezentacjach najnowszych technologii, a ostatnio również w wymaganiach systemowych poszczególnych aplikacji.

Platforma .NET, Microsoft .NET Framework, a także sam .NET lub dotnet to określenia, które coraz częściej występują w nazwach produktów i prezentacjach najnowszych technologii, a ostatnio również w wymaganiach systemowych poszczególnych aplikacji.

Dotnet może mieć wiele twarzy w zależności od tego, przez kogo i do czego jest wykorzystywany. Dla większości użytkowników będzie to po prostu rozszerzenie systemu konieczne do uruchamiania określonych aplikacji, tak jak DirectX potrzebny jest do uruchamiania gier. Dla administratorów, jedną z największych korzyści będzie zwiększone bezpieczeństwo systemów komputerowych, lepsza kontrola użytkowników oraz mniejsza podatność na ataki hakerów. Natomiast dla programistów, dotnet oznacza nową jakość tworzenia aplikacji i znacznie większą produktywność pojedynczych osób.

Z czasem .NET jako rozszerzenie systemu będzie wymagane przez coraz więcej aplikacji, aż w końcu stanie się standardowym elementem systemu operacyjnego, a to dlatego że .NET nie jest zwykłym zbiorem opcjonalnych bibliotek, lecz nową platformą uruchomieniową. Z tego powodu bardziej odpowiednie byłoby porównanie do Java Runtime Environment (JRE), czyli środowiska uruchomieniowego aplikacji napisanych w Javie. Aplikacje napisane do platformy .NET, mimo że z zewnątrz wyglądają jak standardowe pliki EXE (mają takie samo rozszerzenie), to w środku mają zupełnie inną zawartość.

Microsoft.NET Framework SDK zawiera dokumentację platformy .NET, materiały dydaktyczne, kompilatory, przykładowe programy oraz narzędzia dodatkowe umożliwiające budowę aplikacji .NET.

Microsoft.NET Framework SDK zawiera dokumentację platformy .NET, materiały dydaktyczne, kompilatory, przykładowe programy oraz narzędzia dodatkowe umożliwiające budowę aplikacji .NET.

Dotychczas wszystkie pliki EXE zawierały kod programu skompilowany dla konkretnego procesora (w większości przypadków 80386). Programy te były prawidłowo wykonywane przez kolejne procesory, dzięki ich zgodności z poprzednimi modelami. Wszystkie takie aplikacje - które w kontekście platformy .NET można już nazywać klasycznymi - są ściśle związane z konkretnym procesorem. W odróżnieniu od tych klasycznych aplikacji, programy napisane do platformy .NET nie zawierają kodu dla konkretnego procesora. Pliki EXE na platformie .NET zawierają specjalny kod pośredni, który aby mógł być wykonany, musi zostać przetłumaczony na kod maszynowy konkretnego procesora. Na platformie .NET kod pośredni nazywa się CIL (Common Intermediate Language) i zgodnie z nazwą stanowi postać pośrednią między kodem źródłowym a kodem wykonywalnym.

Z bardzo podobnym mechanizmem mamy do czynienia w przypadku aplikacji napisanych w Javie. Tam pliki źródłowe są również kompilowane na postać pośrednią, która nie jest związana z żadnym konkretnym procesorem. Różnica polega na tym, że kodem pośrednim dla aplikacji Javy jest kod bajtowy (bytecode), a pliki wykonywalne są zapisywane z rozszerzeniem CLASS. Również inaczej wygląda uruchamianie takich aplikacji. W przypadku aplikacji Javy, trzeba wywołać maszynę wirtualną Javy z nazwą programu jako parametrem. Natomiast aplikacje .NET uruchamia się, tak jak zwykłe pliki EXE, które w dodatku potrafią wykryć obecność platformy .NET i w razie potrzeby wyświetlić odpowiedni komunikat. W efekcie, jeśli w systemie zainstalowany jest .NET Framework, aplikacja uruchomi się, a użytkownik nie będzie w stanie odróżnić zwykłej aplikacji od aplikacji .NET.

Po automatycznej instalacji - która nie wymaga ingerencji użytkownika - w systemie można uruchamiać aplikacje .NET tak samo jak klasyczne aplikacje Win32.

Po automatycznej instalacji - która nie wymaga ingerencji użytkownika - w systemie można uruchamiać aplikacje .NET tak samo jak klasyczne aplikacje Win32.

Z punktu widzenia architektury obu technologii Java i .NET mają wiele cech wspólnych. W obu przypadkach do uruchomienia aplikacji potrzebne jest rozszerzenie systemu, które umożliwia odczytanie kodu pośredniego. W Javie jest to maszyna wirtualna (Java VM), natomiast na platformie .NET uruchamianiem aplikacji zajmuje się CLR (Common Language Runtime). Trochę inaczej wygląda samo wykonywanie kodu. Aplikacje Javy mogą być interpretowane wiersz po wierszu lub kompilowane na kod maszynowy tuż przed wykonaniem. Na platformie .NET aplikacje są zawsze kompilowane przed wykonaniem. Proces ten nazywa się kompilacją JIT (Just-In-Time).

Które rozwiązanie jest bardziej wydajne? Nie ma jednoznacznej odpowiedzi, ponieważ wydajność zależy w tym przypadku od konstrukcji programu i rodzaju wykonywanych operacji. Generalnie interpretacja jest wolniejsza, ale kompilacja za to wiąże się z dodatkową pracą procesora.

Dla dobrego zrozumienia zagadnień kompilacji JIT i oszacowania wydajności, trzeba wiedzieć, że zarówno aplikacje Javy, jak i te przeznaczone do platformy .NET, są nie tylko pisane w językach obiektowych, ale obiektowy jest również kod pośredni generowany przez oba kompilatory. Innymi słowy maszyna wirtualna Javy oraz CLR platformy .NET wykonując program, posługują się obiektowymi typami danych, klasami i metodami - w odróżnieniu od rzeczywistych procesorów, które operują na rejestrach i komórkach pamięci. W tym kontekście interpretacja oraz kompilacja JIT dotyczą nie całej aplikacji, a kodu poszczególnych metod. Zatem w przypadku programów, które wielokrotnie wywołują te same metody, jednorazowa kompilacja znacznie przyspieszy wykonywanie programu. Właśnie na tym założeniu opiera się kompilacja JIT na platformie .NET.

Środowisko uruchomieniowe to więcej niż tylko VM czy CLR. Drugim bardzo ważnym elementem jest wbudowana biblioteka klas (Java API lub .NET FCL - Foundation Class Library), która udostępnia gotowe funkcje realizujące prawie wszystkie typowe operacje - od funkcji graficznych, przez dostęp do baz danych, po komunikację przy pomocy różnych protokołów internetowych - a także wiele mniej standardowych, bardziej specjalistycznych operacji.

Platforma .NET, niejako przy okazji, rozwiązuje jeszcze jeden problem - problem współpracy komponentów napisanych w różnych językach programowania, działających na różnych platformach sprzętowych i systemowych.

W odróżnieniu od Javy, z platformą .NET nie jest związany tylko jeden konkretny język. Owszem głównym językiem, który został zaprojektowany specjalnie pod kątem platformy .NET, jest C#, ale równie dobrze aplikacje można pisać w językach Visual Basic .NET, Delphi .NET, C++ .NET, J# (składnia taka jak w Javie) oraz w co najmniej 20 innych językach. Co więcej poszczególne elementy aplikacji można napisać w różnych językach, a wszystkie zostaną skompilowane do tego samego kodu pośredniego CIL.

W platformie .NET zastosowane zostały sprawdzone technologie znane już ze środowiska uruchomieniowego Javy oraz nowe rozwiązania ułatwiające programowanie aplikacji. Jednym z takich mechanizmów jest automatyczne zarządzanie pamięcią, które eliminuje potrzebę ręcznego niszczenia obiektów w kodzie. Zajmuje się tym wbudowany w platformę Garbage Collector, który sam zwolni obiekt, gdy nie będzie on już potrzebny. Zdjęcie z programisty obowiązku usuwania obiektów ma bardzo pozytywne konsekwencje. Likwiduje się sytuacje, w których obiekt nie zostaje zniszczony mimo zakończenia pracy aplikacji (wycieki pamięci) oraz zostaje zwolniony przedwcześnie, gdy ktoś/coś z niego jeszcze korzysta (błędy ochrony pamięci, niestabilne aplikacje).

Platforma .NET poprawia też bezpieczeństwo, ponieważ kod pośredni, zanim zostanie wykonany, jest analizowany i sprawdzane są prawa do wykonania określonych operacji. W ten sposób znacznie utrudnia się działanie wirusom i wszystkim innym podejrzanym fragmentom kodu, które starają się wykonać niedozwolone operacje, jak np. zapis danych w segmencie kodu, czy uruchomienie kodu z segmentu danych. Inny mechanizm - kontrola typów - pozwala uniknąć błędów typu przepełnienie bufora, ponieważ przed przypisaniem wartości, sprawdzana jest szerokość wypełnianego pola.

Szanse na popularyzację platformy .NET wśród programistów są ogromne, ze względu na wygodny obiektowy model programowania, uporządkowaną bibliotekę funkcji, standaryzowane metody współpracy komponentów, niezależność od platformy, bezpieczeństwo kodu i stabilność aplikacji, możliwość równoległego funkcjonowania kilku wersji tego samego komponentu (koniec słynnych problemów z niezgodnością bibliotek DLL) oraz uproszczoną dystrybucję i konfigurację aplikacji bez używania Rejestru (tekstowe pliki konfiguracyjne, instalacja przez kopiowanie plików).

Trzeba też pamiętać, że .NET Framework, to również wygodny dostęp do danych poprzez ADO.NET oraz podstawa ASP.NET, nowoczesnego i łatwego języka do budowy dynamicznych, interaktywnych stron internetowych. To także wydajna platforma do tworzenia Web Services, czyli usług sieciowych, które - już teraz można to przewidzieć - staną się w przyszłości podstawową technologią komunikacyjną stosowaną w aplikacjach rozproszonych.


Zobacz również