Common Language Runtime

Die Common Language Runtime, kurz CLR, ist der Name der virtuellen Laufzeitumgebung von klassischen .Net-Framework-Anwendungen. Die CLR stellt damit eine konkrete Implementierung der Laufzeitumgebung der Common Language Infrastructure für das .NET Framework dar. Die CLR führt nicht direkt den Programmcode einer höheren Programmiersprache aus, sondern interpretiert Common Intermediate Language-Code (ECMA-Bezeichnung, früher Microsoft Intermediate Language). Dafür wird der Programmcode einer .NET Sprache (C#, J#, F#, C++/CLI …) mittels eines sprachabhängigen Compilers in CIL-Code übersetzt. Dies bietet unter anderem den Vorteil, dass Teile eines Programms in unterschiedlichen Programmiersprachen geschrieben werden können.

Erklärung und Funktionsweise

[Bearbeiten | Quelltext bearbeiten]
Vereinfachtes Funktionsprinzip der Common Language Runtime im .NET Framework

Wird ein Programm aus einer .NET-Programmiersprache übersetzt, werden zunächst Assemblies (Dateiendungen .exe oder .dll) erzeugt, welche den übersetzten CIL-Code sowie diverse Header und Metadaten enthalten. Dieser Schritt muss von einem sprachspezifischen Compiler vorgenommen werden. Bei CIL-Code handelt es sich um einen Zwischencode, der von der CLR verwaltet wird und der deshalb auch als managed code bezeichnet wird, als verwalteter Code – in Abgrenzung zu unmanaged code bzw. nativem Code. Zur Laufzeit des Programms werden die geladenen Assemblies von einem Just-in-time-Compiler, welcher Bestandteil der CLR ist, in nativen Code (Maschinencode) übersetzt, welcher von der CPU ausgeführt werden kann.

Die von der CLR angebotenen Dienste können von den Programmiersprachen genutzt werden, in denen die jeweilige Anwendung programmiert wurde. Zu diesen Diensten gehören unter anderem Garbage Collection, Ausnahmebehandlung und die Sicherstellung von Code Access Security. Die CLR ist angewiesen auf das Common Type System, d. h. eine Sammlung von Typen und Funktionen, die in vielen Programmiersprachen unterstützt werden.

Die CLR ist die Implementierung der Komponente Virtual Execution System, die zu dem Standard Common Language Infrastructure gehört, für das .NET Framework.[1]

Es gibt weitere Laufzeitumgebungen, die die CLR adaptieren und diesen Namen mitverwenden:

  • Mono enthält eine Laufzeitumgebung nach dem Vorbild von der des .NET Frameworks, sie wird mitunter auch als CLR bezeichnet.
  • CoreCLR ist der Name der Laufzeitumgebung, die im modularen, quelloffenen Framework .NET Core verwendet wird.[2]
  • .NET Native enthält eine Laufzeitumgebung, für die auch CLR als Name verwendet wird. Sie kommt bei der Ausführung von Universal Windows Platform Apps für Windows 10 zum Einsatz. Diese Anwendungen werden nicht in CIL-Code ausgeliefert, sondern direkt in nativem Code. Die Just-in-time-Kompilierung entfällt.[3]

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. Mohammad Rahman: C# Deconstructed: Discover how C# works on the .NET Framework, Apress 2014, ISBN 978-1-4302-6670-9, S. 16
  2. Neil McAllister: Microsoft takes lid off .Net Common Language Runtime sauce, in: The Register vom 3. Februar 2015, abgerufen am 9. Dez. 2015
  3. Holger Schwichtenberg: Zwei auf einen Streich, in: Windows Developer Nr. 10/2015, S. 8 ff. (Online-Ausgabe (Memento des Originals vom 20. Dezember 2016 im Internet Archive)  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/entwickler.de, 12. Oktober 2015, zuletzt abgerufen am 16. Dez. 2016)