Microsoft Shared Source CLI

Podobne dokumenty
Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Wykład 4: Klasy i Metody

Programowanie obiektowe

Języki i techniki programowania Ćwiczenia 2

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Wykład 8: klasy cz. 4

C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści

Czym jest stos i sterta?

Metody dostępu do danych

Enkapsulacja, dziedziczenie, polimorfizm

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Podstawy programowania obiektowego

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Programowanie niskopoziomowe

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Microsoft IT Academy kurs programowania

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Języki i paradygmaty programowania doc. dr inż. Tadeusz Jeleniewski

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Programowanie obiektowe

Podstawy Programowania Obiektowego

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Programowanie Komputerów

MATERIAŁY DO ZAJĘĆ II

Programowanie MorphX Ax

Rozdział 4 KLASY, OBIEKTY, METODY

Java Język programowania

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Instrukcja laboratoryjna cz.3

Programowanie obiektowe

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Współbieżność w środowisku Java

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Wprowadzenie do projektu QualitySpy

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/ / 24

Aplikacje RMI

Wykład 3 Składnia języka C# (cz. 2)

MATERIAŁY DO ZAJĘĆ I. Podstawowe pojęcia. Algorytm. Spis treści Przepis

Języki i paradygmaty programowania - 1

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Języki i metody programowania Java. Wykład 2 (część 2)

Multimedia JAVA. Historia

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Wykład 8: Obsługa Wyjątków

Dokumentacja do API Javy.

IdyllaOS. Prosty, alternatywny system operacyjny. Autor: Grzegorz Gliński. Kontakt:

TEMAT : KLASY DZIEDZICZENIE

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Programowanie obiektowe

Programowanie obiektowe zastosowanie języka Java SE

Programowanie Obiektowe Ćwiczenie 4

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Klasy cd. Struktury Interfejsy Wyjątki

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Windows.

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Komputery przemysłowe i systemy wbudowane

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

1 Atrybuty i metody klasowe

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Programowanie obiektowe

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Zaawansowane programowanie w języku C++ Klasy w C++

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Ekspert radzi. mechanizm w enova, umożliwiający wskazanie domyślnej drukarki dla danego stanowiska i wydruku. Strona 1 z 8. Ekspert radzi.

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Język programowania. Andrzej Bobyk

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Wykład 5 Okna MDI i SDI, dziedziczenie

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Kurs WWW. Paweł Rajba.

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Historia modeli programowania

Dziedziczenie. dr Jarosław Skaruz

Programowanie w środowiskach graficznych. Wykład 3 Język C#

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Wywoływanie metod zdalnych

Kompilator języka C na procesor 8051 RC51 implementacja

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Księgarnia PWN: Włodzimierz Stanisławski, Damian Raczyński - Programowanie systemowe mikroprocesorów rodziny x86

Technologie obiektowe

Metodyka programowania. Podstawy C#

Scenariusz Web Design DHTML na 10 sesji. - Strony statyczne I dynamiczne. - Dodawanie kodu VBScript do strony HTML. Rysunek nie jest potrzebny

Transkrypt:

Microsoft Shared Source CLI Artur Popławski Seminarium magisterskie Zagadnienia Programowania Obiektowego

Co to jest SSCLI? wirtualna maszyna, implementacja na 3 systemy data-driven architecture, in which language-agnostic blobs of data are brought to life as self-assembling typesafe software systems Shared Source, dystrybucja wraz ze źródłami przenośność kodu, oprogramowanie komponentowe standardy ECMA: Common Language Infrastructure (334) Język programowania C# (335) Jscript (242) nazwa kodowa ROTOR SSCLI a.net

Zasady licencji Shared Source tylko do użytku niekomercyjnego można modyfikować i rozpowszechniać kod modyfikacje: nie wolno wykorzystywać w celach komercyjnych należy zaznaczyć, że nie jest to oryginalny kod rozpowszechniane z kompatybilną licencją należy zachować informację o prawach autorskich nie ma żadnych gwarancji na kod

Cele powstania i status projektu przedstawienie przykładowej implementacji standardów CLI i C# zachęta dla powstawania innych implementacji do nauczania dla środowisk naukowych dla wszystkich zainteresowanych VM próba zbudowania wspólnoty pierwsze wydanie ma stadium beta czyżby zastój?

Składniki SSCLI około 1.9 miliona linii kodu, z czego 60% w C/C++, 30% w C# i trochę kodu w CIL i ASM w pełni funkcjonalny kompilator C# i Jscript clix, czyli loader programów narzędzia programisty: linker, assembler, disassembler narzędzia do przeglądania zasobów i składników VM debuggery duży zbiór bibliotek standardowych

Przegląd architektury Typy typy danych i metadane zorientowane obiektowo properties i events symboliczne referencje Common Intermediate Language assemblies -- pudełka dla typów kompilacja Just In Time (JIT) nadzorowane wykonywania programów izolacja komponentów, konwencje nazywania Platform Adaptation Layer

Prosty przykład kompilacji clix ładuje silnik VM ładowanie i weryfikacja kodu ładowanie metadanych weryfikacja i ładowanie typów kompilacja JIT wykonanie kodu

System typów zapewnia możliwość współpracy z SO i innym kodem CLI jest środowiskiem silnie typowanym znaczenie systemu typów kontrola typów bezpieczeństwo automatyczne wykrywanie błędów umowa co do zasad działania zapewnia prawidłowe działanie systemu types as contracts, typy zapewniają szczegółowy opis zasad, które dany element zobowiązuje się dotrzymać

System typów cd. typ najprostsza jednostka, zawiera opis zachowania chroniący przed niewłaściwym użyciem obiekt element System.Object, ma tożsamość i pamięć komponent pojęcie szersze od obiektu, moduł, niezależna jednostka

System typów cd Value Types abstrakcja najprostszych typów zdefiniowane dwa rodzaje rzutowania boxing/unboxing przekazywanie VT jako wskaźnik typy proste: int8, unsigned int8, float, enum referencje silnie typowane, kontrola miejsca zapisu, nie wskazują na nic interfejsy delegaci (wskaźniki na funkcje, zawiera wskaźnik na obiekt i kod metody) wskaźniki zarządzalne (niskopoziomowy wskaźnik wzbogacony o instrukcje dostępu do niego)

Metadane nieformalnie: dane opisujące inne dane bardziej formalnie: system opisujący elementy deklarowane i wskazywane w module metadane opisują strukturę modułu zaimplementowane jako baza relacyjna tokeny metadanych znajdują się w kodzie optymalizacje metadanych (read-only, upychanie ) możliwość modyfikacji, atrybuty własne weryfikacja metadanych zawierają informacje o położeniu typu w pamięci

Assemblies moduł (assembly może zawierać wiele modułów), jednostka programu nacisk na możliwość wielokrotnego użycia niezależny od systemu i w pełni samoopisujący się zawiera metadane (manifest) i zasoby zapisany w formacie PE/COFF kontrola wersji i zabezpieczenia assembly może mieć atrybut private lub public Global Assembly Cache izolacja i domena aplikacji analogia do izolacji procesów w SO

Manifest metadane zawarte w assembly manifest składa się z: określenia osobowości assembly (nazwa, klucz publiczny) wersja (numer, locale, hasz, nazwa) opisu zawartości (typy, zasoby) zależności praw dostępu i własne atrybuty dane przechowywane najczęściej w postaci tablicy weryfikacja podczas działania

Assembly - ładowanie ładowane tylko kiedy są potrzebne Schemat ładowania: i. aplikacja woła metodę i w jej metadanych sprawdzana jest żądana wersja ii.sprawdzenie GAC iii.jeśli nie ma w GAC, to VM szuka gdzie indziej iv.ładowanie metody możliwość konfiguracji sposobu ładowania

Wykonywanie kodu newobj tworzy nowy obiekt, a właściwie MethodTable i zmienne instancji na stosie ładowane są metadane oraz kod metod MethodTable (wskaźniki do metod i interfejsów) EEClass (informacje o klasie) ClassLoader (przygotowanie klasy) kompilacja odkładana do ostatniego momentu za kompilację odpowiedzialny jest prestub helper weryfikacja kodu obie czynności wykonane jednoprzebiegowo

Konwencje wołania po skompilowaniu kod jest gotowy do wykonania na stosie znajduje się typowy rekord aktywacji konwencja JIT call, calli (przez wskaźnik do metody) i tailcall argumenty i wartość zwracana jest wrzucana na stos na stos wrzucany jest wskaźnik this konwencja x86 konwersja wołania JIT (argumenty, ramka)

Intermediate Language assembler maszyny wirtualnej około 220 instrukcji (polimorfizm) Common Type System wykorzystuje stos, brak rejestrów wielkość ramki na stosie konstrukcje wysokopoziomowe dostępu do danych typowo obiektowe instrukcje Structural Exception Handling

Kompilacja prostego programu public class Echo { private string toecho = null; public string EchoString { } } get { return toecho; } set { toecho = value; } public string DoEcho() { } if (toecho == null) throw new Exception( Nie ma co wypisać. ); return toecho;

.class public auto ansi beforefieldinit Echo extends System.Object { field private string toecho.method public hidebysig specialname instance string get_echostring() cil managed {...}.property instance string EchoString() { } }.get instance string Echo::get_EchoString().set instance void Echo::set_EchoString(string)

.method public hidebysig instance string DoEcho() cil managed {.maxstack 2.locals init ([0] string...) ldarg.0 ldfld string Echo::toEcho brtrue.s TRUE ldstr Nie ma co wypisać. newobj instance void [mscorlib] \ System.Exception::.ctor(string) throw TRUE: ldarg.0; ldfld string Echo::toEcho stloc.0 br.s JMP JMP: ldloc.0; ret }

Przykłady instrukcji CLI Metadane:.assembly extern mscorlib {} - odwołanie do innego assembly.assembly OddOrEven { } - nazwa.class public auto ansi Even extends [mscorlib]system.object {...}.field public static int32 val definicja zmiennej.ldstr Enter a number - w metadanych zapisane gdzie znajduje się łańcuch Inne instrukcje:.entrypoint.call vararg int32 sscanf(string,int8*,...,int32*).data FormatData = bytearray(25 64 00 00 00 00).method public static pinvokeimpl("msvcrt.dll" cdecl) vararg int32 sscanf(string,int8*) cil managed{}

Podstawowe instrukcje instrukcje mogą mieć sufiksy (np. brtrue.s) Instrukcje skoku: bezwarunkowe (br, br.s) warunkowe (brfalse, brtrue.s) Operacje na stosie: ładowanie stałych (ldc.i4.1, ldc.i8.4) ładowanie wskaźników (ldind.i1, ldind.u2) zapisywanie do pamięci (stind.i1) Operacje arytmetyczne: add, sub, mul, neg Operacje logiczne, na pamięci (cpblk), konwersji (conv)

Instrukcje IL cd. ładowanie argumentów (ldarg), zmiennych lokalnych (ldloc) ładowanie pól (ldfld) wołanie metod (call) tworzenie tablic (newarr), długość tablic (ldlen), ładowanie elementu tablicy (ldelem.u2) wyjątki:.try,.catch,.finally

Garbage collector metoda finalize() zarządzanie stertą: odnajdywanie martwych obiektów metodą tracing the roots zwalnianie pamięci - mark and sweep collection zapobieganie fragmentacji metodą kopiowania kolekcji podział sterty (pokolenia obiektów i wielkie obiekty) wskaźniki między pokoleniami obiektów i write barrier (kopiowanie obiektów), rola JIT

Garbage collector cd. Odzyskiwanie pamięci: wywołanie GC (kosztowne i wywołanie w odpowiednim miejscu) zawieszenie wszystkich wątków tracing the roots skopiowanie promowanych obiektów poprawienie wskaźników uaktualnienie listy wolnej pamięci

Struktura pliku wykonywalnego format PE/COFF nagłówki SO i CLR Sekcje:.reloc.text (metadane,il,zas).sdata.rsrc (zasoby zarządzalne)

Tworzenie pliku PE inicjalizacja buforów i szablonu pliku w pamięci kod IL jest kopiowany do sekcji.text dane są kopiowane do.sdata, metadane do buforów metadane, zasoby zarządzalne kopiowane do.text zasoby niezarządzalne do.rsrc zapis na dysku

Platform Adaptation Layer jednym z głównych celów CLI jest przenośność biblioteka zapewniająca interfejs pomiędzy VM a systemem operacyjnym wyższe warstwy komunikują się tylko z PAL podzbiór Win32 API prosta implementacja dla systemu Windows implementacja na systemy Uniksowe

Implementacja uniksowa dzielenie pamięci pomiędzy procesami przy użyciu pamięci dzielonej (mmap) pamięć dzielona jest zorganizowana w listę segmentów do identyfikacji zasobów służy uchwyt (handle) zarządca zasobów pamięta ile razy zasób był zablokowany zawiera informację o typie zasobu uchwyty trzymane w formie listy ze wsk. na koniec

Procesy i wątki każdy proces (wątek) w VM odpowiada procesowi (wątkowi) w SO pthread i wykorzystanie syscalli, np. fork(), execve() Thread Local Storage Synchronizacja i implementacja (syscall pipe()): sekcje krytyczne muteksy wydarzenia (events) semafory czekanie na zakończenie procesu/wątku

Problemy z przenośnością czekanie na proces w Windowsie i Uniksach zawieszanie wątków (pipe'y i zakleszczenia) bloki try, except i finally i Structured Exception Handling (she) w Uniksach implementacja przy użyciu sygnałów zarządzanie pamięcią i problemy z mmap blokowanie fragmentów plików asynchroniczne operacje na gniazdach

Więcej o SSCLI David Stutz, Ted Neward, Geoff Shilling, Shared Source CLI Essentials Serge Lidin, Inside Microsoft.NET IL Assembler http://msdn.microsoft.com/net/sscli/ http://msdn.microsoft.com/net/ecma/ http://www.sscli.net http://msdn.microsoft.com/msdnmag/issues/02/07/sharedsourcecli/default.aspx http://msdn.microsoft.com/msdnmag/issues/1100/gci/default.aspx