Home   Cover Cover Cover Cover
 

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.