|
|
Common Language Runtime
Frage: Welche über Windows hinausgehenden Dienste bietet
die .NET-CLR an? Was ist der Nutzen dieser Dienste?
Antwort: Die Common Language Runtime (CLR) bietet folgend
über Windows (oder andere herkömmliche Betriebssysteme hinausgehenden)
Dienste an:
-
Interoperabilität zwischen Sprachen. .NET bietet
nahtlose Binärkompatibilität zwischen
Programmen, die in einer der über 20 .NET-Sprachen geschrieben
wurden. Alle .NET-Programme werden in einen einheitlichen
CIL-Code (Common Intermediate Language) übersetzt, der zur
Ladezeit (just in time) in Maschinencode transformiert wird.
Das Common Type System (CTS) definiert die von .NET unterstützten
Datentypen. Eine Teilmenge dieser Typen wird Common Language
System (CLS) genannt. Es handelt sich dabei um jene Typen, die
von allen .NET-Sprachen unterstützt werden müssen, wenn deren
Programme unter .NET zusammenarbeiten können sollen. Das CLS
sorgt auch dafür, dass Mechanismen wie Vererbung, Threads und
Ausnahmebehandlung in all diesen Sprachen auf die gleiche Art
funktionieren und sprachübergreifend verwendet werden können.
-
Garbage Collection. Die CLR besitzt einen Garbage Collector,
der dafür sorgt, dass dynamisch angelegte Objekte automatisch wieder
eingesammelt werden, sobald sie nicht mehr referenziert werden.
Garbage Collection vermeidet häufige Programmierfehler, wie z.B.
die verfrühte Freigabe noch benutzter Objekte oder das Vergessen
der Freigabe, was zu "Speicherleichen" führt.
-
Versionierung. .NET-Programme bestehen aus Komponenten,
die entweder in *.exe oder in *.dll-Dateien gespeichert werden.
Diese Komponenten sind in sich abgeschlossen, d.h. sie enthalten
alle Informationen über die von ihnen referenzierten Komponenten
und über die in ihnen deklarierten Typen (was für "Reflection"
benutzt werden kann). Man benötigt keine Registry-Einträge über
diese Assemblies, da sie alle Informationen enthalten, die nötig
sind, um sie zu laden und auszuführen. Um sie zu installieren,
braucht man lediglich die exe- oder dll-Dateien auf seine
Platte zu kopieren. Um sie zu deinstallieren, braucht man diese
Dateien nur zu löschen.
Ein Assembly wird nicht nur über seinen Namen identifiziert,
sondern auch über seine Versionsnummer. Der Compiler speichert
in einem Assembly die Versionsnummern der von ihm referenzierten
Assemblies. Wenn ein Assembly geladen wird, sucht der Lader nach
jenen Versionen der referenzierten Assemblies die der Compiler
gesehen und für seine Typprüfungen verwendet hat. Das garantiert,
dass die Typprüfungen des Compilers zur Laufzeit noch gelten.
Komponenten mit gleichem Namen aber verschiedener Versionsnummer
können sowohl auf der Platte als auch im Hauptspeicher zur gleichen
Zeit existieren. Die Installation neuer Software kann daher keine
gleichnamigen Assemblies anderer Applikationen überschreiben
(ein Problem, das als "Dll Hell" bekannt ist).
-
Sicherheit. Wenn ein Assembly geladen wird, wird es zuerst
"verifiziert", um sicherzustellen, dass sein Code nicht nach der
Übersetzung manipuliert wurde und dass die Typregeln nicht gebrochen
wurden. Assemblies können auch mit einem Public-Key-Verfahren
"signiert" werden. Damit kann man garantieren, dass ein Assembly wirklich
von einer vertrauenswürdigen Institution stammt und nicht von
einem Hacker. Für jedes Assembly, für jeden Ladeort und für jeden
Hersteller kann der Systemadministrator codebezogene oder
personenbezogene Rechte definieren. Das kann dazu verwendet werden,
Assemblies, denen man nicht traut, in einer Sandbox laufen zu lassen,
anstatt auf der offenen Maschine.
|