CLR na platformie NET Tomasz Kostarski O czym




















- Slides: 20
CLR na platformie. NET Tomasz Kostarski
O czym będzie? �Co to jest CLR? �Obsługa typów danych (CTS i Pakowanie) �Zarządzanie pamięcią (Odzyskiwanie i Finalizatory) �Wspólna specyfikacja języka (CLS) �Kod zarządzalny (MSIL, Metadane, Podzespoły, Wykonywanie kodu)
Co to jest CLR? �Wspólne środowisko uruchomieniowe � (Common Language Runtime) �Wybór kompilatora dla języka �Kompilacja do MSIL �Wykonanie kodu zarządzanego
Obsługa typów danych �Różne języki, różna składnia �Podobne podstawowe pojęcia: �Liczba całkowita �Napis �Zbieranie kodu w metody �Grupowanie danych i metod w klasy
CTS - Wspólny zestaw typów danych �Common Type System �Zestaw typów, niezależny od składni języka �Każdy język zgodny z CLR musi używać chociaż części typów z CTS, ale może mieć dowolną składnię �W każdym języku można definiować własne typy danych spoza CTS �Typy skalarne i referencyjne, wszystkie dziedziczą po Object �Wszystkie typy skalarne to typy proste, na stosie pamiętamy ich wartość �Typy referencyjne przechowują na stosie wskaźnik do swych wartości umieszczonych gdzieś w pamięci
Najważniejsze typy danych w CTS
Pakowanie (boxing) �Konwersja typów skalarnych na typy referencyjne �Używane np. przy przekazywaniu wartości skalarnej do metody oczekującej typu referencyjnego Możliwa powtórna konwersja przez rozpakowanie Większość języków z CLR wykonuje to automatycznie Oczywisty wpływ na wydajność
Zarządzanie pamięcią �Pamięć dla danych przydzielana na stosie lub stercie – zmienne skalarne lub referencyjne �Pamięć ze stosu zwalniana jest automatycznie �Pamięć ze sterty po zapełnieniu zwalnia odśmiecacz (garbage collector) �GC działa automatycznie, nie zaleca się jawnego uruchamiania go w aplikacji
Odzyskiwanie pamięci 1. 2. 3. 4. Tworzenie aktualnej listy „osiągalnych” obiektów Usuwanie obiektów spoza listy Porządkowanie sterty w spójny blok zajętej pamięci Poprawianie istniejących odwołań �Najwięcej śmieci wśród najmłodszych obiektów �Najstarsze obiekty przesuwane są ku końcowi sterty �Odśmiecanie najmłodszych obiektów, a jeśli nadal brakuje pamięci przeglądanie starszych
Przed: Po:
Finalizatory �Każdy obiekt na stercie posiada finalizator (domyślnie pusty) �Kiedy GC znajdzie obiekt do usunięcia umieszcza go na liście oczekujących na finalizację �Po przeszukaniu całej pamięci, dla każdego obiektu z listy wykonuje się jego finalizator �Finalizator to nie destruktor – nie wiadomo kiedy i czy się wykona (aplikacja może zakończyć się wcześniej) �Dla ważnych czynności sprzątających lepiej stworzyć odpowiednią metodę
CLS - Wspólna specyfikacja języka �Common Language Specification �Wywołanie kodu napisanego w jednym języku, z kodu napisanego w innym �Wymaga to obsługi w różnych językach typów danych w ten sam sposób �Określa jak duży podzbiór CTS musi byś zaimplementowany w języku, by osiągnąć zgodność �Niektóre wymagania: obsługa większości typów skalarnych, najniższy indeks w tablicy musi być zerem
Kod zarządzany �Kompilatory zamieniają kod źródłowy napisany w dowolnym języku na: �Kod wykonywalny zapisany w MSIL �Metadane, czyli informacje na temat kodu wykonywalnego i danych przez niego używanych �W czasie wykonania aplikacji, CLR tłumaczy kod MSIL na kod natywny procesora �Ta konwersja daje możliwość zarządzania wykonaniem aplikacji, stąd nazwa
MSIL - standardowy język pośredni �Microsoft Intermediate Language �Kod podobny do zestawu instrukcji procesora �Polecenia MSIL bazują bezpośrednio na pojęciach zdefiniowanych w CTS �Kod źródłowy z języków wyższego poziomu, kompilowany jest do wspólnego kodu pośredniego �Dodatkowa warstwa abstrakcji daje nam potencjalną przenośność �Możliwość sprawdzenia bezpieczeństwa typów przed uruchomieniem
Metadane �Szczegółowy opis typów zdefiniowanych w kodzie zarządzanym, z którym są związane �Przechowywane w tym samym pliku co kod MSIL �Opisują między innymi: nazwy typów, zasięgi, po kim dziedziczy, interfejsy, metody, obsługiwane zdarzenia �Z metadanych korzysta funkcja Intelli. Sense w Visual Studio. NET �W metadanych opisane są też atrybuty
Podzespoły/Złożenia (assembly) �Aplikacja składa się z różnych plików, kod/grafika/tekst �Grupowanie plików stanowiących jeden logiczny moduł, udostępniający określoną funkcjonalność �Manifest – odpowiednik metadanych dla pojedynczego podzespołu, zawiera: � nazwę podzespołu (może to być nazwa silna), � numer wersji podzespołu (wspólny i taki sam dla wszystkich modułów, które stanowią podzespół), � informacje na temat kultury (lub języka) obsługiwanej przez podzespół, � listę wszystkich plików, które stanowią podzespół, wraz z ich sumami kontrolnymi, � listę innych wymaganych do pracy podzespołów wraz z numerami ich wersji.
Podzespoły c. d. �Silna nazwa – unikatowa w całym systemie �W CLR nazwa typu danych, to nazwa nadana + nazwa podzespołu w którym został zdefiniowany �Większość podzespołów to pojedynczy plik DLL �Instalacja podzespołu to po prostu skopiowanie plików nie wymaga dodania wpisów do rejestru
Wykonywanie kodu zarządzanego �Przy uruchomieniu aplikacji, potrzebne podzespoły są odnajdywane i ładowane do pamięci �Jeśli aplikacja nie wywoła żadnej metody z podzespołu, nie zostanie on w ogóle załadowany �Podzespoły są najpierw szukane w GAC (Global Assembly Cache) - globalna pamięć podręczna podzespołów, dopiero później w innych miejscach �Po załadowaniu podzespołów potrzebna jest jeszcze ich kompilacja z MSIL na kod natywny
Dwie metody kompilacji 1. JIT (just-in-time compilation) - kompilacją w samą porę Każda metoda kompilowana jest dopiero w czasie pierwszego uruchomienia � Kompilacja następuje przy każdym uruchomieniu aplikacji � 2. Przy użyciu NGEN (Native Image Generator) Kompiluje kod całego podzespołu do kodu binarnego � Kod maszynowy umieszczany jest w pamięci podręcznej obrazów kodu natywnego (Native Image Cache) � Pozwala to na szybsze uruchamianie aplikacji �
Źródła �www. microsoft. com KONIEC