Technologia .NET została zaprojektowana, aby zrealizować
trzy cele. Po pierwsze ma pozwolić na wydostanie się wreszcie z getta jednego
typu procesora i utworzenie środowiska, które wzorem wirtualnej maszyny Java,
pozwoli programistom tworzyć w pełni przenaszalne aplikacje, gdzie
przenaszalność oznacza zarówno niezależność od sprzętu, jak i systemu
operacyjnego. W to należy również włączyć całą gamę urządzeń przenośnych.
Po drugie, co jest ściśle związane z pierwszym, celem idei .NET było powstanie
bibliotek komponentów implementujących elementy typowe dla środowiska
graficznego (takie jak okna, przyciski, listy, pola opcji itp.) oraz innych
klas niezbędnych podczas projektowania aplikacji dla nowoczesnych systemów
operacyjnych. W tym aspekcie .NET jest rozwinięciem idei COM, ActiveX i w
sferze baz danych ADO. Wreszcie po trzecie nowa technologia ma ułatwić
kontakt programom znajdującym się na różnych komputerach. Stąd nazwa .NET. W
tym aspekcie należy zwrócić uwagę na najbardziej docenioną część nowej
technologii ASP.NET, która jest coraz częściej wykorzystywana do budowy
serwisów sieciowych.
O ile pierwszy cel jest w zasadzie nadal nie osiągnięty,
platforma .NET dostępna jest tylko w systemach Windows,
a jej popularność w urządzeniach przenośnych nie może się równać popularności
wirtualnej maszyny Javy, to drugi, a szczególnie trzeci cel jest stopniowo
realizowany. Należy zwrócić uwagę, że technologia .NET rozwijana jest dopiero od
końca lat dziewięćdziesiątych ubiegłego wieku (w 2001 udostępniona została
pierwsza wersja Microsoft .NET Framework) i z pewnością nie osiągnęła jeszcze
pełnej dojrzałości. Nadal, pomimo, że udostępniania jest za darmo i powoli
staje się integralną częścią systemu Windows, nie ma wielu popularnych
aplikacji, które ją wykorzystują.
1.1.
Środowisko uruchomieniowe
Biblioteki platformy .NET (rozpowszechniane pod nazwą
Microsoft .NET Framework) tworzą środowisko, w którym uruchamiane są aplikacje
.NET. Powstaje w ten sposób dodatkowa warstwa między aplikacją, a systemem,
która z jednej strony chroni system przed niebezpiecznymi zachowaniami
aplikacji, przejmuje kontrolę nad zarządzaniem pamięcią i wątkami, a z drugiej
udostępnia aplikacjom bibliotekę komponentów (nazwaną Windows Forms), dodatkowe ujednolicone
mechanizmy dostępu do zasobów systemu, w tym w szczególności do baz danych
(ADO.NET), ułatwienia komunikacji między komputerami itp. Ciekawą, z punktu widzenia
programisty, jest dostępność wielu kompilatorów dla platformy .NET. W chwili
obecnej aplikacje .NET możemy tworzyć w C++, Visual Basicu, C#, J#,
Delphi, a nawet Perl lub JavaScript. Poza ostatnią własnością platforma .NET
jako żywo przypomina wirtualną maszynę Javy.
1.2.
Kod pośredni i podwójna kompilacja
Podobnie jak w przypadku Javy, także tutaj kod źródłowy nie
jest kompilowany bezpośrednio do kodu maszynowego. Kompilacja jest dwustopniowa.
W pierwszej fazie zostaje on skompilowany do kodu pośredniego wspólnego dla
wszystkich języków programowania platformy .NET i wspólnego dla wszystkich środowisk
uruchamiania .NET bez względu na system operacyjny i procesor. Druga faza, to
kompilacja kodu pośredniego za pomocą kompilatorów Just-In-Time. Nie musi się ona odbyć bezpośrednio
po pierwszym etapie, ani nawet na tym samym komputerze.
Nieco zamieszania może powodować fakt, że wynikiem
kompilacji kodu źródłowego C#, oraz innych języków .NET, jest plik .exe. Mimo tego samego
rozszerzenia i nagłówka rozpoczynającego się od MZ struktura tego pliku jest
zupełnie inna niż tradycyjnych plików wykonywalnych zawierających kod
maszynowy. W istocie zawiera on bowiem kod pośredni, nazywany również kodem
zarządzanym (ang. managed code),
ze względu na stopień kontroli jaki nad wykonaniem tego kodu sprawuje platforma
.NET. Z punktu widzenia użytkownika, jeżeli tylko platforma .NET jest
zainstalowana w systemie, nie ma to większego znaczenia po prostu uruchamia
program klikając dwukrotnie plik .exe.
Jednak z punktu widzenia systemu różnica jest ogromna.
Jak każda nowa technologia, także .NET wprowadza wiele
nowych nazw i skrótów. Aby ułatwić Czytelnikowi posługiwanie się nowym żargonem
związanym z .NET, co jest warunkiem swobodnego korzystanie ze źródeł informacji
nt. .NET dostępnych w Internecie, przedstawiam najczęściej spotykane skróty:
CLR
(ang. Common Language Runtime) czyli środowisko uruchomieniowe aplikacji platformy .NET,
warstwa pośrednia między systemem Windows, a aplikacją.
CLS (ang. Common Language Specification) wymagania stawiane językom i
ich kompilatorom, aby mogły tworzyć aplikacje dla platformy .NET.
CTS
(ang. Common Type System)
podzbiór specyfikacji CLS
określający jednolity system typów dostępnych w środowisko .NET (zob. tabela
2.1), które powinny być dostępne w każdym kompilatorze.
CAS
(ang. Code
Access Security) podsystem środowiska CLR odpowiedzialny za dopilnowanie, aby ze
względu na bezpieczeństwo systemu aplikacje nie wykraczały poza wyznaczone im
ramy działania, tzn. na przykład, aby aplikacja uruchamiana z sieci nie miała
możliwości zapisu na lokalnych dyskach itp.
IL (MSIL) ang. Intermediate Language
(Microsoft IL), kod
pośredni wspólny dla wszystkich kompilatorów przeznaczonych dla .NET
niezależnie od języka programowania, efekt pierwszego etapu kompilacji, odpowiednik
bytecode
z Javy.
JIT
ang. Just-In-Time,
kompilator, który kod pośredni (IL)
kompiluje do kodu maszynowego, co pozwala na znacznie szybsze wykonanie poleceń
niż bezpośrednia interpretacja IL.
Kompilator JIT jest
elementem środowiska uruchomieniowego (CLR),
więc jego wykorzystanie nie ogranicza przenaszalności kodu pośredniego.
Windows Forms zbiór klas implementujących
komponenty typowe dla środowiska graficznego oraz dodatkowe klasy ułatwiające
programowanie aplikacji przeznaczonych dla systemu Windows. Odpowiednik VCL i
VCL.NET z Borland Delphi i C++ Builder oraz MFC z kompilatorów Microsoft.
ASP.NET
Active Server Pages .NET,
technologia tworzenia serwisów Webowych po stronie serwera
IIS
Internet Information Service,
usługa systemu Windows, która udostępnia serwer WWW i FTP współpracujący także
z ASP.NET.
HTML,
XML popularne formaty
kodowania tekstu i danych opracowane przez W3 Consortium stosowane w ASP.NET.
Web Controls
analogiczny do Windows Forms zbiór komponentów przeznaczonych dla
aplikacji sieciowych ASP.NET.