Transcript CLR Common Languate Runtime
Gertraud Orthofer e-mail: [email protected]
Common Language Runtime
Seminar Softwareentwicklung Wintersemester 2003
Seminar Softwareentwicklung
2
Common Language Runtime
Laufzeitumgebung CIL-Code und Metadaten Hauptbereiche Common Type System (CTS) Common Language Specification (CLS) Virtual Execution System (VES) Metadata System Seminar Softwareentwicklung
3
Vorteile von CLR
Typsicherheit Sicherheit verschiedene Sprachen Performanz Deployment (DLL-hell) Metadata (self-describing Code) Garbage Collection Seminar Softwareentwicklung
4
Common Type System
Gemeinsames Typsystem für alle Sprachen legt Regeln fest: wie Typen definiert werden wie sie sich verhalten alle Typen erben von System.Object
Typen bestehen aus Menge von Werten darauf definierten Operationen zwei grundlegende Typen Werttypen Referenztypen Seminar Softwareentwicklung
5
Werttypen - Referenztypen
Speicherort Initialisierung Garbage Collection Objektvergleich Vererbung Basisklasse Werttypen
Stack 0 nein Inhalt nein System.Value
Referenztypen
Location: Stack Inhalt: Heap null ja Referenz ja System.Object
Seminar Softwareentwicklung
6
Übersicht der Typen
Werttypen Boxing Unboxing Referenztypen Vordefinierte Typen Vordefinierte Typen Pointers Benutzerdefinierte Typen Klassen Schnittstellentyp Arrays Delegates Seminar Softwareentwicklung
7
Benutzerdefinierte Werttypen (1/2)
Struktur .class (
auto|sequential
)
sealed System.ValueType
{ .field string name .field int32 age } Person extends Vereinigung .class
explicit sealed System.ValueType
{ .field [0] float32 f .field [0] int32 i IntFloat extends } Seminar Softwareentwicklung
8
Benutzerdefinierte Werttypen (2/2)
Enumeration Basisklasse System.Enum
Namen/Wert Paare werden unter bestimmten Namen gruppiert .class sealed Color extends System.Enum{ .field static literal valuetype Color red = int32 (0x00000000) .field static literal valuetype Color green = int32 (0x00000001) .field static literal valuetype Color blue = int32 (0x00000002) }
9
Seminar Softwareentwicklung
Benutzerdefinierbare Referenztypen (1/2)
Klassen Speicherplatzreservierung und Initialisierung in einer Anweisung abgeleitet von System.Object
Keine Mehrfachvererbung erlaubt Methoden .class Bar extends System.Object { .method
static
void foo() {…} .method
instance virtual
.method
instance
void goo() {…} void hoo() {…} } Methodenaufrufe Call void Bar:: foo() oder call instance void Bar:: (goo() | hoo()) Callvirt instance void Bar:: (goo() | hoo())
10
Seminar Softwareentwicklung
Benutzerdefinierbare Referenztypen (2/2)
Interfaces müssen abstract sein, keine Instanzen können davon erzeugt werden mehrfache Schnittstellenvererbung erlaubt .class interface abstract ILockable { .method
public abstract
instance virtual void Lock() {} } Arrays Daten vom Array müssen alle den gleichen Typ enthalten Zugriff auf die Daten über den Index Arten (newarr, newobj) Seminar Softwareentwicklung
11
Common Language Specification
legt Mindestanforderungen an jede Programmiersprache fest Regelwerk CLS-Regel 1: CLS-Regeln betreffen lediglich die Teile eines Typs, die außerhalb des definierenden Assemblys zur Verfügung stehen.
[assembly: CLSCompliant(true)] Seminar Softwareentwicklung
12
weitere CLR-Regeln
Namen Member Access Type visibility Member accessibility Security constraints Type Members Properties Events Seminar Softwareentwicklung
13
Virtual Execution System
Starten einer .exe Datei CLR starten Windows Loader lädt Datei MSCorEE.dll laden _CorExeMain starten CLR initialisieren CLR beginnt zu arbeiten Seminar Softwareentwicklung
14
Laden einer PE-Datei Execution Engine JIT-Compiler Verifikation der CIL AppDomain Laden eines Assemblies Übersetzung in Maschinencode Sicherheitsmanager Rechtsvergabe Managed Native Code Image Klassenlader Laden eines Moduls Laden eines Typs Codemanager Ausführung des Programms Seminar Softwareentwicklung
15