Suchen und Finden
Service
Infos und Kontakt
6 Anweisungen und Ausführungskontrolle (S. 123-124)
Ähnlich wie sich ein Text aus einer Reihe von Sätzen zusammensetzt, setzen sich Programme aus Anweisungen zusammen. Der Begriff der Anweisung in einer Programmiersprache erinnert also entfernt an den Satzbegriff natürlicher Sprachen. Vergleiche dieser Art können zwar zum prinzipiellen Verständnis maschineller Sprachen etwas betragen, sie allzu sehr strapazieren zu wollen, führt aber nicht sehr weit.
6.1 Sprachebenen
Anders als bei natürlichen Sprachen spielen bei Computersprachen Rekursion, Iteration und verschiedene Sprachebenen eine bedeutende Rolle. Eine wichtige Eigenschaft von Computersprachen ist beispielsweise die Möglichkeit, Anweisungsfolgen in Prozeduren zusammenzufassen, also komplexe Anweisungen aus einfachen Anweisungen aufzubauen. Umgekehrt zerfällt jede Anweisung in eine mehr oder weniger komplexe Folge elementarer Anweisungen, wobei die Definition dessen, was elementar ist, eine reine Frage der Sprachebene ist. Als unterste Sprachebene gilt die plattformspezifische Maschinensprache, deren Befehlsfolgen der jeweilige Prozessor unmittelbar verarbeiten kann.
Einer der wesentlichen Gedanken des hinter der .NET-Technologie steckenden Sandbox-Konzepts ist die Einführung einer gemeinsamen Sprachebene, auf der für alle .NET-Sprachen Codekompatibilität herrscht. Die Hochsprache C# ist deshalb - wie alle anderen .NET-Sprachen auch - auf Basis einer Zwischensprache namens IL (Intermediate Language) definiert. Diese wiederum hat ein maschinensprachliches Äquivalent auf der jeweiligen Hardwareplattform. (.NET ist zur Zeit zwar ausschließlich auf der Plattform Intel in Verbindung mit Windows verfügbar, Borland hat aber Anfang Mai 2002 bereits etwas von einer Linux-Version verlauten lassen). Mit anderen Worten: Der C#-Compiler übersetzt C#-Code in IL-Code, und ein JIT-Compiler (Just-in-Time-Compiler) den IL-Code kurz vor der Ausführung in den so genannten nativen Code, also in eine Folge von plattformspezifischen Maschinenbefehlen, die der jeweilige Prozessor im Allgemeinen direkt verarbeiten kann (je nach Architektur kann hier sogar noch eine weitere Sprachebene ins Spiel kommen, man denke etwa an den Hardware Abstraction Layer (HAL) von Windows NT oder an einen Windows-Emulator für den Macintosh).
6.2 Anweisungsfolgen und Threads
Eine einzelne Anweisung macht allein noch kein Programm aus, auf die Abfolge vieler Anweisungen kommt es an. Natürlich kann man sich ein Programm als schlichten Aufruf der "Anweisung" Main() vorstellen, die ja, wie an anderer Stelle ausgeführt, den definierten Einsprungpunkt jedes C#-Programms darstellt. Diese Betrachtung gibt allerdings wenig Aufschluss über das Innenleben des Programms. Komplexe Anweisungen bzw. Aufrufe wie Main() zerfallen über den Vorgang der Substitution in Abfolgen einfacherer Anweisungen, diese wiederum in Abfolgen noch einfacherer Anweisungen, usw. Auf der untersten Substitutionsebene finden sich schließlich nur noch primitive Anweisungen der jeweiligen Programmiersprache (die ihrerseits im Rahmen der Sprachimplementierung noch weiter zerfallen, zunächst in die IL und am Ende - wie gesagt - in Maschinenanweisungen). Allem Multiprocessing, -tasking und -threading moderner Computerarchitekturen und Betriebssysteme zum Trotz orientiert sich das Ablaufmodell heutiger Computer nach wie vor an der von Neumann-Architektur, bei der eine CPU eine Befehlskette sequenziell abarbeitet. Wenn mehrere CPUs vorhanden sind, gibt es eben mehrere Befehlsketten - und komplexe Logiken sowie Verwaltungsmechanismen, die diese miteinander in Einklang bringen. Das Ablaufmodell wird dadurch zwar etwas komplexer, wirklich grundlegende Änderungen, die aus der Beschränktheit der von Neumann-Architektur hinausführen würden, gibt es jedoch nicht.
Alle Preise verstehen sich inklusive der gesetzlichen MwSt.; Ersparnis im Vergleich zur Printversion





















