MAXON Pascal - Neue Version 1.5

Pascal ist auf Schulen und Universitäten eine der am häufigsten angewandten Programmiersprachen. Um so verwunderlicher ist es, daß Pascal so wenig Freunde auf dem ST gewinnen konnte. Vielleicht lag das daran, daß ein Compiler gefehlt hat, der alle Wünsche befriedigte. Maxon stellt mit der Version 1.5 ihres Compilers allen Pascal-Freunden ein Werkzeug zur Verfügung, das Turbo-Pascal sehr ähnlich ist - wichtig für alle, die ihre Programme vom PC portieren wollen.

Doch das Programm will nicht nur ein Compiler sein, sondern eine komplette Entwicklungsumgebung, die man erst verläßt, nachdem das zu entwickelnde Programm fertiggestellt ist. Das heißt, daß neben der Übersetzungsgeschwindigkeit, der Codequalität und der Kompatibilität auch die Benutzerfreundlichkeit eine wichtige Rolle spielt.

Das Paket wird in einem Ringbuch geliefert und beinhaltet das Handbuch und zwei Disketten, auf denen sich die Entwicklungsumgebung. die Bibliothek und einige Beispielprogramme befinden. Zum Start benötigt man mindestens einen ST mit 512 kB und ein doppelseitiges Laufwerk; das Programm läuft aber auch auf allen anderen Computern der Atari ST/ TT Reihe.

HIDE

Die Entwicklungsumgebung hat den Namen HIDE und präsentiert sich sofort nach dem Laden in einer schlichten und übersichtlichen Verkleidung. Fährt man mit der Maus in die Menüleiste, stellt sich gleich ein Gefühl ein, als ob man noch nie mit einem anderen Programm gearbeitet hätte; die Edierbefehle halten sich an den (Mac/ST)-Standard, die Einträge im Menü Compile haben Ähnlichkeit mit denen von Turbo-Pascal auf dem PC, und das Hilfemenü erinnert an Turbo-C. Für alle, die Turbo-C nicht kennen: die Hilfefunktion ist sehr komfortabel, und man ruft sie auf, indem man ein Wort im Text selektiert und dann Help drückt. Sollte dieses Stichwort im Hilferegister sein, so findet man sich in einem Fenster wieder, das Informationen und Beispiele bereitstellt (s. Bild 1). Man kann nun beliebige Ausschnitte in ein anderes Fenster kopieren oder unterstrichene Worte anklicken, die dann wieder zu neuen Erklärungen führen.

Da im Hilfetext nahezu das gesamte Handbuch steckt, kann man dieses getrost in die Ecke stellen. Hat man einmal mit dieser Hilfefunktion gearbeitet, möchte man sie nie wieder missen, und so stellten die Entwickler ein Accessory zusammen, mit dem man diese Hilfe auch aus anderen GEM-Programmen aus benutzen kann. Die Texte sind allerdings in Englisch gehalten.

HIDE ist jedoch nicht nur eine Shell; es ist ein Paket aus Editor, Compiler, Linker und Assembler, die nahtlos in ein Programm integriert wurden. Dies bekommt man besonders bei der Programmentwicklung zu spüren, denn wenn zum Beispiel der Compiler einen Fehler entdeckt, muß nicht erst der Editor nachgeladen werden, sondern man findet sich sofort an der fehlerhaften Stelle, kann sie korrigieren und per Tastendruck neu compilieren.

Der Editor arbeitet, wie schon gesagt, mit den Standardfunktionen, die man zum Beispiel von Edison her kennt, und erreicht eine beachtliche Geschwindigkeit. Erwähnen sollte man hier eine Funktion, die es erlaubt, eine Datei zu öffnen, deren Name mit der Maus selektiert wurde. Schön ist dies vor allem, wenn man eine Include-Datei laden möchte und sich nicht jedesmal mit dem Fileselektor ärgern will. Die Unzulänglichkeiten des Editors in V 1.1 sind in V 1.5 behoben, so gibt es keine Probleme mehr mit dem Fenster-Handling und dem Redraw.

Das Compile-Menü enthält so essentielle Funktionen wie Run oder Compile, aber auch Make. Make unterscheidet sich von dem unter Unix vor allem dadurch, daß man nicht sämtliche Dateien, die übersetzt werden sollen, angeben muß. Alles geschieht automatisch und schnell. Maxon-Pascal bietet beim Compilieren die Option Memory und Disk. Erste sorgt dafür, daß ein Programm komplett im Speicher übersetzt und auch von dort gestartet wird. Zweite schreibt das lauffertig Programm zuvor auf Disk. Alles in allem also ein durchdachtes und bewährtes Konzept, das keinem Programmierer Schwierigkeiten bereiten sollte.

Fehlt noch das Optionen-Menü, in dem man alle Einstellungen festsetzen und speichern kann. Da wären zunächst einmal die allgemeinen Optionen, mit denen man zum Beispiel die Tabulatorbreite einstellen kann. Mit den anderen Einstellungen kann man die Verhaltensweise des Compilers (Bild 2) und Linkers verändern. Wir werden diese Funktionen weiter unten genauer betrachten.

Man kann also zusammenfassend sagen, daß HIDE eine gelungene Programmieroberfläche ist, an die man sich schnell gewöhnt und die man nach einer gewissen Zeit nicht mehr missen möchte. Für alle, die den Command-Line-Betrieb bevorzugen oder einen eigenen Editor bzw. eine Shell einsetzen wollen, befindet sich auf der Diskette eine Stand-Alone-Version des Compilers.

Bild 1: Praktisch: die OnLine-Hilfe von MAXON-Pascal

Der Compiler

Kommen wir nun zu den inneren Werten dieses Pakets - und das ist sicherlich der Compiler. Das erste, was auffällt, ist die rasante Übersetzungsgeschwindigkeit: bei der Compilierung des ersten kleinen Programms hat man das Gefühl, daß mehr Zeit zum Öffnen der Dialogbox als zur Übersetzung selbst benötigt wird. Auch bei größeren Projekten ist man nicht zur Kaffeepause gezwungen, kann aber trotzdem den Compiler anhalten, um eventuelle Verbesserungen durchzuführen. Doch die Übersetzungsgeschwindigkeit sollte nicht das alleinentscheidende Kriterium sein. Pascal ist ursprünglich eine Sprache ohne Modulkonzept, was die Entwicklung größerer Programme unmöglich macht. Maxon-Pascal geht hier zur Lösung des Problems denselben Weg wie Turbo-Pascal: Einzelne Programmteile werden in Units, die Modulen unter Modula entsprechen, zusammengefaßt. Dieses Konzept hat sich in der Praxis gut bewährt und ist auf dem PC der Quasi-Standard. Die Units können max. 32 kB Source-Code umfassen, was aber bei übersichtlichen Programmen keine Schwierigkeiten bereiten sollte.

Da der Compiler zu Turbo-Pascal so kompatibel sein sollte wie nur möglich, ist es nur verständlich, daß man oft auf wohlbekannte Features stößt. Die meisten Compiler-Direktiven zum Beispiel sind auch übernommen worden. Sie ermöglichen es dem Programmierer, den Compiler aus dem Programm heraus zu steuern. Unter anderem hat man somit einen vollständigen, C-ähnlichen Präprozessor implementiert, der bedingte Compilierung unter Pascal ermöglicht. Außer den aus C bekannten Befehlen define, ifdef usw. gibt es auch ifopt. Mit dieser Direktive kann man Optionen. die in dem Optionen-Menü oder über die Direktiven gesetzt wurden, überprüfen. Das wären zum Beispiel alle Bereichsüberprüfungen. Auch include ist implementiert und ermöglicht das Einbinden von Quelltexten zur Übersetzungszeit. Daneben kann man auch DRI-Objektcode anderer Compiler und Assembler einbinden.

Der erzeugte Code ist für einen Pascal-Compiler gut, er ist kompakt und schnell. Die Geschwindigkeit läßt sich noch verbessern und die Codelänge verkürzen, indem man den Compiler anweist. PC-relativen Code zu erzeugen.

INLINE-Assembler

Geschwindigkeitsfanatiker können sich zur ‚Verbesserung’ ihrer Programme des eingebauten Assemblers bedienen. Funktionen und Prozeduren, die in Assembler geschrieben sind, beginnen statt mit begin mit asm. Aus einem solchen Block heraus kann man auf Pascal-Variablen zugreifen, wobei man sich jedoch an gewisse Konventionen halten muß. Der Assembler unterstützt wie der Compiler nur 68000er Mnemonics, sollte also in der Zukunft an größere Prozessoren angepaßt werden.

Linker

Außer beim Erzeugen einer Unit geschieht der Linker-Durchlauf automatisch: es wird also kein Objektcode erzeugt. Hat man einen symbolischen Debugger wie SID, kann dem Linker mitgeteilt werden, daß er Symbole an das erzeugte Programm anhängt. Der Linker arbeitet dabei optimierend. d.h. daß er nicht benötigte Routinen, die zum Beispiel in den Units enthalten sind, aus dem Programm entfernt. Dies hat zur Folge, daß besonders kleinere Programme sehr kurz ausfallen.

Genauigkeit

Da Pascal eine Programmiersprache zur Lösung mathematischer Probleme ist, interessiert zum Beispiel, mit welcher Genauigkeit die Fließkommaoperationen arbeiten und ob von einem eventuell vorhandenen Coprozessor Gebrauch gemacht wird. Die Typen single und double ent sprechen dem IEEE-Standard und sind mit vier beziehungsweise acht Byte implementiert. Alle Berechnungen geschehen aber mit dem erweiterten Typ extended, der mit 10 Byte arbeitet. Die Genauigkeit liegt dabei bei 19 Stellen, der Bereich bei 1.1e-4932..1.1e4932. Für die Praxis bedeutet das, daß die weniger genauen Typen mehr Zeit zur Berechnung brauchen, weil sie erst umgewandelt werden müssen. Man sollte also so oft es geht extended verwenden. Wie angenehm, daß real lokal redefinierbar ist und man so die ursprüngliche Genauigkeit überladen kann. Besitzer eines mathematischen Coprozessors (68881/ 2) dürfen sich freuen, denn der Compiler unterstützt ihn. Allerdings wird bislang der direkte Weg über die Line-F-Routinen nicht unterstützt, und das heißt, daß der Coprozessor im TT nicht genutzt werden kann.

Bild 2: Die Compiler-Optionen

Die Bibliothek

Eine professionelle Entwicklungsumgebung muß neben den bereits beschriebenen Eigenschaften eine Bibliothek besitzen, die dem Programmierer viele Funktionen anbietet, die ihm überflüssige Arbeit ersparen oder sie zumindest verkürzen. Pascal besitzt bereits von Haus aus einige Standardroutinen, die aber nicht mehr ausreichen. Selbstverständlich sind diese in Form von Units in dem Paket enthalten, wobei statt den Put/Get-Befehlen nach gewohnter Turbo-Manier read und write verwendet werden. Auch die Routinen, die das Betriebssystem BIOS, GEMDOS und GEM - zur Verfügung stellt, sind vollständig implementiert, und zwar für alle bisherigen TOS-Versionen. Bei den AES- und VDI-Funktionen hat man sich an den C-Standard gehalten, so daß Pascal-Programmierer Strings erst in die richtige Form bringen müssen. Dadurch, daß man sich an die Standardaufrufe gehalten hat, wird man es bei der Konvertierung von GEM-Programmen, die in anderen Sprachen verfaßt wurden, leichter haben. Der einzige Unterschied besteht darin, daß die meisten Routinen als Prozeduren geschrieben wurden und den Fehlercode als eine globale Variable bereitstellen. Dies ist wirklich sehr nützlich, da der GEM-Fehlercode bei den seltensten Aufrufen ausgewertet wird.

Für alle Grafikfans wurde auch eine GRAPH-Unit, die Standard-Grafikbibliothek des PC. implementiert, so daß auch hier das Portieren zum Kinderspiel wird. Eine GRAPH-Unit ist am PC fast unverzichtbar, da es dort zahlreiche verschiedene Grafikauflösungen gibt (EGA, VGA, Hercules...) und jede einen eigenen Treiber benötigt. Aufgrund dieser flexiblen Gestaltung nutzt GRAPH auch am ST die gebotene Hardware voll aus und läuft auch auf ST-Grafikkarten mit voller Auflösung.

Das Portieren zu vereinfachen, hat auch die Unit STPascal zur Aufgabe. Sie beinhaltet die meisten Routinen und Definitionen dieses Pascal-Dialekts. Das ist besonders wichtig, da ST Pascal Plus nicht-standardisierte GEM-Aufrufe verwendet, die sich erheblich unterscheiden.

Alle Units stehen getrennt auf der Diskette zur Verfügung, können aber auch in zusammengefaßter Form als resident angemeldet werden. Somit werden sie bereits beim Start geladen und ersparen dem Compiler das nachträgliche Suchen auf der Diskette. Für die, die sich aus eigenen Units eine Bibliothek erstellen möchten, wird ein Utility namens Libmaker mitgeliefert. Es liegt im Sourcecode vor und ermöglicht damit eine Anpassung an eigene Programme.

Auf den Disketten befindet sich noch eine Reihe nützlicher Demonstrationsprogramme, die auch zu anderen Zwecken benutzt werden können. So zum Beispiel der RPN-Kalkulator, der in GEM implementiert ist. Als Accessory geladen, kann es aus jedem GEM-Programm gestartet werden und erledigt gute Dienste.

Die Kompatibilität

Das Schönste für einen Programmierer wäre es, wenn er seine Programme auf einer Maschine erstellen und sie dann auf alle anderen Rechner portieren könnte. Das ist aus zwei Gründen nur schwer vorstellbar: zum einen wissen wir, welche Unterschiede es in der Rechnerarchitektur gibt, und zum anderen differieren Compiler ganz beträchtlich.

Das erste Problem ist nur schwer lösbar, denn sind die Programme erst einmal an eine bestimmte Hardware gebunden, gibt es keinen Ausweg mehr. Hier können auch noch so intelligente Compiler nichts ausrichten. Was jedoch die Implementierung einer Sprache angeht, so gibt es die Möglichkeit, sie bis ins kleinste Detail zu standardisieren und dadurch jegliche Unterschiede zwischen Compilern zu vermeiden. Nun wissen wir aber, daß es viele unterschiedliche Pascal-Dialekte gibt, die die Mängel der Sprache ausgleichen. Der wohl verbreitetste ist das Turbo-Pascal auf dem PC, und so hat man sich entschieden, Maxon-Pascal mit denselben Erweiterungen auszustatten. Dadurch hat man bei der Portierung der Programme vom PC viel geringere Probleme. Ohne Arbeit kommt man aber nicht davon, weil es doch noch gewisse Unterschiede gibt. So ist z.B. das Schlüsselwort Interrupt nicht vorhanden, da es zu tief auf die PC-Hardware zugreift, absolute ist jedoch in V1.5 implementiert, ebenso wie typisierte Konstanten.

Enorme Vorteile hat man aber durch die Grafikbibliothek, die in Turbo-Pascal sehr viel verwendet wird. Dadurch, daß sich die DOS-Aufrufe auf beiden Computern gleichen, ist eine der schwierigsten Hürden genommen worden. Hand anlegen muß man bei der Konvertierung der Datenformate, da 86er-Prozessoren Integer- und Long-Werte anders behandeln als die 68er. Es gehört allerdings zum schlechten Programmierstil, wenn man sich auf solche Details stützt. Genauso, wie man es nicht übertreiben sollte, Routinen in Assembler zu schreiben. Die müssen nämlich auf jeden Fall angepaßt werden.

Auch die Gruppe der Umsteiger sollte von Maxon-Pascal angesprochen werden. So liegen dem Compiler, wie schon oben gesagt, eine ST-Pascal-Unit und eine Datei bei, die die wichtigsten Schritte bei der Konvertierung beschreibt. Da die Syntax von ST Pascal Plus doch erhebliche Unterschiede zu der von Maxon- bzw. Turbo-Pascal aufweist, muß man schon einige Anpassungen manuell ausführen. Die Module müssen zum Beispiel in Units umgewandelt werden. Leider unterstützt Maxon-Pascal die parametrischen Routinen nicht. Programme, die diese benutzen, müssen umgeschrieben werden, oder man behilft sich mit dem INLINE-Assembler.

Schwierigkeiten bereiten könnten auch die Typen. In der ST-Pascal-Unit sind zwar alle Typen von ST Pascal Plus definiert, sie werden aber intern etwas anders behandelt, so daß man sich bei Überlauf nicht auf wohldefinierte Werte verlassen sollte. Diese Probleme treten allerdings nur selten auf. Dadurch, daß die GEM-Aufrufe von ST Pascal Plus implementiert wurden, gestaltet sich die Portierung im allgemeinen als nicht zu schwer, was alle diejenigen freuen wird, die ein bisheriges Projekt übernehmen wollen. Bei neuen Projekten sollte man dann allerdings von Anfang an in standardisierter Form programmieren, also ohne ST-Pascal-Unit.

Bild 3: Mit der GRAPH- Unit lassen sich z.B. Balkengrafiken leicht erstellen.

Das Handbuch

Jedes Programmierhandbuch sollte aus zwei Teilen bestehen: dem Benutzerhandbuch und einem Referenzanhang. Das Benutzerhandbuch sollte den Programmierer kurz in die Programmiersprache einführen und dann mit weiterführenden Abschnitten das Gebiet vertiefen. Damit wichtige Informationen nicht verlorengehen, muß der Anhang wirklich alles nochmal aufgreifen. Leider ist gerade der erste Teil sehr spärlich ausgefallen. Nach ein paar ‚Hello World’-Programmen geht es gleich mit der Erklärung der Syntax los. Es wird auf weiter-führende Literatur verwiesen, die es für Turbo-Pascal glücklicherweise in Mengen gibt. Durch die Ähnlichkeit zu TurboPascal kann jeder Anwender leicht auf zahlreiche Literatur zurückgreifen, die seinem Wissensstand entspricht.

Der Anhang, der die einzelnen Units darstellt, ist dagegen vom Umfang her ausreichend. Schön ist auch, daß viele neue Routinen, wie zum Beispiel die von der GRAPH-Unit, mit lauffähigen Beispielen dokumentiert werden.

Glücklicherweise findet man alle Routinen noch einmal im Index aufgeführt. Im Anhang findet man auch noch wichtige Informationen über die Datenformate und Aufrufkonventionen von Maxon-Pascal.

Aktuelles

Gegenüber der Vorgängerversion 1.1 bietet V 1.5 einige Erweiterungen. So wurden beispielsweise typisierte Konstanten implementiert. Diese erlauben neben der Typzuweisung an eine Konstante auch die Vorbelegung der Konstanten mit Werten. Interessant wird das bei Arrays, denn bislang mußte jedem Feld der Wert einzeln zugewiesen werden, was bei großen Arrays mitunter zu einem nervenaufreibenden Unterfangen wurde. Nun lassen sich die Werte eines Arrays leicht in Folge eingeben.

Das Schlüsselwort absolute ist nun vorhanden. Hiermit läßt sich eine Variable an eine absolute Adresse legen, was z.B. beim direkten Zugriff auf das System eine Rolle spielt.

Erfreulich ist, daß die Speicherverwaltung des Compilers verbessert wurde, so entfällt jetzt die 32kB-Grenze eines Arrays; der Größe steht nun lediglich der verfügbare Arbeitsspeicher entgegen. Bei dieser Gelegenheit wurden auch die Datentypen WORD und BYTE auf ihre notwendige Größe reduziert. Sie belegen nun 16 bzw. 8 Bit, statt wie bisher 32 und 16.

Die Kompatibilität zu Turbo Pascal 5.0 ist sehr hoch, doch darf man nicht erwarten, jedes Programm ganz ohne Anpassungen nutzen zu können. Immerhin gibt es doch einige Unterschiede zwischen einem ST und einem PC, und es ist auch normalerweise nicht notwendig, sich auf PC-nahe Programmierung einzulassen, denn es liegt ja schließlich ein ST zugrunde, der bekanntlich wesentlich leistungsfähiger ist bzw. dem Programmierer mehr Möglichkeiten bietet als ein PC.

Fazit

Maxon-Pascal ist ein Produkt, das man sich auf jeden Fall genauer anschauen sollte. Pascal-Programmierer, die mangels Alternative auf C umgestiegen sind, können wieder auf ihre allen Quelltexte zurückgreifen; bereits Geschriebenes geht nicht verloren, da es von Maxon-Pascal aus verwendet werden kann. Auch diejenigen, die von anderen Pascal-Dialekten kommen, werden nicht enttäuscht werden, denn es ist viel Arbeit in die Kompatibilität gesteckt worden.

Überhaupt habe ich den Eindruck gewonnen, daß Maxon-Pascal eine lebende Sprache ist, die User werden also nicht alleine gelassen und man kann sicher auch in Zukunft neue Features erwarten. Der Preis ist mit DM 259,- nicht zu hoch angesetzt. Wer sich also für Pascal auf dem ST interessiert, sei er ein Ein-, Umsteiger oder Entwickler, wird mit Maxon-Pascal rechnen müssen.

Grischa Ekart

Bezugsadresse:

MAXON Computer Schwathacher Str. 52 W-6236 Eschborn

Aus presserechtlichen Gründen sind wir zu folgendem Hinweis verpflichtet: MAXON Computer als Herausgeber dieser Zeitschrift ist gleichzeitig deutscher Vertrieb des beschriebenen Programms Maxon-Pascal.



Aus: ST-Computer 09 / 1991, Seite 164

Links

Copyright-Bestimmungen: siehe Über diese Seite