Willkommen beim Modula-2 Kurs in der ST-Computer. Warum ein Kurs und für wen?
Modula-2 hat sich in der letzten Zeit als zweite Entwicklungssprache nach C auf dem ATARI ST etablieren können. Nicht nur die Flut der Compiler, sondern auch deren Qualität machen Modula-2 zu einer Sprache, die für ST-Benutzer immer größere Bedeutung erlangt. In den Ausgaben des vergangenen Jahres konnten Sie Tests der Systeme von TDI, Jefferson, Megamax, Softwave und SPC lesen - und alle zeigten sich als brauchbare Pakete.
Modula-2 ist von den auf Mikros verbreiteten Sprachen die modernste, und das nicht nur aufgrund des Entwicklungsdatums. Konzepte wie Modularisierung und Parallelität bei gleichzeitiger Maschinennähe sind als Merkmale einer Sprache inzwischen unabdingbar. Weder C noch Pascal können hier befriedigen; das Wort Basic braucht man bei der Auswahl einer Hochsprache auch in dieser Hinsicht nicht in den Mund zu nehmen.
Das große Argument der C-Fans, man könne allein mit dieser Sprache das letzte Bit im abgelegensten Speicherwinkel umdrehen, können auch Modula-Programmierer für sich in Anspruch nehmen. Und dabei bleiben Modula-Programme lesbar und sind nicht von Sonderzeichen durchsetzt.
Als Weiterentwicklung von Pascal bietet Modula konzeptuelle Neuheiten, die auch durch das Zauberwort “Turbo” nicht aufgewogen werden können. Wenn man den Vergleich mit Basic überhaupt anstellen will, erkennt man auf den ersten Blick, daß Programme, die über simple Utilities hinausgehen, nur mit einer strukturierten Hochsprache und Modularisierung realisierbar sind - alles Dinge, bei denen BASIC versagt.
Auch wenn Modula aus wissenschaftlichem Blickwinkel schon langst wieder veraltet ist, wird es bei den auf Mikros verbreiteten Sprachen schwer, Argumente dagegen zu finden.
Für wen ist Modula-2 und damit dieser Kurs interessant? Nun, man könnte Hobby-Programmierer ein teilen in Anfänger, die grundlegende Programmierkonzepte und Denkweisen kennenlernen wollen, und “alte Hasen“, die schon Tausende von Programmzeilen eingetippt haben.
Der Anfänger ist bei Modula-2 aufgrund der Verwandtschaft mit Pascal sehr gut aufgehoben. Diese Sprachen lassen nur einen sauberen Programmierstil zu. Alles muß genau formuliert und bedacht werden. Versuch und Irrtum-Methoden wie bei Basic sind ausgeschlossen, ebenso ist das Tricksen kein Konzept wie bei C.
Der Fortgeschrittene, der lokale Variablen und Rekursion im Traum beherrscht, bekommt mit Modularisierung und Parallelität mächtige Werkzeuge in die Hand, die in keiner der weiter verbreiteten Sprachen zu finden sind. Ihm können sich neue Programmierwelten mit völlig anders gestalteten Algorithmen und einer neuen Entwicklungsweise auftun.
Und das sind die zwei Gruppen, an die sich dieser Kurs wendet. Am Beginn werden für die Einsteiger die grundlegenden Konzepte der Hochsprachen stehen. Stichworte hierzu sind z.B. Deklarationen, Prozeduren, lokale Variablen oder Rekursion. Benutzer anderer Hochsprachen werden zunächst die syntaktischen Unterschiede zu ihrem Lieblingssystem feststellen und dann neue Konzepte ken-nenlemen, die sicher eine Fülle von Programmideen auslösen.
Was Sie zum Lernen brauchen, ist natürlich ein Modula-System. Fast alle verfügbaren Pakete haben Sie schon in Tests kennengelernt und dabei vielleicht auch bemerkt, daß es erstaunlich preiswerte Produkte gibt. Sicher wird eines der Angebote Ihren Bedürfnissen entsprechen. Ich werde in diesem Kurs nur Standard Modula verwenden, so daß alle Beispiele auf allen Compilern lauffähig sind.
Wenn in den einzelnen Artikeln Fragen offen bleiben oder Sie Schwierigkeiten haben, fragen Sie unbedingt nach! Soweit möglich, werden Leserbriefe in einer eigenen Rubrik oder persönlich beantwortet.
Ihre Anregungen sollen vielleicht auch in ein Buch einfließen, das aus dieser Artikelserie entstehen soll. Dabei wird erheblich mehr Platz für Beispiele sein und auch auf Nebenaspekte eingegangen werden.
In dieser ersten Folge, die notwendigerweise viel Vorrede enthält, werden Sie noch nicht richtig programmieren. Lernen Sie zunächst die Geschichte von Modula-2 kennen.
Niklaus Wirth, der Entwickler von Pascal, begann im September 1977 an der Eidgenössischen Technischen Hochschule (ETH) in Zürich ein Projekt, in dem eine Workstation und eine dazu passende Sprache entwickelt werden sollte. Diese Sprache war Modula-2 und sollte für die komplette Software des neuen Rechners eingesetzt werden. Die Anwendung reichte dabei vom Betriebssystembau bis hin zu Editoren oder Zeichenprogrammen.
1979 stand dann ein lauffähiger Compiler zur Verfügung: Modula-2 hatte das Licht der Computerwelt erblickt. Der sogenannte ETH-Compiler ist für Entwickler als Sourcecode zur Übertragung auf andere Rechner erhältlich. Auf dem ATARI ST sind TDI Jefferson- und SPC Modula direkte Portierungen dieses Systems.
Der erste Modula-2-Compiler, der auf Mikros auch für Hobby-Anwender erhältlich war, lief unter dem UCSD-Sy-stem auf dem Apple II. Für den Freak Computer Gepard war Modula-2 das, was für einen C-64 Basic ist: die mitgelieferte Standardsprache. Das Gepard-Betriebssystem ist ebenfalls in Modula programmiert. Den gleichen Compiler gibt es heute als Megamax-Modula für den ST.
Für den Apple Macintosh gibt es eine Portierung des ETH-Systems auch als Public-Domain, leider konnte ich für den ATARI ST nichts Vergleichbares finden.
Die Sprache selber wurde in zwei Revisionen verändert. Dabei war jeweils die Modula-Bibel “Programming in Modula-2” von Niklaus Wirth als Sprachdefinition maßgebend. Das Buch, vom Springer Verlag auch in Deutsch erhältlich (Niklaus Wirth: Programmieren in Modula-2, 3. Auflage, ISBN 3-540-13301-1). Auch wenn es kein Lehrbuch ist und als Buch keine Besonderheiten bietet, ist es jedoch als Referenz so unerläßlich, wie bei C der Kernigham/Ritchie oder für Prolog die Clocksin/Mellish-Definition.
Wenn Sie sich wundem, wo Modula-1 bleibt: Für Experimente mit Parallelprogrammierung entwickelte Wirth die Sprache Modula, über die es jedoch nur universitäre Unterlagen gibt, und die für Hobby-Anwender weder interessant, noch verwendbar ist - eben eine Experimentalsprache. Da die Ergebnisse weiterverwendet wurden, übernahm Wirth den Namen für die Universalsprache Modula-2.
Auch wenn es historisch nicht korrekt ist, meint heute jeder Modula-2, wenn er Modula sagt oder schreibt. Und natürlich meine auch ich keine Experimentalsprache, wenn ich mich auf Modula beziehe. Für den ST war TDI das erste Modula-System, und es blieb lange Zeit das einzige.
Erst in diesem Jahr kamen weitere Systeme auf den Markt. Und wenn Sie eines davon auf Ihrer Diskette oder Festplatte haben, können Sie jetzt das erste Modula-Programm eintippen, an dem Sie die grundsätzliche Struktur der Sprache kennenlernen sollen und einen kleinen Eindruck vom Aussehen eines Modula-Programms bekommen können. Sie finden es als Listing 1.
Das Programm hat keine große Funktionalität, dennoch ent hält es schon die hauptsächlichen Elemente eines Modula-Programms. Es handelt sich um das klassische Einführungsprogramm, das die Meldung “Hello world!” auf dem Bildschirm ausgeben soll. Schauen wir uns an, was wir haben.
“MODULE HelloWorld" ist der Programmkopf. Durch ihn wird festgelegt, daß es sich um ein Programm handelt, das den Namen “HelloWorld" trägt. Alles, was nun bis zum Gegenstück "END HelloWorld” folgt, soll vom Compiler übersetzt werden. In der Modula-Syntax wird dies “Compilation Unit”, also “Übersetzungsstück”, genannt. Einfacher gesagt, wird durch diese Klammerung der Programmtext begrenzt und durch den Namen benannt.
Als nächstes folgt ein Import. Dahinter steht ein grundlegendes Konzept, die Modularisierung. Für den Anfang denken Sie sich einfach eine Bibliothek, die den Namen “InOut” hat, und aus der die vorprogrammierten Prozeduren “WriteString”, “WriteLn” und “Read” geholt werden. Sie werden später noch sehen, daß Module erheblich mehr sind als simple Bibliotheken, für den Anfang soll diese einfache Erklärung reichen. In den Beispielprogrammen werden Sie immer wieder Importe finden, bevor ich zu dem Konzept komme.
Die nächste Einheit in dem Programm ist eine Variablendeklaration. Eine Variable ist etwas, was einen Wert aufnehmen kann, und was in Modula einen bestimmten Typ hat. In diesem Fall handelt es sich um den Typ “CHAR”, der einem Zeichen entspricht, “ch” ist also ein Kästchen, in das ein Zeichen gelegt werden kann.
MODULE HelloWorld;
FROM InOut IMPORT WriteString, WriteLn, Read ;
VAR ch:CHAR;
BEGIN
WriteString('Hello world !');
WriteLn;
Read(ch);
END HelloWorld.
Listing 1
Nun beginnt das eigentlich Programm. Alles zwischen "BEGIN" und “END" bildet einen Block, der ausgeführt werden soll. In dem Block befinden sich hier drei Anweisungen. Eine Anweisung ist etwas, was der Rechner ausführen soll. In diesem Fall sind es Anweisungen, die eine Zeichenkette ausgeben, einen Zeilenvorschub auf den Bildschirm schicken und ein Zeichen einlesen. “Read(ch);" ist die Anweisung, ein Zeichen von der Tastatur zu holen und es in die Variable “ch" zu packen.
Diese Beschreibung geht natürlich nicht in die Tiefe und läßt zuviel offen, als daß Sie nun ein eigenes Programm schreiben könnten. Denn jedem der Themen, die hier nur in einem Absatz angesprochen sind, sollen und müssen eigene Kapitel gewidmet werden.
In der nächsten Folge werden Sie die Regeln für Bezeichner also Namen, in Modula kennenlernen und etwas mehr über Variablen, Deklarationen und Typen erfahren. Weiterhin geht es um eine erste Art von Anweisungen, die Zuweisungen. Sie könnten damit Ihr erstes Modula-Programm ohne Vorlage schreiben.
Zum Konzept dieser Serie gehören auch Hausaufgaben. Und selbst wenn es sich hier nur um einen Vorspann handelt, sollten Sie in der Zwischenzeit etwas tun. Es gibt drei Aufgaben für Sie:
Die erste Aufgabe ist nicht sehr anstrengend, erfordert allerdings vielleicht etwas Verzicht. Vergessen Sie bitte die BASIC Programmierung. Vergessen Sie Variablen, die Sie einfach verwenden, ohne sie vorher zu deklarieren. Vergessen Sie die Trial-and-Error-Methode, einfach mal ein Programm zu schreiben und die Fehler vom Interpreter suchen zu lassen. Modula-2 ist eine Hochsprache, die Konzepte benutzt, die in BASIC nicht vorhanden sind, und eine andere Programmierung bewirken.
Wenn Sie sich von diesem Kulturschock erholt haben, fangen Sie bitte mit der zweiten Hausaufgabe an: Lesen Sie die Anleitung zu Ihrem Modula-System. Es nutzt Ihnen wenig, wenn Sie ein Programm zwar eintippen können, dann aber nicht wissen, wie Sie es übersetzen sollen. Handbücher sind da. um gelesen zu werden. Ich kann in diesem Kurs zwangsläufig nicht auf die Besonderheiten bestimmter Systeme eingehen.
Und dann können Sie mit der dritte Aufgabe beginnen, nämlich das kleine Beispielprogramm einzutippen, übersetzen zu lassen und es einmal auszuführen. Wenn das funktioniert hat. versuchen Sie einmal, das Programm so zu ändern, daß es anstelle von “Hello world!” den Text “Hallo Welt!” ausgibt.