Spartanischer Sprinter: Hänisch-Modula — ein Turbo unter den Modula-Compilern

Viel Zeit ist ins Land gegangen, seit wir das letzte Mal (68000er, Ausgabe 3/88 ) einen Blick auf das Hänisch-Modula warfen. Dementsprechend viel hat sich geändert: Das System heißt jetzt Hänisch-Modula (ehemals Softwave), bietet eine neue Entwicklungsumgebung, einen besseren Codegenerator und stark überarbeitete Bibliotheken. Dies und die steigende Akzeptanz von Modula 2 sind Anlaß genug, die neue Version einmal genauer unter die Lupe zu nehmen.

Um gleich einen Trennstrich zwischen Hänisch-Modula und den anderen bisher getesteten Systemen zu ziehen: Im Gegensatz zu Megamax- und SPC-Modula mit ihrer umgebungsbedachten Konzeption verwendete der Entwickler von Hänisch-Modula die meiste Zeit auf den Compiler, das Make-Utility und den Linker. Das Resultat gibt ihm Recht.

Der Compiler arbeitet so schnell, daß man ihn nach einiger Zeit nicht mehr bewußt wahrnimmt. Nachdem ein Programm fertig ist, startet ein Druck auf die Taste < F10 > den Compiler. Bei normalen Entwicklungssystemen schließt sich jetzt das Fenster, und der Editor wird aus dem Speicher entfernt. Hat man Glück, startet dann der Compiler automatisch — meist ist dies aber von Hand zu erledigen. Findet der Compiler einen Fehler, muß man wieder den Editor auf-rufen, um Korrekturen durchzuführen.

Nicht so bei Hänisch-Modula: Drückt man < F10 >, steht nach spätestens 4 bis 5 Sekunden (wird wenig importiert, geht es schneller) der Cursor auf der fehlerhaften Stelle, und eine deutsche Fehlermeldung erscheint in der Infozeile des Textfensters.

Möchte man sein Programm dann ausführen, genügt ein Klick auf das Montage-Icon und alle Module werden gelinkt. Eventuell geänderte, aber noch nicht übersetzte Module compiliert Hänisch-Modula automatisch neu, denn es kennt alle Abhängigkeiten zwischen den Modulen. Hier tritt das Make-Utility in den Hintergrund. Man bemerkt seine Existenz nur daran, daß es einem eine Menge Arbeit abnimmt. Damit der Unterschied zu herkömmlichen Make-Utilities deutlich wird: Das System erkennt automatisch alle Abhängigkeiten, daher ist ein Make-File überflüssig.

Mit Hänisch-Modula ist man auch in der Lage, größere Projekte mit mehr als 100 KByte Programmlänge zu entwickeln, also beispielsweise ein CAD-Programm für den Straßenbau. Auf einem ST mit 1 MByte Speicher und einem Diskettenlaufwerk finden alle Dateien auf einer RAM-Disk Platz. Bei dieser Konfiguration benötigt der Linker keine drei Sekunden, um alles zu binden. Verfügt man über einen so schnellen Linker, braucht man kein kompliziertes Load-Time-Linking.

Und schnell sind nicht nur Compiler und Linker, auch der erzeugte Code ist ausgesprochen gut, nur Turbo C erzeugt noch schnellere Programme. Wer allerdings sehr viele Fließkommaberechnungen durchführt und keinen MC 68881 besitzt, den Hänisch-Modula unterstützt, sollte sich vielleicht doch nach einem anderen System umsehen — oder zumindest die Fließkommamodule neu schreiben. Vor allem die trigonometrischen Funktionen sind sehr langsam.

Optimierungen betreffen vor allem die Berechnung von Offsets bei Array-Zugriffen. Statt den üblicherweise verwendeten Multiplikationsbefehlen berechnet Hänisch-Modula die Offsets mit Additions- und Schiebebefehlen. Ähnlich geht es bei der Multiplikation mit Konstanten vorgegangen, weiter lassen sich die Ausführungszeiten durch Benutzung von Registervariablen — ein Novum bei Modula-Compilern — steigern. Steht vor einer Variablendeklaration der Kommentar ($R+), wird diese Variable in einem Prozessorregister gehalten. Dies macht sich besonders bei Schleifenvariablen positiv bemerkbar.

Die Sprachimplementation ist vollständig und bietet darüber hinaus einige Erweiterungen. Alle Datentypen sind in einfacher und doppelter Genauigkeit vorhanden. Allerdings bietet die Verwendung von kurzen Fließkommazahlen (IEEE-Notation) nur dann Vorteile, wenn große Mengen solcher Zahlen gespeichert werden. Die Berechnung von arithmetischen Ausdrücken dagegen geht mit langen Fließkommazahlen schneller. Dieser auf den ersten Blick merkwürdige Effekt ist darauf zurückzuführen, daß bei Berechnungen jede kurze Zahl zunächst ins Langformat gewandelt wird. Dies trifft natürlich nur für Fließkommazahlen zu.

Vor allem Workstation-Fans freuen sich darüber, daß die Länge von Integer-variablen per Compilerschalter einstellbar ist (16 oder 32 Bit). Hierzu ist zu sagen, daß der MC 68020/68030 32-Bit-Berechnungen genauso schnell durchführt wie solche mit 16 Bit. Noch viel mehr wird es besagte Fans freuen, daß Hänisch-Modula auch auf SUN-Workstations läuft. Alle betriebssystemunabhängigen Objektmodule sind mit der SUN-Version weiterzuverwenden.

Bei mathematischen Anwendungen ist es wichtig, daß Hänisch-Modula strukturierte Typen (Arrays und Records) auch als Funktionsresultat erlaubt.

Zahlreiche Parameter — auch die Verwendung der 68020-CPU - können Sie in dieser Auswahl-Box nach Ihren Wünschen einstellen

Die FORM-Anweisung ist eine Erweiterung, die sich stark an der C-Bibliotheksfunktion »printf« orientiert. Im Gegensatz zu den strukturierten Funktionsresultaten sollten Sie in diesem Fall mit der Benutzung sehr vorsichtig sein. Unser Prädikat: garantiert unportabel. Zwei Einschränkungen gegenüber dem TDI-Compiler sind dennoch vorhanden. Die erste betrifft die Größe der Objektmodule. Übersetzte Module dürfen nicht größer als 32 KByte werden. Dies ist unserer Meinung nach unerheblich, denn wer in einer Programmiersprache mit dem Namen Modula so große Module schreibt, ist selbst schuld. Äußerst übel stößt dagegen die Beschränkung der Setgröße auf maximal 32 Elemente auf. Sets sind ein sehr fortgeschrittenes Abstraktionsmittel, das man, hat man es einmal zu schätzen gelernt, nicht mehr missen möchte. Wenigstens 256 Elemente sollten möglich sein, damit man den Typ SET OF CHAR benutzen kann. Um einmal die Fähigkeiten von Sets zu demonstrieren, ein kleines Beispiel:

	DisplayMenu();
	REPEAT
		GetASelection(Selection);
	UNTIL Selection IN Allowed Selections;

Wichtig sind Sets auch in echten GEM-Applikationen. Praktisch in jedem Programm gibt es Perioden, in denen bestimmte Menüeinträge nicht selektierbar sind. Die meisten Programme stellen dann die betreffenden Menüpunkte in Hellschrift dar. Leider reicht

das nicht, denn es gibt ja auch Accessories, die Menüpunkte anderer Programme durch AES-Messages anwählen. Mit Sets bekommen Sie das Problem einfach in den Griff. Definieren Sie ein Set »AllowedSelections«, das alle Menüpunkte enthält. An der Stelle im Programm, an der ein Menüpunkt »disabled« wird, schreiben Sie zusätzlich:

	EXCL(AllowedSelection,x)

Bei der Auswertung der AES-Messages prüfen Sie mit dem »IN«-Operator, ob der Menüpunkt selektierbar ist. Erst dann verzweigen Sie in die entsprechenden Unterprogramme. Auch wenn es sicher effektivere Anwendungen von Sets gibt, hoffen wir, die Mächtigkeit dieses Sprachmerkmals demonstriert zu haben.

Hänisch-Modula besticht weniger durch eine komfortable Benutzeroberfläche als durch seine hohe Geschwindigkeit

Die Einpaß-Compiler-Diskussion stellt sich bei Hänisch-Modula nicht, denn es handelt sich um einen Zweipaß-Compiler, der von allen vorhandenen Modula-Compilern am schnellsten compiliert und gleichzeitig den besten Code erzeugt. Der Entwickler ist der Meinung, daß er mit einem Einpaß-Compiler eine um bestenfalls 10 Prozent höhere Geschwindigkeit erreichen würde.

Kommen wir nun zu den Bibliotheken: Hänisch-Modula bietet in diesem Bereich nur das Notwendigste. BIOS-, XBIOS-, GEMDOS-, VDI- und AES-Bibliotheken sind vollständig vorhanden und ausreichend effizient implementiert. Die Namen der Funktionen und der Parameter orientieren sich an den offiziellen Bezeichnungen. Im Bereich der Standardbibliotheken sieht es magerer aus. Es gibt zwar den einen oder anderen Lichtblick, wie beispielsweise die schnellen, in Assembler geschriebenen String-und Conversion-Bibliotheken. Aber im großen und ganzen ist der Funktionsumfang doch sehr mager und läßt sich in keiner Weise mit SPC- oder Megamax-Modula vergleichen. Hervorzuheben ist, daß man bei der String-Vergleichsfunktion eine sogenannte Compare-Map definiert. Das ist wichtig, wenn man Wert darauf legt, die deutschen Umlaute richtig einzusortieren. Wer Änderungen an den Bibliotheken vornehmen möchte, ist dazu eingeladen: Die Quellcodes gehören löblicherweise zum Lieferumfang.

Auch die Umgebung ist ein wenig spartanisch. Vor allem der Editor bedarf unbedingt einer Generalüberholung. Beispielsweise sollte er nicht nur suchen, sondern auch ersetzen können. Sehr ärgerlich ist auch, daß im Editor nur ein Fenster zur Verfügung steht. Gerade in Modula 2 wirft man des öfteren einen Blick auf die Definition anderer Module.

Für alle Programmierer, die sich einen größeren Teil ihrer Bibliotheken selbst schreiben, ist Hänisch-Modula ganz sicher die erste Wahl. Ein Zweipaß-Com-piler mit vollautomatischem Make und sehr schnellem Linker, enorm kurze Compilerlaufzeiten und eine qualitativ gute Codeerzeugung, das ist der Stoff, aus dem die Programmiererträume sind.

Wer aber sehr viel Wert auf umfangreiche Bibliotheken oder eine komfortable Shell legt, sollte sich vielleicht nach einem anderen Entwicklungssystem Umsehen. Die Debugging-Fähigkeiten sind derzeit noch schlecht — es läßt sich nur die ungefähre Position ermitteln, an der der Prozessor gescheitert ist. Vielleicht bringt der angekündigte Source-Level-Debugger da eine Wende. Der günstige Preis von 200 Mark tröstet sicherlich auch über das schlechte — weil veraltete — Handbuch ohne Index hinweg, (uh)

Vertrieb: R. Hänisch, Katzbachstr. 6, 1000 Berlin 61

Wertung

Name: Hänisch-Modula
Preis: 199 Mark

Hersteller: R. Hänisch

Stärken:
□ enorm schnelle Turn-Around-Zeiten □ vollautomatisches Make-Utility □ niedriger Preis □ sehr gute Codeerzeugung □ Mehrpaß-Compiler

Schwächen:
□ spartanische Bibliotheken □ schlechter Editor □ schlechtes Handbuch □ Linker optimiert nicht

Fazit: Modula-Compiler für Programmierer, die auch Bibliotheken selbst schreiben


Arnd Beissner
Aus: ST-Magazin 12 / 1988, Seite 76

Links

Copyright-Bestimmungen: siehe Über diese Seite