Objektorientiert geht's besser: Die erste Simula-Implementation auf dem ST

Alles, was man sagen kann, kann man in Algol sagen«, meinten früher Algol-Fans zu ihrer Programmiersprache. Simula ist eine Weiterentwicklung von Algol. Also sagen wir jetzt: »Alles was ich programmiere, programmiere ich in Simula.« Algol war eine der ersten höheren Programmiersprachen (1960). In Anlehnung daran wurden Sprachen wie Pascal und Modula-2 entwickelt. Simula entstand etwa 1967 in Norwegen als echte Erweiterung von AIgol. Warum Simula keine so breite Anhängerschaft gefunden hat, beruht auf mehreren Gründen: Erstens läßt der Name vermuten, daß dies eine spezielle Sprache für Simulationen ist. Das ist sie aber nicht. Sie läßt sich wie etwa Pascal für so ziemlich alle Anwendungen einsetzen und hat darüber hinaus noch Eigenschaften, die sie besonders für Listenverarbeitung, Textbehandlung usw. und eben auch für Simulationen geeignet machen. Ein weiterer Grund für die geringe Popularität ist, daß es lange Zeit das Gerücht gab, Simula sei sehr schwer zu erlernen. Nun ja, solange Sie nur einfache Sachen programmieren, ist Simula einfach. Wenn Sie aber unbedingt alles nutzen wollen, was Simula Ihnen zu bieten hat, dann wird es schon kompliziert.

Das Konzept von Simula

Damit Sie einen Eindruck von Simula bekommen, beschreiben wir im folgenden dessen Grundelemente, ohne auf Details einzugehen. In Simula werden Variablen ähnlich wie in Pascal oder C deklariert. Es gibt die vier einfachen Variablentypen »boolean«, »integer«, »real« und »character«. Eine Deklaration sieht folgendermaßen aus:

boolean gefunden; 
integer i,anzahl;

Boolsche Variablen haben die Werte »true« (wahr) oder »false« (falsch). Bei Zuweisungen und Ausdrücken finden zwischen real und integer automatische Typkonversionen statt. Von real nach integer rundet Simula. Felder können Sie mit beliebigen unteren und oberen Grenzen und auch mehrdimensional deklarieren. Ein Programm fängt mit »begin« an. Daraufhin folgen die durch Semikolons getrennten Deklarationen und anschließend die Anweisungen (statements). Anweisungen werden ebenfalls durch Semikolons getrennt. Als letzte Anweisung folgt »end« - ohne Semikolon, Punkt oder Modulname. Bedingte Anweisungen haben die Form »if x = 1 then i:=5;« oder »if x = 1 then i:=5 else i:=6;«. Wenn Sie zwischen »then« und »else« mehrere Anweisungen benötigen, so müssen Sie »begin« und »end« einklammern. Ebenso müssen Sie bei mehreren geschachtelten »ifs« die inneren »ifs« einklammern. Ansonsten ist es unklar, zu welchem »if« ein »else« gehört. Simula verfügt wie auch C über den sonst unüblichen bedingten arithmetischen Ausdruck. Dieser erlaubt Ihnen folgende Formulierung: »i: = if x = 1 then 5 else 6;«. Für Schleifen gibt es die sehr vielseitige For- sowie eine While-Anweisung. Im einfachsten Fall heißt es: »for i: =1 step 1 until 50 do... «. Weitere Formen sind etwa »for i:=1, 5, 100, 7 do...« und »for i:=i+l while x = 0 do...«. Die aus anderen Programmiersprachen her gewohnte Schleife »loop...exit...end« fehlt allerdings. Ebenso das »repeat...until«, das allerdings durch andere Schleifenkonstruktionen ersetzbar ist. BasicAnhänger finden in Simula auch ihr »goto« und die Sprungmarken wieder. Prozeduren, wie Sie sie von Pascal oder Modula-2 kennen, gibt es auch in Simula. Diese werden jedoch etwas anders deklariert. Besonders erwähnenswert ist die Art der Parameterübergabe. Da gibt es nämlich drei verschiedene Arten: die Übergabe eines Wertes einfacher Variablen (call by value) wie »integer« und »float«, eines Bezugs auf ein Objekt (call by reference) oder eines Variablennamens (cäll by name), durch den die Unterroutine auf die Variable den vollen Zugriff hat. Variablen- und Objekttypen weist Simula, solange Sie keine weiteren Angaben machen, automatisch die richtige Parameterübergabeart zu.

Nun kommen wir zu den Extras, die Sie nur in Simula finden. Texte sind in Simula nicht einfach nur Zeichenketten;
die stellen für Simula nur einfache Text konstanten dar. Simula verwaltet Texte in sog. Textobjekten, die neben dem Text auch einen Zeiger auf das aktuelle Zeichen im Text enthalten. Zu diesen Textobjekten gehören Operatoren, die auf die Texte wirken. So bekommen Sie mit »ch := zeile.getchar« das nächste Zeichen vom Text »zeile«, und der Zeiger auf den Text erhöht sich um eins. Mit »zeile.putint(i)« schreiben Sie ein Zeichen in den Text. Simula enthält Befehl um Texte zu vergleich en, zu zerstückeln, zu kopieren und zusammenzusetzen.. Dabei können auch mehrere Textobjekte auf dieselbe Zeichenkette verweisen. .

Programmiersprache mit Klasse

Ein weiteres Extra in Simula sind die Klassen. Es gibt hier den wichtigen Begriff eines Objekts. Ein Objekt ist ein eigenständiges Stück Programm, das seine eigenen Daten und Prozeduren besitzt. Es wird definiert durch eine »class declaration«. Im einfachsten Fall enthält ein Objekt nur Daten, vergleichbar etwa mit einer Struktur (struct) in C oder einem Record in Modula-z. Im vollen Umfang ist ein Objekt allerdings ein eigener Prozeß, der aktivier- und deaktivierbar ist. Ein Beispiel für die Arbeit mit Objekten ist die Klasse »person« mit Name, Alter und Bezug zu anderen Personen. Darmk formulieren Sie Anweisungen wie etwa »helga.heirate(klaus);«, um Beziehungen zwischen Objekten herzustellen, wie in diesem Fall das Heiraten zweier Personen. Ein solches Objekt der Klasse »person« können Sie in inneren Prozeduren erzeugen und dann im ganzen Programm herumreichen. Es gilt erst dann als nicht mehr vorhanden, wenn es keinen Bezug mehr zu ihm gibt. Um unnötige Objekte und andere freigegebene Daten aus dem Speicher zu entfernen, bedient sich das Laufzeit-System Simulas hin und wieder einer »garbage collection« (Speicher-Reorganisation). Deshalb hier eine wichtige Warnung: Wenn Sie über Assembler-Unterprogramme das TOS ansprechen, müssen Sie vorsichtig mit den Adressen von Simula-Daten sein. Nach der nächsten »garbage collection« stehen die Daten nämlich woanders, und die Adresse stimmt nicht mehr.

Die Simula-Umsetzung auf dem ST

Auf der Atari-Messe in Düsseldorf stellte das Simula Team der Universität Dortmund den Compiler der Öffentlichkeit vor. Er stammt vom Lund-SimulaSystem ab, das es auch für das VAX/Unix, für Minicomputer und größere Workstations gibt. Für den Apple Macintosh wurde es sogar umsonst an die Mitglieder der Vereinigung der Simula-Anwender (ASU) verteilt. Wir testeten den Simula-Compiler mit verschiedenen Programmen. Dies funktionierte ebenso problemlos wie einfache Testprogramme zum Lesen und Schreiben von Dateien und der Ausgabe von Informationen auf den Bildschirm. Schließlich übertrugen wir von einem Großrechner (BS2000 von Siemens) einen umfangreicheren Simula-Quelltext auf den ST, entwickelten ihn dort weiter, testeten ihn aus und schickten ihn an den Großrechner zurück. Dort konnten wir den Quellcode problemlos für den Großrechner neu übersetzen. Die Geschwindigkeit des Compilers und des fertigen Programms ist zufriedenstellend: Eine leere Schleife mit 250000 Durchläufen dauerte weniger als 14 s. Diese Ausführungszeit ist zwar nicht mit C oder Modula-2 vergleichbar, doch für eine derartig komplexe Hochsprache beachtlich. Zudem ist zu berücksichtigen, daß vor allem komplexere Programmierprobleme in Simula prägnanter zu formulieren und zu programmieren sind, und Ihnen letztlich Zeit und Mühe sparen.

Mini SK
Compiler 9 s 26 s
Assembler 6 s 38 s
Linker 23 s 36 s
Zusammen 38 s 100 s

Der Compiler erzeugt eine Binärdatei und eine Datei mit Attribut Informationen. Mit einem eigenen Linker erzeugen Sie daraus das ablauffähige Programm. Dieses hat dann allerdings eine stattliche Größe: Ein Minimalprogramm (beginnend) hat 52 KByte. Ein sinnvolleres Programm mit etwa 5 KByte Quellcode belegt 72 KByte. Die Programme hängen sich in fast alle Interrupt Vektoren ein, um Programmierfehler und Abstürze abzufangen. Dies verhindert allerdings, Accessories unter Simula zu programmieren. Da sind die Ideen der Dortmunder Entwickler gefragt.

Der vom Simula Team uns für den Test zur Verfügung gestellte Compiler ist noch eine Vorversion. Er erzeugt keine Binärdatei, sondern Matchinen-Code, den wir erst noch assemblieren müssen. Die Zeiten in der Tabelle beziehen sich auf die beiden eben erwähnten Programme mit unserer Testversion im Festplattenbetrieb:

Für systemnahe Anwendungen steht dem Programmierer eine Bibliothek mit allen BIOS-, XBIOS- und GEMDOS-Routinen zur Verfügung. Die Systembibliothek verwendet dabei das von anderen Sprachen, wie etwa C, gewohnte Parameterformat, so daß Sie bei Systemaufrufen nicht umdenken müssen. Eine Bibliothek für das VDI und das AES ist für Ende 1989 angekündigt. Die uns vorliegende Testversion arbeitete noch mit dem Kommando-Interpreter »Guläm«. Wer mit dieser Programmieroberfläche nicht zurechtkommt, kann problemlos andere Shells wie etwa die Craft-Shell installieren. Die dem Desktop nachempfundene grafische Programmierumgebung »Simdesk« ist laut Angaben des Simula Teams in Vorbereitung und soll ebenfalls Ende 1989 das Simula-Paket ergänzen.

Simula läuft auf jeder Konfiguration, mit 512 KByte bis zu 4 MByte Arbeitsspeicher und mit Laufwerk oder Festplatte. Eine Festplatte und 1 MByte RAM ist für eine wirklich ernsthafte Nutzung Simulas allerdings Voraussetzung. Das Simula-Paket kostet 198 Mark und enthält neben dem Compiler, dem Assembler und dem Linker auch ein Bedienungs- und ein Referenz-Handbuch, den Kommandozeilen-Interpreter Guläm bzw. die grafische Oberfläche Simdesk sowie die Bibliotheken für BIOS, XBIOS, GEM-DOS, VDI und AES. Das ReferenzHandbuch enthält die vollständige Sprachbeschreibung. Wer sich allerdings ausführlich und von Grund auf in Simula einarbeiten will, ist mit dem Buch »Einführung in die Programmiersprache Simula« (Vieweg, Prof. Günther Lambrecht) gut bedient. Einen Grundlagenartikel der objektorientierten Programmierung finden Sie zudem in unserem Expertenforum.

Simula ist sicherlich nicht für Assembler- und Höchstoptimierungs-Freaks geeignet. Doch jeder, der sich mit größeren und schwierigeren Programmierprojekten beschäftigt, sollte es mal mit Simula versuchen. Denn gerade im momentanen Aufbruch von strukturierten hin zu objektorientierten Programmiersprachen ist Simula auf dem ST besonders interessant. (ba)

Simula Team, Universität Dortmund/IRB, Postfach 500 500, 4600 Dortmund 50


(hb)
Aus: ST-Magazin 01 / 1990, Seite 26

Links

Copyright-Bestimmungen: siehe Über diese Seite