K-OCCAM - Der erste Occam-Compiler für den ST

Im Zusammenhang mit Transputern war immer wieder, auch in dieser Zeitung, von der Sprache Occam die Rede. Seit kurzem gibt es nun einen Occam-Compiler, der sowohl Code für den ST wie auch für eine angeschlossene K-Max-Transputerkarte erzeugen kann.

Die Firma Inmos, die sowohl den Transputer wie auch die Programmiersprache Occam (nach dem niederländischen Philosophen William von Occam, um 1290-1349, benannt) entwickelt hat. letztere als spezielles Werkzeug zur Programmierung paralleler Probleme, veröffentlichte schon sehr bald nach der ersten Formulierung der Sprachdefinition (1983/84) ein Occam-System, das den Namen Occam-Portakit trägt, weil es sehr leicht auf jeden beliebigen Rechnertyp anzupassen ist. Wie auch das bekannte UCSD-Pascal erzeugt der Compiler einen Pseudocode (der dem Transputer-Assembler zum Verwechseln ähnlich sieht), der dann von einem speziellen Interpreter in der jeweiligen Maschinensprache des Zielrechners ausgeführt werden kann. Dieser Pseudocode ist für einen hypothetischen Rechner, der ‘Portakit-Maschine’ heißt, gedacht. Seit 1986 gibt es eine erweiterte Occam-Definition, die den Namen Occam 2 trägt. Eine der wichtigsten Erweiterungen ist die Einführung von Fließkommazahlen, die in Occam 1 nicht unterstützt werden. Der Compiler des Portakits ist aber immer noch ein Occam 1-Compi-ler. Das Kuma K-Occam-System basiert auf dem Compiler des Portakit.

Occam ist eine strukturierte Hochsprache. Variablen sind, wie in Pascal, typgebunden, jede Typenkonvertierung muß bei der Zuweisung deklariert werden. Im Grunde ist die grobe Struktur der von C oder Pascal nicht unähnlich.

In Occam-Programmen gibt es drei Grund-Konstrukte: SEQ, PAR und ALT.

Blöcke innerhalb eines SEQ-Konstruktes werden hintereinander ausgeführt, wie in einer ganz normalen Programmiersprache. Solche Blöcke sehen nicht anders aus als in C oder Pascal.

PAR-Konstrukte dagegen deklarieren die darin enthaltenen Blöcke als prinzipiell parallel ausführbar. Zwei innerhalb eines PAR-Konstruktes enthaltene Statements können also parallel ausgeführt werden, wobei es für die Programmierung gleichgültig ist, ob die Blöcke tatsächlich parallel auf verschiedenen Prozessoren oder quasiparallel auf einer Multitasking-Umgebung laufen sollen.

Das ALT-Konstrukt schließlich dient dazu, nach Abfrage einer Bedingung einen von mehreren Prozessen auszuführen, entsprechend etwa einem CASE-Statement in Pascal.

Natürlich ist eine derartige Struktur nur dann sinnvoll, wenn Blöcke innerhalb eines PAR-Statements auch miteinander kommunizieren und gegebenenfalls aufeinander warten können. Dazu gibt es in Occam ein Mitteilungskonzept über sogenannte Kanäle, die z.B. in einer Transputerumgebung durch die Links der Prozessoren repräsentiert werden könnten. Ein Prozeß kann an einen anderen Prozeß eine Nachricht schicken. Dabei wartet der Absender so lange, bis der Empfänger bereit ist, die Nachricht zu empfangen. Ist der Empfänger früher an einem Punkt angelangt, an dem er eine Nachricht eines anderen Prozesses für die Weiterarbeit benötigt, muß er eben warten, bis der Sender geruht, in Aktion zu treten.

Eine tiefergehende Einführung in Occam würde den Rahmen dieses Artikels sprengen; bitte haben Sie Verständnis dafür, wenn es bei diesen ‘Appetithäppchen’ bleiben muß.

Das K-Occam-Paket

K-Occam besteht aus drei Teilen: Dem Occam-Compiler, der von 1NMOS stammt, dem Pseudocode-Interpreter und einem Assembler, der Pseudocode aus dem Assembler der Portakit-Maschine erzeugt und auch einen einfachen Screen-Editor enthält.

Der Pseudocode-Interpreter ist in drei Versionen zu erhalten: Eine Standard-Version führt Pseudocode-Instruktionen mit 0.1 Millionen Instruktionen pro Sekunde aus. Die zweite Version enthält zusätzliche Bereichsüberprüfungen für den Stack- und Befehlspointer. Dadurch wird die Ausführungsgeschwindigkeit halbiert sowie zusätzliche Betriebssicherheit erreicht, die laut Handbuch besonders für erste Versuche mit langen Programmen sinnvoll ist. Der dritte Interpreter schließlich kann zum Debuggen oder auch nur zum besseren Verständnis dienen: Er zeigt jede Instruktion, die gerade ausgeführt wird, auf dem Bildschirm an. Der Interpreter ist leicht zu bedienen, es ist ein TTP-Programm, dem man beim Start nur den Namen des zu interpretierenden Programmes (und eventuelle Parameter für dieses Programm) mitgeben muß.

Der Occam-Compiler selbst ist auch nur ein Pseudocode-Programm. Um ihn zu starten, muß man den Interpreter aufrufen und ihm als Parameter den Namen des Compilers (OCCAM) und den Namen des zu compilierenden Programmes (als Sourcecode) sowie optional einige weitere Parameter für den Compiler mitgeben. Als Ergebnis erhält man ein Pseudocode-Programm.

Mit den Optionen kann man den Compiler zum Beispiel dazu bringen, nur einen Syntax-Check durchzuführen, ohne Code zu generieren. Es ist ebenfalls möglich, den Compiler zum Pseudocode als Kommentar auch Assemblerbefehle erzeugen zu lassen, die dann von dem Debugging-Interpreter angezeigt werden. Damit werden dem Benutzer die gerade ausgeführten Befehle etwas übersichtlicher und verständlicher gezeigt als im Pseudocode. Der Compiler liefert ausführliche Fehlermeldungen. Die Compilierzeiten sind recht flott, allerdings kann der Compiler nicht ohne weiteres lange Programme auf einmal übersetzen; Das liegt daran, daß er immer bestimmte Abschnitte des Programmes auf einmal einliest und übersetzt. Solche Abschnitte sind z.B. Prozeduren oder Variablendefinitionen. Abschnitte dürfen für den Compiler nicht länger als 100 Zeilen sein. Beim Entwurf der Programme muß man darauf achten, am Anfang keine globalen Definitionen zu verwenden, weil alles, was solchen Deklarationen folgt, vom Compiler als ein Abschnitt betrachtet wird, der dann, wie gesagt, nicht länger als 100 Zeilen sein darf. Für manche Anwendung ist das aber keine allzugroße Einschränkung: Der Compiler, in Occam geschrieben, ist im Source-Code ungefähr 15.000 Zeilen lang und kann sich durchaus selbst übersetzen.

Der Interpreter stellt Occam-Funktionen zur Verfügung, die es erlauben, im Source-Level auf Atari-Bildschirm (natürlich nur im Textmodus), Tastatur und Diskettenlaufwerk zubenutzen. Damit ist zumindest für elementare Benutzerkommunikation gesorgt.

Der Assembler versteht den Inmos-Porta-kit-Assembler (und die dazugehörigen Standard-Mnemonics), der dem Transputer-Assembler sehr ähnlich ist.

Der Screen-Editor erlaubt es, Texte einzugeben. Dabei ist die komplexeste Funktion das Cut&Paste-Feature, aber es ist gerade alles da, was man für elementares Edieren von Programmtexten braucht. Übliche Assembler-Pseudo-Befehle gibt es natürlich auch, insgesamt ist der Assembler ungefähr so komfortabel wie K-Seka, der Kuma-Assembler für den ATARI ST.

Das Handbuch zu K-Occam hat ungefähr 70 Seiten. Es ist natürlich Englisch und sehr ausführlich, auch eine Einführung in den Portakit-Assembler ist enthalten. Für Occam-Neulinge wird nicht gesorgt; lediglich auf die Occam-Literatur und die Inmos-Originaldokumentation wird hingewiesen. Etwas ungeschickt ist auch, daß das Handbuch aus drei Handbüchern mit jeweils eigener Numerierung besteht, die zu einem Band zusammengebunden sind.

K-Occam ist geradezu ein archaisches Programmpaket. Bedienung und Arbeitsweise erinnern stark an die Computervorzeit, aber das Ganze funktioniert. Meines Erachtens ist dieses Programmpaket auch nicht zum Schreiben vollständiger Anwendungen gedacht sondern zur Einarbeitung in Occam.

Dieser Aufgabe ist es vollständig gewachsen. Man kann vernünftig und schnell mit dem System arbeiten. Wenn man dann die Grundkonzepte von Occam beherscht, ist hoffentlich Occam 2 lieferbar, zusammen mit einem vernünftigen Transputersystem, auf dem sich Occam dann auch so richtig austoben kann.

CS



Aus: ST-Computer 07 / 1988, Seite 135

Links

Copyright-Bestimmungen: siehe Über diese Seite