Gödel, Escher, Bach - ein Endloses Geflochtenes Band
übersetzen können, bis der endgültige, voll ausgewachsene Compiler entsteht. Diesen Vorgang nennt man „bootstrapping“ (sinngemäß: sich an den eigenen Haaren aus dem Sumpf ziehen). Das ist alles gar nicht so verschieden von der Situation eines Kindes, das einen kritischen Punkt in der Geläufigkeit seiner Muttersprache erreicht hat: Von diesem Punkt an können sein Wortschatz und seine Gewandtheit im Umgang mit der Sprache außerordentlich rasch anwachsen, da es nunmehr Sprache gebrauchen kann, um mehr Sprache zu erwerben.
Stufen in der Beschreibung laufender Programme
Compilersprachen spiegeln im allgemeinen nicht die Struktur der Maschine wider, die in dieser Sprache geschriebene Programme ablaufen läßt. Das Ist einer der Hauptvorzüge gegenüber der hochspezialisierten Assembler- und Maschinensprache. Wenn ein Programm aus der Compilersprache in Maschinensprache übersetzt wird, ist das daraus resultierende Programm natürlich maschinenabhängig. Deshalb kann man ein Programm, das abläuft, sowohl auf maschinenabhängige wie auf maschinenunabhängige Weise beschreiben. Etwas ähnliches geschieht, wenn man sich auf ein Buch nach seinem Inhalt (verlagsunabhängig) oder auf seine Seitenzahl und eine bestimmte Stelle auf der Seite (verlagsabhängig) bezieht.
Solange ein Programm abläuft, spielt es so gut wie keine Rolle wie man es beschreibt oder wie man sich seine Arbeitsweise erklärt. Erst wenn etwas schiefgeht, ist es wichtig, auf verschiedenen Stufen denken zu können. Wenn die Maschine zum Beispiel den Befehl erhält, an einem gewissen Punkt durch Null zu dividieren, wird sie anhalten und dem Benutzer ihr Problem mitteilen, indem sie ihm sagt, wo im Programm diese fragwürdige Operation auftaucht. Indessen wird diese Spezifikation oft auf einer niedrigeren Stufe vorgenommen als der, in der der Programmierer sein Programm schrieb. Hier drei Parallelbeschreibungen eines Progamms, das zum Stehen gekommen ist:
Stufe der Maschinensprache:
„Ausführung des Programms an Punkt 1110010101110111 gestoppt.“
Stufe der Assemblersprache:
„Ausführung des Programms gestoppt, als es auf den Befehl DIV ("Dividiere“) stieß.“
Stufe der Compilersprache:
„Ausführung des Programms gestoppt während der Berechnung des algebraischen Ausdrucks ,(A+B)/Z‘.“
Eines der größten Probleme für Systemprogrammierer (den Leuten, die Compiler, Interpreter, Assembler und andere häufig verwendete Programme schreiben) ist, herauszufinden, wie man ein Unterprogramm zur Aufdeckung von Fehlern schreiben kann, und zwar so, daß die Meldungen, die es dem Benutzer machen kann, dessen Programm einen Irrtum enthält, Beschreibungen höherer und nicht tieferer Stufe liefern. Das steht in einem interessanten Gegensatz zu der Tatsache, daß, wenn etwas in einem genetischen „Programm“ schief geht, (z. B. eine Mutation) der Defekt nur von Beobachtern auf der hohen Stufe, der des Phänotyps, nicht der des Genotyps gesehen wird. Tatsächlich verwendet die moderne Biologie Mutationen als eines ihrer wichtigsten „Fenster“ zur Beobachtung genetischer Vorgänge, weil sie auf vielen verschiedenen Ebenen verfolgt werden können.
Mikroprogrammierung und Betriebssysteme
In modernen Computersystemen gibt es noch verschiedene andere hierarchische Stufen. Zum Beispiel sind gewisse Systeme — oft die sogenannten „Mikrocomputer“ — mit Instruktionen in Maschinensprache ausgerüstet, die sogar noch rudimentärer sind als der Befehl, eine Zahl im Speicher zu einer in einem Register zu addieren. Es ist Sache des Benutzers, zu entscheiden, in welchen Befehlen auf der gewöhnlichen Maschinenebene er programmieren möchte; er „mikroprogrammiert“ diese Befehl auf Grund der vorhandenen „Mikro-Befehle“. Dann könnten die Befehle der „höheren Maschinensprache“, die er entworfen hat, in die Schaltung eingebrannt und fest verdrahtet werden, obgleich das nicht unbedingt so ist. Mikroprogrammieren gestattet dem Benutzer also, sich etwas unterhalb des konventionellen Maschinensprachniveaus zu begeben. Eine der Folgen ist, daß ein Computer eines Herstellers (durch Mikroprogrammierung) so verdrahtet werden kann, daß er den gleichen Satz von Maschinensprache-Befehlen besitzt wie ein anderer Computer des gleichen — oder sogar eines anderen Herstellers. Man sagt, daß der mikroprogrammierte Computer den anderen „emuliert“.
Sodann gibt es die Stufe der Betriebssysteme, die sich zwischen das Programm in Maschinesprache und
Weitere Kostenlose Bücher