Softwave Modula-2: Ausbaufähiger Sprinter

Ein weiterer neuer Modula-2 Compiler kommt aus Berlin: Softwave Modula-2. Für DM 199 werden ein schneller Übersetzer und hochoptimierter Code geboten. In den Benchmarks setzte sich das System an die Spitze der Modula-Compiler.

Bild 1: So meldet sich Softwave Modula 2

Geliefert wird das Paket auf einer doppelseitigen Diskette zusammen mit einem Handbuch. Zur Installation des Systems müssen lediglich die Dateien von der Originaldiskette auf den gewünschten Massenspeicher kopiert werden. Die Festlegung der Ordnerstruktur erfolgt bei der unten beschriebenen Erzeugung der Informations-Datei für das eingebaute Make. Insgesamt belegt das System nur 350 KByte, so daß auch mit einem doppelseitigen Laufwerk sinnvoll gearbeitet werden kann.

Die Umgebung

Softwave-Modula ist ein integriertes System mit Editor, Compiler, Linker und Oberfläche in einem einzigen Programm von nur 120 KByte. Nach dem Programmstart erscheint ein Dialog, über den das komplette Entwicklungspaket gesteuert wird (Bild 1).

Das System enthält ein Make-Feature. Ähnlich wie bei dem von C-Compilern bekannten Utility werden aufgrund der Abhängigkeiten zwischen verschiedenen Modulen Compiler und Linker automatisch gestartet, wenn ein Programm erzeugt werden soll.

Wenn ein Modul A ein anderes B importiert, so muß A neu compiliert und gelinkt werden, falls der Definitionsteil von B verändert wurde. Ist die Implementation von B umgeschrieben worden, muß neu gelinkt werden. Ein Make kennt nun diese Abhängigkeit und führt alle notwendigen Compiler- und Linkerläufe automatisch aus.

Damit dies funktioniert, müssen alle Module auf Abhängigkeiten durchsucht werden. Dieser Vorgang wird mit dem Icon “Struktur” ausgelöst. Es läuft dann ein kleiner Dialog wie in Bild 2 ab.

Beim Bearbeiten der Suchpfade kann man wählen, ob die Dateien in den schon gesetzten Ordnern überprüft werden sollen, oder ob ein neuer Pfad hinzukommen soll. Je nach Auswahl werden dann alle darin vorkommenden Modula-Dateien auf Abhängigkeiten untersucht und das entsprechende Make-Info erzeugt.

Das Modul-Fenster im Hauptdialog spiegelt die festgestellte Modul-Struktur wider. Durch Anklicken eines Modulnamens wird dieser und alle damit zusammenhängenden Module normal dargestellt. Es ist also sofort ersichtlich, welche Dateien zu einem Programmierprojekt gehören. Neben den Modulnamen wird angezeigt, ob die entsprechenden Dateien vorhanden, veraltet oder fertig bearbeitet sind. Definitions- und Implementationscode hält Softwave-Modula in einer Datei mit der Endung “.OBJ”.

Bild 2: Bearbeiten einer MAKE-Datei

Zu Bearbeitung einer Datei im Editor wird das gewünschte Modul ausgewählt und mit der Maus auf den .MOD- oder .DEF-Teil geklickt. Ein Anklicken des “Editor”-Icons startet diesen, was aufgrund der Integration blitzschnell ohne Diskettenzugriff funktioniert.

Die Oberfläche ist konzeptuell gut geraten; ein paar Maus-Operationen sind unhandlich. Insgesamt ist das System einfach und sinnvoll zu bedienen.

Editor

Der Editor ist sehr spartanisch programmiert, bietet jedoch alle notwendigen Funktionen (Bild 3). Zu den normalen Ediermöglichkeiten, wie Zeilen löschen oder Blockoperationen, kommen einige speziell auf Modula zugeschnittene Features hinzu.

Die Cursorpositionierung oder Blockdefinition kann mit der Maus vorgenommen werden. Die Kommandos werden über die Sondertasten auf der Tastatur und den Funktionstasten aufgerufen. Eine Menüleiste soll erst in der nächsten Version implementiert werden.

Über die Escape-Taste stehen einige Makros zur Verfügung, wie Sie auch im Bild sehen können. Mit Esc-c wird z.B. automatisch das Gerüst einer CASE-Anweisung in den Text eingefügt. In der aktuellen Version sind die Makros fest eingebaut; sie sollen in einer späteren Version auch veränderbar sein.

Der Übersetzer wird vom Editor mit F10 gestartet. Da der Compiler aufgrund der Integration nicht geladen werden braucht und der Sourcetext schon im Speicher steht, geht die Übersetzung sehr schnell.

Beim Auftreten eines Fehlers kehrt das System in den Editor zurück, setzt den Cursor an die Fehlerstelle und zeigt eine entsprechende Meldung an. Der normale Arbeitsablauf bei anderen Systemen, Editor aufrufen - Programmtext verändern - Editor verlassen - Compiler aufrufen, wird also auf das wiederholte Drücken von F10 reduziert.

Bild 3: Der Editor

Compiler

Der Übersetzer ist ein Zwei-Pass-Compiler nach dem neuesten Modula-Standard. Als Besonderheit kann er Code für die gesamte 68000-Prozessorfamilie erzeugen. In der aktuellen Version sind aber noch nicht alle Möglichkeiten vollständig implementiert und ausgetestet.

Die Compileroptionen sehen Sie in Bild 4. Dieser Dialog, der über das Icon “Options” aufgerufen wird, ist momentan nicht funktionsfähig, da die gewählten Voreinstellungen noch nicht an den Compiler übergeben werden. Sie lassen sich jedoch auf die übliche Weise als Compileranweisungen in den Sourcetext einbetten. Die Optionen beinhalten die bekannten Schalter für die Überlauf- und Bereichsprüfungen. Mit W und L kann die Länge von Unterbereichs und Aufzählungstypen und Mengen festgelegt werden.

Ein besonderes Bonbon ist die ($R) Option: Mit ihr sind jetzt auch in Modula die von C bekannten Registervariablen möglich. Wird bei der Variablendeklaration diese Option gesetzt, erzeugt der Compiler einen Code, der die Variable in einem Maschinenregister hält. Dadurch laufen Berechnungen erheblich schneller ab, da keine Speicherzugriffe für diese Daten mehr nötig sind. INTEGERs und CARDINALs werden als Langworte berechnet. Mit SHORTINT und SHORTCARD stehen die entsprechenden 16-Bit Typen zur Verfügung. REALs sind vier und LONGREALs acht Bytes lang.

Die Sprache wurde um den Typ-STRING erweitert, der allerdings nur als formaler Parameter oder Ergebnistyp verwendet werden darf. Darauf sind die Funktionen LEN, POS und SEG sowie die Vergleichsoperationen implementiert. Ob diese Erweiterung notwendig war, ist zu bezweifeln, da es ja auch das standardisierte String-Modul gibt.

Eine zweite Erweiterung ist die Funktion FORM, die eine entfernte Verwandtschaft zum writeln von Pascal nicht leugnen kann. Sie formatiert Werte oder Texte und liefert einen Text als Ergebnis. Der Vorteil gegenüber dem normalen M2Conversions-Modul liegt darin, daß fast beliebig getypte Objekte als Parameter verwendet werden können.

Der erzeugte Code ist ungemein schnell. Softwave generiert unter den bisher getesteten Modula-Systemen eindeutig den schnellsten Code (Tabelle). Besonders flink laufen Prozedur-aufrufe und Parameterübergaben. Ebenfalls sehr gut übersetzt werden die INTEGER-Operationen; hier nimmt Softwave den zweiten Platz hinter Jefferson ein. ARRAY-Zugriffe sind ebenfalls flott implementiert.

Der Compiler versucht einige Optimierungen des erzeugten Codes; ein Vorgehen, das vollen Erfolg bringt. Wer sich näher mit der Codegenerierung bei Compilern beschäftigt, weiß, daß es sehr viele Ansatzpunkte für Optimierungen gibt. Softwave ist endlich ein System, das hier einen Schwerpunkt setzt. Fast noch erstaunlicher als die gemessenen Zeiten ist die Tatsache, daß bei den anderen Systemen offensichtlich sehr wenig Optimierung stattfindet.

Die in Assembler implementierten String-Routinen hängen auch den bisherigen Spitzenreiter Megamax ab. Da dort ebenfalls direkt in Assembler gearbeitet wurde, muß der Vorsprung auf einer besseren Parameterübergabe beruhen.

Bei Fließkommaabrechnungen fällt das System etwas ab. REALs werden in Ausdrücken vor der Auswertung in LONGREALs umgewandelt, so daß die hier gemessenen Zeiten eher untypisch sind. In der Regel laufen REALs langsamer als LONGREALs mit doppelter Genauigkeit.

Insgesamt also der bisher schnellste Modula-Code. Für die nächste Version sind sogar noch weitere Optimierungen angekündigt, die den Geschwindigkeitsvorsprung noch ausbauen dürften.

Die Arbeitsgeschwindigkeit des Compiler ist ebenfalls überragend und mit den getesteten Klein-Programmen höher als bei den anderen Modula-Systemen. Durch die Integration entfällt das Laden des Compilers. Angaben wie “Compiler übersetzt x Zeilen pro Sekunde” sind meiner Meinung nach wenig aussagekräftig, da sie abhängig vom übersetzten Programm sind. Die enorme Compiliergeschwindigkeit ist jedoch offensichtlich.

Modula-2 Benchmarks

Nr. TDI V3.0 Jefferson Megamax Softwave testet ...
1 0:07 0:07 0:07 0:04 Prozeduraufruf
2 1:42 1:33 2:59 1:35 Addition
3 1:21 1:18 1:58 1:20 Increment
4 1:47 1:38 2:59 1:40 Additionsoptimierung
5 1:27 1:23 2:08 1:25 Increment als Vergleich
6 2:09 1:57 3:48 2:01 INTEGER-Addition
7 2:09 1:57 3:48 2:01 CARDIN AL-Addition
8 1:11 1:18 1:42 1:05 FOR-Schleife
9 1:21 1:02 1:42 1:05 REPEAT-Schleife
10 1:21 1:18 1:57 1:20 WHILE-Schleife
11 1:04 0:54 1:15 0:38 INTEGER-Parameter
12 1:04 0:54 1:17 0:38 INTEGER VAR-Parameter
13 1:06 0:59 2:19 0:33 RECORD-Parameter
14 0:34 0:30 0:41 0:20 RECORD VAR-Parameter
15 0:49 0:49 1:33 0:42 Konstanten-Optimierung
16 0:51 0:51 1:33 0:44 Konstanten-Optimierung
17 1:28 1:26 2:06 1:19 Expression-Optimierung
18 1:42 1:22 1:59 1:15 Expression-Optimierung
19 0:37 0:36 0:55 0:30 Zwischenergebnis-Optimierung
20 0:37 0:35 0:55 0:30 Zwischenergebnis-Optimierung
21 0:09 0:11 0:13 0:09 IF-Statement
22 0:13 0:13 0:16 0:11 IF durch GASE ausgedi tickt
23 0:38 0:33 0:41 0:28 CASE-Statement
24 0:40 0:39 1:03 0:38 CASE durch IF ausgedrückt
25 0:47 1:03 2:09 REAL-Arithmetik
26 2:05 1:32 2:18 'LONGREAL-Arithmetik
27 1:52 5:42 REAL-Library
27a 5:39 2:35 35:40 LONGREAL-Library
28 1:21 1:21 0:40 0:30 String-Library
29 2:10 2:07 2:13 1:48 ARRAY-Zugriffe
30 0:09 0:10 0:17 0:19 RECORD-Zugriffe

Alle Zeiten mit time-Kommando von Guläm gemessen

Tabelle: Ein Compilerlauf

Linker

Der Linker wird wie schon beschrieben automatisch beim Make-Vorgang aufgerufen. Auch hier fällt das Laden von Diskette weg. Der Binder arbeitet wie der Compiler schneller als die Konkurrenz.

Die Länge der erzeugten Programme ist ähnlich wie beim TDI-Compiler. Neben der Optimierung des Linkers selber wirken sich hier auch die Codeeinsparungen aus, die der Compiler erbringt.

Bibliotheken

Bei den mitgelieferten Bibliotheksmodulen schneidet das Softwave-System schlecht ab. Die bei Wirth vorgeschlagenen Standard-Module sind implementiert, wurden aber nicht erweitert. Wer Wirths Vorschlag kennt, weiß, daß somit nur das absolut notwendige vorhanden ist. Der katastrophale Benchmark 27a für die MathLibO beruht darauf, daß sie nach dem Modula-2-Buch von Dal Chin/Lutz/Risse implementiert wurde. Die dort verwendeten Verfahren zur Berechnung höherer Funktionen wie Sinus etc. sind extrem langsam. In der vorliegenden Version waren außerdem noch zwei Fehler in dem Modul vorhanden.

Die VDI- und AES-Bibliotheken lehnen sich an die normalen Bindings für C-Systeme an. Damit macht das Umschreiben von C-Programmen keine Probleme mehr, da die Funktionsnamen praktisch identisch sind. Bei GEM-Funktionen ist die Übergabe eines Handles nicht vorgesehen. Daß dadurch Schreibarbeit gespart wird, stimmt zwar, allerdings werden so ausgefeiltere GEM-Programme, die vielleicht GDOS benutzen unmöglich.

Weitere Module, z.B. für Textfenster, werden nicht mitgeliefert. Im Vergleich mit TDI mag der Bibliotheksumfang zwar gleich sein, gegenüber Megamax vermisse ich doch einiges. Die Bibliotheken bieten leider nicht sehr viel Unterstützung und für ernsthafte Anwendungen muß der Programmierer viele Library-Module, die in anderen System mitgeliefert werden, erst noch formulieren. Die Bibliotheken sind der größte Schwachpunkt des Softwave-Modula.

Bild 4: Die Editor-Menüs

Handbuch

Das 160-seitige Handbuch kommt in einem Ringbuchordner und ist mit einem Matrixdrucker erstellt worden. Im ersten Abschnitt wird die Bedienung des Systems erläutert. Bei der Beschreibung des Übersetzers sind neben den Compiler-Optionen auch schon Informationen zu Registerbenutzung und Parameterübergabe-Mechanismus zu finden.

Im nächsten Kapitel wird eine (kurze) Einführung in Modula-2 gegeben, die natürlich kein Lehrbuch ersetzen kann. Sehr genau wird dann auf die einzelnen Standardtypen und die darauf definierten Operationen eingegangen. Die meisten Probleme werden wohl mit Hilfe dieses Teils zu lösen sein.

Die folgenden 50 Seiten listen die Definitionsmodule der mitgelieferten Bibliotheken auf, wobei leider kaum Kommentare zu finden sind.

Im Anhang wird das Format der .OBJ-Dateien detailliert beschrieben. Alle Informationen für eigene Manipulationen an den Codedateien sind vorhanden. Auf eine Literaturliste zu Modula-2 schließen sich die Fehlermeldungen Compilers an. Auch hier fehlen einige Kommentierungen über die wahrscheinlichen Fehlerursachen und deren Behebung, wie sie bei anderen Systemen üblich sind. Insgesamt bietet das Handbuch zwar alles Nötige, an vielen Stellen könnte es jedoch ausführlicher sein und sollte auch optisch ansprechender gestaltet werden.

Support

Da Softwave-Modula in Berlin entwickelt wurde, hat der Anwender natürlich den Vorteil im Problemfall kostengünstig beim Entwickler anzufragen.

Bei “verbesserten” Versionen, also Fehlerbereinigungen und kleinen Erweiterungen, stehen Updates gegen eine Gebühr von DM 20 zur Verfügung. Falls das System erweitert wird, sollen registrierte Besitzer der alten Version einen Rabatt erhalten.

Das Paket wird laufend gepflegt und weiterentwickelt, so daß mit einer guten Unterstützung der Anwender gerechnet werden kann.

Zukünftiges

Mehrmals habe ich in dieser Besprechung auf die nächste Version des Systems Bezug genommen. Zum Test stand die Version n.0 zur Verfügung; bei Erscheinen dieses Artikels wird ein verbessertes Paket fertiggestellt sein, das die genannten Erweiterungen enthält. Zudem soll ein Debugger implementiert werden.

Die angekündigten Verbesserungen lassen eine Qualitätssteigerung erwarten und sind ein Zeichen sinnvoller Produktpflege. Über eine neue Version werden Sie in einem Vergleich aller Modula-Systeme für den ST unterrichtet.

Fazit

Der Editor ist sehr spartanisch geraten. Einige Funktionen werden erst in der nächsten Version implementiert. Eine Möglichkeit zur Einbindung anderer Editoren wäre wünschenswert.

Der Compiler läuft ebenso wie der Linker mit sehr hoher Geschwindigkeit. Der erzeugte Code ist kurz und schlägt aufgrund der Optimierung die Konkurrenz deutlich.

Die Bibliotheken sind im Vergleich mit den anderen Modula-System zu knapp geraten und bieten keinen größeren Komfort. Das Handbuch müßte überarbeitet werden und kann noch nicht mit der Konkurrenz mithalten. Softwave-Modula bietet eine Spitzen-Compiler mit dem bisher besten Code. Die sonstige Ausstattung sollte verbessert werden; bei einem Ausbau von Editor und Bibliotheken braucht das System - auch im Hinblick auf den Preis - keinen Vergleich mit der Konkurrenz scheuen.


Robert Tolksdorf
Aus: ST-Computer 06 / 1988, Seite 168

Links

Copyright-Bestimmungen: siehe Über diese Seite