Neuer Star: SPC Modula-2

Das neueste Modula-2 System kommt von advanced applications Karlsruhe und heißt SPC-Modula. Die Portierung des Wirthschen ETH-Compilers verspricht für DM 348,- “Turbo-Komfort” und zeigt sich im Test der Konkurrenz überlegen.

Zur Installation des Systems muß der Ordner \SPC der Originaldiskette kopiert werden. Bei Verwendung von mehreren Diskettenlaufwerken lassen sich die Dateien auch verteilen, was im Handbuch für jede Hardware-Zusammenstellung beschrieben wird.

Insgesamt belegt das System komplett knapp 520 KiloByte, so daß problemlos mit einem doppelseitigen Laufwerk gearbeitet werden kann.

Shell: Klein aber fein

Die Arbeitsumgebung von SPC-Modula benutzt zwar GEM, ist aber eigentlich tastaturorientiert. Wie Sie in Bild 1 sehen, stellt sie einige Kommandos zur Verfügung, die mit jeweils einem Kommandobuchstaben aufgerufen werden.

Dabei ist die Shell etwas “intelligent” aufgepeppt. In eckigen Klammem wird jeweils ein Kommandovorschlag gemacht, der mit <Return> bestätigt werden kann. Auch in File-Select-Boxen ist der Name der gerade bearbeiteten Datei vorausgewählt.

Wenn die Programmentwicklung auf herkömmliche Weise Edit-Compile-Run abläuft, sind zur Bedienung des Systems eigentlich nur Bestätigungen mit <Retum> notwendig.

Die Kommandos zum Aufruf von Editor, Compiler, Linker und Debugger sowie zum Start eines Programms haben eine File-Select-Box zur Folge, in der der wahrscheinlich gewünschte Dateiname schon vorgewählt ist. Mit “I” und “J” können Übersetzer und Editor resident im RAM gehalten werden, so daß der Turn-Around ohne Massenspeicher-Zugriff abläuft.

Weitere notwendige Shell-Funktionen sind über Hilfsprogramme vorhanden, die extra gestartet werden müssen. Sie lassen sich aber wohl über den mitgelieferten Source-Code auch integrieren. Zur Installation des Systems auf eigene Ordnerstrukturen lassen sich in Shell-Variablen Suchpfade mit “SETPATHS” festlegen (Bild 2).

Die restlichen Shell-Variablen werden mit “SETENV” festgelegt (Bild 3). Wie schon an den Namen der Variablen zu erkennen, wird mit ihnen das Verhalten des gesamten Systems gesteuert. Beim Verlassen der Shell werden alle Einstellungen abgespeichert, so daß man bei der nächsten Sitzung die Umgebung im gleichen Zustand wiederfindet. Eine praktische Sache, zudem auch die Positionen aller Fenster gesichert werden und man nicht jedesmal den Desktop nach seinem Geschmack einrichten muß.

Die Shell ist zwar keine typische GEM-Shell, aber sehr durchdacht. “Klein aber fein” unterstützt sie die Programmentwicklung besser, als man ihr auf den ersten Blick ansehen mag. Was fehlt, sind Kommandos für alltägliche Dinge wie Inhaltsverzeichnis oder Disketten formatieren. Insgesamt ist es jedoch erstaunlich, wie Weniger zu Mehr wird, wenn die Details optimal gelöst werden.

Editor mit Bonbons

Der mit “E” von der Shell aufgerufene Editor arbeitet unter GEM und ist speziell auf Modula abgestimmt. In den Menüs (Bild 4) finden sich die herkömmlichen Operationen für Dateien und Blöcke. Mit dem Clipboard lassen sich größere Manipulationen an den Texten einfach durchführen. Fehlermeldungen werden automatisch nach Drücken von F8 angezeigt. Der Editor setzt den Cursor auf die entsprechende Stellung und gibt eine Klartextmeldung an.

Der Sourcetext kann auf Wunsch mit Zeilennummern angezeigt werden, und automatische Einrückung wird ebenfalls unterstützt. Der Leckerbissen des Editors verbirgt sich jedoch unter “LangSupp”.

Bild 4: Die Editor-Menüs

Ist dieser Modus eingeschaltet, werden alle Eingaben überwacht. Worte, die mit Kleinbuchstaben anfangen, werden in Modula-2 Schlüsselworte umgesetzt, sobald sie als solche erkennbar sind. Für die Eingabe von “IMPLEMENTATION MODULE” reichen schon die Buchstaben “impl”; für “PROCEDURE” die Eingabe von “pr”, also eine ungeheuer hilfreiche Sache. Falls die Unterstützung stört, weil man vielleicht eine Variable namens “pr” verwenden will, läßt sich der Modus schnell mit der <Help>-Taste umschalten.

Über den Zehnerblock können Textmakros eingegeben und verwendet werden. Die Tastatur wird übrigens wie auch in der Shell umdefiniert: Anstelle der Umlaute erscheinen die eckigen und geschweiften Klammem, die in Modula-Programmen ja häufiger Vorkommen können.

Ein weiteres Feature unterstützt die Programmdokumentation. Beim Schließen eines Textes sucht der Editor in den ersten fünf Textzeilen nach der Zeichenkette “Date : “. Findet er sie, fügt er danach das aktuelle Datum und Uhrzeit ein, so daß jede Source automatisch dokumentiert wird.

Der auf Modula zugeschnittene Editor ist sehr praktisch. Die Sprachunterstützung ist vielleicht gewöhnungsbedürftig, erspart mit einiger Übung aber sehr viel Tipparbeit und simple Syntaxfehler.

Compiler mit schnellem Code

Der Compiler wird mit “C” von der Shell aus aufgerufen. Beim Übersetzerlauf werden die gesetzten Optionen, gelesene und geschriebene Dateien angezeigt sowie statistische Angaben gemacht (Bild 5). Der Compilerlauf erinnert an Jefferson-Modula, denn beide haben den gleichen Stammvater, den originalen ETH Zürich Compiler von Wirth. Der Compiler arbeitet mit einem Pass und implementiert Modula nach dem neuesten Wirth-Standard. Optionen und Suchpfade bei der Übersetzung werden wie oben beschrieben durch Shell-Variablen übergeben. Es ist auch möglich, den Compiler im Stapelbetrieb arbeiten zu lassen, indem er eine Liste aller zu übersetzenden Dateien als CMD-Datei erhält.

Bild 2: Das Setzen der Suchpfade

SPC enthält alle Standard-Datentypen und bietet jeweils die normale und doppelte Größe an, z.B. INTEGER mit 16 und LONGINT mit 32 Bit Länge. Da es sich eben um den ETH-Compiler handelt, sind alle als Standard definierten Sprachelemente und Funktionen vorhanden.

Zu den Benchmarks, die Sie in Bild 6 sehen, ist vorweg zu bemerken, daß die Zahlen nicht ganz vergleichbar sind. Da SPC keine Stand-Alone-Programme erzeugen kann (darauf kommen wir später noch genauer), war die bisherige Meßmethode mit der Public-Domain-Shell Guläm nicht anwendbar. In die Programme wurde daher eine Zeitmessung mit dem 200-Hertz Zähler des STs eingefügt. Dadurch sind die angegebenen Zeiten etwas zu niedrig, da die Initialisierung des Laufzeitsystems nicht mitgemessen wird. Der Vergleich wird aber nicht unfair, weil die dafür aufgewandte Zeit sehr gering sein wird.

Der Compiler erzeugt sehr schnellen Code. Er kann sich mit den bisherigen Spitzenreitern Jefferson- und Softwave Modula messen. Bei den arithmetischen Ganzzahloperationen wird der schnellste Code erzeugt.

Die Schleifenkonstrukte werden bis auf die FOR-Schleife am schnellsten ausgeführt. Prozeduraufrufe und Parameterübergabe laufen flink, sind jedoch bei Softwave noch schneller. Ausdrücke werden nicht optimiert, dafür ist eine effiziente Behandlung von Zwischenergebnissen meßbar. Die Fallunterscheidungen mit IF und CASE ergeben die bisher schnellsten Übersetzungen. Bei REAL-Berechnungen mit einfacher Genauigkeit stellt SPC einen neuen Rekord auf; bei LONGREALs bleibt Megamax allerdings ungeschlagen. Die Ma-thLib rechnet mit LONGREAL, akzeptiert aber auch REAL als Parameter. Durch die notwendige Umwandlung werden diese Berechnungen allerdings langsamer als mit doppelter Genauigkeit bei den Parametern.

Die String-Library ist offensichtlich nicht sehr effizient programmiert; SPC hat die langsamsten String-Routinen der bisher getesteten Systeme. Ungeheuer schnell hingegen wird auf

Felder und Records zugegriffen, hier hat SPC ganz deutlich die Nase vorne. Der Code von SPC ist also einer der schnellsten. Der Compiler liegt, wenn es um Geschwindigkeit geht, zusammen mit Softwave an der Spitze.

Interessante Bibliotheken

Die Bibliotheken enthalten die Standard-Module nach dem Wirth-Vorschlag, wobei die Koroutinen sich in “Coroutines” wiederfinden. Die Standardmodule bieten ausreichend Komfort und sind in kleineren Details erweitert. Leider fehlt ein Modul für höhere LONGREAL-Funktionen. “InOut” arbeitet wie bei Megamax immer in Textfenstem, so daß nie die “alte” TOS-Ebene benutzt wird.

Hinzu kommen einige weitere, systemunabhängige Libraries. “HFS” erlaubt das Handling eines hierarchischen Dateisystems und macht die Ordnerverwaltung betriebssystemunabhängig. “Printer” stellt eine Drucker-Schnittstelle mit einigen Schriftarten zur Verfügung, “Clock” kann auch mit Datum und Uhrzeit rechnen.

Für richtige Prozesse unter Verwendung des Koroutinen-Konzepts ist das “Process”-Modul gedacht. Es ist jedoch so schlecht dokumentiert, daß keine Aussage über die Leistungsfähigkeit möglich ist.

“XStr” stellt einige erweiterte String-Funktionen zur Verfügung, mit denen z.B. ein Text nach Zahlen parsiert werden kann. Für die Kommunikation mit den Shell-Variablen gibt es das Modul “Environment”, das Abfragen nach Vorhandensein und Inhalt der Variablen enthält. Für Grafik-und Fensterprogrammierung stehen mit “Rectangles” komfortable Routinen zum Rechnen mit Rechtecken zur Verfügung.

Bild 3: Die Shell-Variablen

Modula-2 Benchmarks

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

Alle Zeiten mit time-Kommando von Guläm gemessen. SPC Modula mit 200Hz-Zähler gemessen

Bild 6: Unsere Modula-Benchmarks

Das “SSWiS”-Modul - eine Abkürzung für “Small Systems Windowing Standard” verdient eine eingehendere Besprechung. Mit ihm soll eine standardisierte und portable Schnittstelle für fensterorientierte Umgebungen geschaffen werden.

Dabei können auf einer Bildschirmfläche beliebig viele Fenster benutzt werden, die dann Events erzeugen können. Die Unabhängigkeit von realen Bildschirmgrößen wird über Welt-Koordinaten erreicht. Fenster können als “Icons” dargestellt werden, falls sie nicht benötigt werden oder das konkrete System nicht ausreichend viele darstellen kann.

In Bild 7 sehen Sie eine SSWIS-Anwendung. Insgesamt sind sechs Fenster vorhanden, von denen zwei -“Modules” und “Terminal” - “iconi-siert” wurden. Klickt man auf ein solches “Icon”, wird das entsprechende Fenster voll geöffnet. Das Gegenteil wird durch den Close-Button der offenen Windows erreicht. Da auf dem ST nur vier Fenster verwendet werden sollen, iconisiert SSWiS das jeweils fünfte automatisch. Gleichermaßen unabhängige Funktionen bietet das Modul für die Gestaltung des Mauszeigers, für Menüleisten und -einträge und einfache Formulare. Die Ereignisstrukturen sind ebenfalls systemunabhängig formuliert.

Ob damit ein Standard gesetzt werden kann, wird sich zeigen. Die Funktionen ähneln GEM sehr stark, sind aber aufgrund ihrer Einfachheit sicher leicht auf andere Systeme übertragbar. Ohne einen entsprechenden Compiler mit einem SSWiS-Modul auf einem anderen Rechner ist es mit der Standardisierung und Portabilität natürlich nicht weit her. Dennoch ist das Modul eine echte Alternative zur herkömmlichen AES-Programmierung, wenn keine allzu spezielle Dinge getrieben werden sollen.

Laut Auskunft von advanced applications soll der Compiler und damit auch das SSWiS-Konzept auf eine Reihe von Rechnern und Betriebssystemen portiert ist. Wenn die Vorhaben verwirklicht werden, könnte rechnerunabhängige Fensterprogrammierung sehr vereinfacht werden.

Bild 5: Ein Compilerlauf

Die “normalen” ST-Libraries mit AES, VDI, GEMDOS und BIOS stehen komplett zur Verfügung. Wie bei Megamax sind die notwendigen Datenstrukturen sehr übersichtlich als Records vorgegeben.

Die Bibliotheken reichen fast an das Megamax-System heran. Umfangreich und durchdacht sollten die Libraries für jede Anwendung genügend Unterstützung bieten. SSWiS ist ein interessanter Vorschlag für portable, fensterorientierte Programme.

Linker

SPC benutzt - wie Megamax - ein Load-Time-Linking. Die zu einem Programm gehörenden Module werden also erst beim Start des Hauptmoduls zusammengebunden. Dem Nachteil der verlängerten Ladezeit steht die Platzersparnis auf Diskette gegenüber, da jedes Modul wirklich nur einmal benötigt und dann von allen es benutzenden Programmen geladen wird.

Dieses Konzept erspart zudem bei der Programmentwicklung einen separaten Linkerlauf. Bei Einsendung der Registrierkarte erhält man auch einen “normalen” Linker. Er lag zum Zeitpunkt dieses Tests leider noch nicht in einer endgültigen Version vor; es wird sich jedoch zunächt um einen nicht-optimierenden Binder handeln. Beim Erscheinen dieses Tests soll das System komplettiert sein.

Advanced applications plant, in einer zweiten Version einen Linker liefern zu können, der auch Object-Module aus anderen Sprachen einbinden kann. Ob dieses Vorhaben gelingt, muß sich zeigen.

Ebenfalls unter der Bezeichnung Linker liegt ein Programm bei, das mehrere Module zu einem größeren zusammenfaßt. Alle notwendigen Module eine Anwendung können dann am Stück eingelesen werden. Es handelt sich also um eine Art Librarymanager, mit dem Programme etwas schneller starten, da nur auf eine Datei zugegriffen werden muß.

Debugger - hausbacken

Zum Entwanzen steht ein Post-Mortem-Debugger zur Verfügung. Nach einem Laufzeitfehler hat man die Auswahl, das Programm weiterzuführen, abzubrechen oder den Debugger aufzurufen.

Er benutzt bis zu fünf Fenster (Bild 7). Unter “Procs” wird die Aufrufkette von Prozeduren und deren Modulherkunft angezeigt. Hier findet sich auch die Fehlerursache im Klartext.

Im “Source”-Fenster zeigt der Debugger den Quelltext des Fehlerverursachers und hebt die betreffende Zeile fett hervor. Unter “Modules” wird eine Liste aller gelinkten Module angegeben. Man kann dann mit einem Mausklick auf einen Modulnamen dessen Daten und Source darstellen lassen.

“Data_l” und "Data_2” zeigen Modul-lokale und globale Variablen und deren Inhalt an. Die Bestandteile höherer Datentypen wie Felder oder Records können durch einen Klick aufgelistet werden.

Nach Beendigung der Fehleranalyse hat man wieder die obengenannte Auswahl. Falls man im Programm HALT-Statements einbaut, kann so der Debugger auch gezielt an bestimmten Stellen aufgerufen werden. Der Entwanzer ähnelt dem TDI-Paket (bei dem er allerdings zusätzlich gekauft werden muß) und ist dem Megamax-System unterlegen. Eine automatische Überwachung während der Laufzeit ist nicht möglich; erst wenn der Fehler auftritt, kann analysiert werden. Manche Bugs lassen sich so nur schwer oder gar nicht finden. Dieser Vorwurf trifft natürlich hauptsächlich den ETH-Compi-ler, da SPC dessen Portierung ist.

Bild 7: Der Debugger

Handbuch

Das Handbuch umfaßt über 210 Seiten und wird in einem Ringbuchordner geliefert, also wieder einmal nicht mit Spiralheftung (sic!).

Auf den ersten achtzig Seiten erläutern die Autoren die Bedienung des Systems sowie die technischen Daten des Sprachumfangs und des Compilers. Die weiteren Kapitel gehen auf die restlichen Systemprogramme ein. Der Text ist ansprechend layoutet. Marginalien weisen auf das gerade behandelte Thema hin und sind beim Nachschlagen eine große Hilfe.

Den größten Teil der Anhänge nehmen mit 130 Seiten die Listings der Definitionsmodule ein. Die Texte sind übersichtlich gegliedert und mit Kommentaren versehen, die zwar nicht üppig sind, aber dennoch ausreichen. Bei Spezialproblemen werden trotzdem einige Fragen ungeklärt bleiben.

Warum die Kommentare bei einem in der Bundesrepublik entwickelten System in Englisch gehalten sind, wissen wahrscheinlich nur die Autoren. In einem deutschsprachigen Handbuch sollten auch Erläuterungen in Listings nicht in einer Fremdsprache abgefaßt sein. Eine sonst bei Modula-Handbüchern übliche Kreuzreferenz der in den Bibliotheken verwendeten Bezeichner fehlt.

Das Handbuch ist inhaltlich gut gelungen und übersichtlich gestaltet. In Details wären noch einige kleine Erweiterungen zu wünschen.

Support

Gegen Einsendung der beiliegenden Registrierkarte unter Angabe der Seriennummer des Systems erhält man, falls die gekaufte Version schon veraltet ist, automatisch das neueste Update. Ebenfalls nachgeliefert werden dann der Linker und einige Nachträge zum Handbuch.

Der Hersteller, advanced applications Karlsruhe, will eine Userzeitung zum System herausgeben, die die registrierten Benutzer kostenlos erhalten sollen.

Der Update-Service soll für ein Jahr kostenlos sein, lediglich Porto- und Materialkosten sind zu bezahlen. Der Auslieferung liegt ein Vordruck bei, auf dem entdeckte Fehler und Anregungen den Entwicklern mitgeteilt werden können. Wenn die Zusammenarbeit von Benutzern und Hersteller zu schnellen Fehlerbereinigungen führen sollte, wäre die Unterstützung hervorragend.

Fazit

Die Shell ist intelligent aufgebaut und ist trotz der einfachen Gestaltung eine wirksame Unterstützung bei der Entwicklung. Der Editor bietet eine praktische Sprachunterstützung und beschleunigt das Programmieren. Der Compiler erzeugt sehr schnellen Code und arbeitet auch selber sehr flott. Die Bibliotheken brauchen keinen Vergleich zu scheuen und bieten mit SSWiS ein interessantes Fensterkonzept. Zum Linker kann momentan noch wenig gesagt werden, ein einfacher, nichtoptimierender Binder wird jedoch nachgeliefert.

Der Debugger kann erst nach dem Programmfehler eingesetzt werden, ist aber trotzdem sehr nützlich. Das Handbuch ist gut und übersichtlich gemacht. Kleinere Detailfragen sollten noch geklärt werden. Der angekündigte Support verspricht eine gute Betreuung der Käufer.

SPC Modula empfiehlt sich insgesamt als ein hervorragendes System. Es ist mit dem schnellen Compiler, den umfangreichen Bibliotheken, dem sprachunterstützenden Editor und der durchdachten Oberfläche im Moment die erste Wahl unter den Modula-Compilem für den Atari ST. Dieses Urteil gilt natürlich nur mit dem Vorbehalt, daß der angekündigte Linker alsbald ausgeliefert wird.

Eine Gegenüberstellung aller bisher getesteten Compiler ist für die nächste Ausgabe geplant. Vielleicht läßt sich dann ein abschließendes Urteil bilden, aber wahrscheinlich trifft inzwischen ein weiteres System ein, das wieder neue Maßstäbe setzt (Ihr Tester verabschiedet sich völlig verwirrt zwischen einem Haufen Compilern und Benutzeroberflächen und langsam den Überblick verlierend ...)


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

Links

Copyright-Bestimmungen: siehe Über diese Seite