← ST-Computer 04 / 1988

Dynastien: Prospero ProPascal und CCD Pascal Plus

Software

The British Way of Pascal im Vergleich mit einem Produkt aus deutschen Landen, frisch auf den Tisch.

Zwei der Ă€ltesten Pascal-Systeme fĂŒr den ST, das Prospero ProPascal-System (das jetzt den Untertitel 'for GEM’ trĂ€gt, um seine Anpassung an das DR GEM-System zu dokumentieren - ĂŒbrigens auch fĂŒr den MS-DOS Bereich erhĂ€ltlich) und das CCD Pascal Plus liegen seit kurzem in neuen Versionen vor. Die Veteranen haben sich, diese Bemerkung sei vorab erlaubt, wirklich gut gehalten, was ihrem Überleben auch sehr förderlich sein dĂŒrfte, angesichts einer ganzen Flut von angekĂŒndigten neuen Pascal-Compilern und Entwicklungssystemen, die zum Teil zum Zeitpunkt des Erscheinens dieses Berichtes bereits erhĂ€ltlich sein dĂŒrften.

Zuerst ein paar Gemeinsamkeiten: Beide Pascal-Systeme werden vollstĂ€ndig aus einer GEM-Shell bedient, das Verlassen dieser Shell dĂŒrfte wĂ€hrend der Entwicklung eines Programmes in den seltensten FĂ€llen notwendig sein. Bei Pascal Plus ist eine derartige BedienerfĂŒhrung ja nichts neues, bereits in der Ă€lteren Version war eine Shell vorgesehen, auf den Komfort eines GEM-Texteditors mußten CCD-User aber bisher verzichten, es sei denn, sie waren stolze Besitzer des CCD-Editors TEMPUS, der seinen Beinamen 'DER Editor’ nicht zu Unrecht trĂ€gt. Ein GEM-Editor mit allen notwendigen Funktionen (zwar nicht TEMPUS, aber auch nicht schlecht) ist in Pascal Plus jetzt enthalten, die Shell ist erheblich umfangreicher geworden.

Bild 1: Die Workbench von Prospero Pascal

Auch Prospero Pascal, dessen Handling bisher eher ein Denkmal der Vorzeit war, wurde völlig neu eingekleidet, und zwar in eine sehr funktionale Shell. Die Besonderheit dieser Shell ist, daß der Editor hier nicht als Overlay nachgeladen wird, wie es sich gebĂŒhrt, sondern fest in die Shell integriert ist. Das ist hĂŒbsch, weil man einen Text compilieren kann, ohne ihn vorher abzuspeichern, einfach so, wie er im Rechner steht. Besonders schön ist dann allerdings, wenn man nach getaner Arbeit und dem Griff zum Ausschalter des Rechners feststellt, daß man sein Programm auch nach erfolgreicher Kompilierung nicht abgepeichert hat. Frohes Tippen. Die Shell gefĂ€llt aber ebenfalls sehr.

Lieferumfang

Beide Systeme sind im Grunde Ă€hnlich aufgebaut: Geliefert werden Shell, Editor, Compiler und Linker. ZusĂ€tzlich enthĂ€lt das CCD-Paket einen sehr leistungsfĂ€higen und auch ausreichend schnellen Quelltextformatierer, der sehr ĂŒbersichtliche und informative Listings liefert (z.B. reservierte Worte fettgedruckt, korrekt eingerĂŒckt, am Rande die Schachtelungstiefe der Zeile angegeben usw.). Prospero liefert einen Cross-Reference-Generator, der leider nicht der schnellste ist, sowie ein Library-Utility mit. Einige Hilfsbibliotheken (fĂŒr GEM, TOS, NĂŒtzliches) sind ebenfalls beiden gemeinsam. Eine große Besonderheit, die sich jedoch in den illustren Kreisen der Compilerbauer immer mehr durchzusetzen beginnt, hat das ProPascal-System seiner deutschen Konkurrenz voraus: Einen Source-Level Debugger. HĂ€h ? Nun, einige findige Entwickler auf grĂ¶ĂŸeren Rechnern und Workstations sagten sich vor geraumer Zeit, daß es doch eine Schande sei, ĂŒber modernste Sprachen, Compiler usw. zu verfĂŒgen, aber bei der Fehlersuche nach obligatorischem Absturz auf die reine Intuition oder gar -igitt- auf Maschinensprache-Kenntnisse angewiesen zu sein. Auch Debugger wie SID, der ja zum C-Entwicklungspaket des Atari gehört, helfen nicht allzuviel, wenn es darum geht, lokale Variablen in einer zweieinhalbtausendmal rekursiv aufgerufenen Prozedur zu finden, oder auch einfach eine bestimmte Variable wĂ€hrend der AusfĂŒhrung des Programmes zu verĂ€ndern - ohne erneuten Compilerlauf, versteht sich. Kurzum, herkömmliche Werkzeuge fĂŒr die Fehlersuche lassen einen geplagten Programmierer immer dann im Stich, wenn er sie am nötigsten braucht, nĂ€mlich dann, wenn man die Möglichkeiten einer Hochsprache zur Strukturierung und Ă€hnliche Annehmlichkeiten des modernen Programmierens nutzen will und Fehler in derartigen Gebilden auch halbwegs schnell beseitigen will. Um es kurz zu machen: So entstanden die ersten Source-Level Debugger, die eben genau die FĂ€higkeit besitzen, die ihr Name andeutet: In einem Testlauf eines kompilierten Programmes jederzeit Zugriff auf den Source-Text des gerade ausgefĂŒhrten Programmes zu haben, Breakpunkte im Source-Code zu setzen, Variablen (auch rein lokal) tracen und Ă€ndern oder die AusfĂŒhrung des Programmes an beliebiger Stelle fortsetzen zu können. Sie sehen also, ein guter Source-Level Debugger ist eine Art eierlegendes Wollmilchsau-Raubtier in der Welt der Wanzen.

Ein solcher Source-Level-Debugger, der ĂŒber wirklich beachtenswerte FĂ€higkeiten verfĂŒgt, ist im ProPascal-System enthalten - und der Autor ist nach seinen ersten Erfahrungen mit diesem wohl ersten auf dem ST erhĂ€ltlichen Muster seiner Art ganz hingerissen. Aber auf diesem Feld ist Konkurrenz bereits in Sicht: Die Version 2.0 des Pascal-Systems von Metacomco, das bei Erscheinen dieser Ausgabe ebenfalls erhĂ€ltlich sein soll, verfĂŒgt ebenfalls ĂŒber einen derartigen Debugger, ĂŒber den man sich wahre Wunderdinge erzĂ€hlt - nun, man wird sehen.

Bild 2: Die Fileselektorbox von ST Pascal Plus

GEM-Einbindung

Der nĂ€chste Punkt der allgemeinen AusfĂŒhrungen ĂŒber die Herren Pascal betrifft die Einbindung der GEM-Aufrufe ins System. Hier scheiden sich die Geister ganz erheblich. Prospero hat sich fĂŒr einen sehr eleganten Weg entschieden, nĂ€mlich den, sĂ€mtliche Datentypen, Konstanten und Prozeduraufrufe des Betriebssystem in Include- und Linkdateien zur VerfĂŒgung zu stellen, wodurch GEM-Programme aus anderen Sprachen, z.B. aus C. leicht nach Prospero Pascal (oder Fortran, das im letzten Heft getestet wurde und sich lediglich im Compiler von dem Pascal-System unterscheidet) ĂŒbersetzt werden können bzw. umgekehrt. Die Implementierung der GEM-Aufrufe ist extrem geschickt gelöst, die unflexible Handhabung von Prozeduren versus Funktionen in Pascal ist elegant umgangen worden. ZusĂ€tzliche Funktionen, die nicht direkt in GEM enthalten sind, erleichtern manch unangenehme Arbeit. Leider hat man an einem Punkt, der allerdings alles andere als selbstverstĂ€ndlich ist, eine Möglichkeit versĂ€umt: In die Objekt-Library wurde keine Routine eingefĂŒgt, die es ermöglicht, Pascal-Prozeduren zur Bearbeitung von ‘Userdef’-Objektstrukturen zu verwenden, was wunderhĂŒbsch, die Krönung sozusagen, gewesen wĂ€re, eben weil es in Pascal (in korrektem Pascal) völlig unmöglich ist, so etwas zu programmieren. Aber wie gesagt, das war eigentlich auch nicht zu erwarten, aber bei der QualitĂ€t der GEM-Bindings wird man schnell unverschĂ€mt. Ein dickes Lob fĂŒr die Prospero GEM-Library.

Bild 3: Die Compiler-Optionen von Prospero Pascal

CCD macht es dem an die Standard-Aufrufe gewöhnten Programmierer da erheblich schwerer. Benutzern Ă€lterer Pascal Plus-Versionen ist die GEM-Library des Systems bekannt, Newcomern sei berichtet, daß in der Library eine Auswahl von Funktionen des GEM vorhanden ist, die entweder einige Standard-GEM-Aufrufe unter neuem Namen zusammenfaßt oder fĂŒr Verwirrung sorgt, indem sie nur einen einzigen Standard-GEM-Aufruf mit neuem Namen enthĂ€lt oder gar, um das Durcheinander komplett zu machen, gar einzelne Aufrufe unter ihrem Original-Namen verwendet. Manche der so entstandenen Aufrufe machen es dem Neuling möglicherweise leichter, ans GEM heranzutreten, aber im allgemeinen möchte ich bestreiten, daß diese Art der GEM-Einbindung sehr nĂŒtzlich ist, zumal, entgegen der anderslautenden Werbung, der Handbuchteil, der sich mit diesen Bindings beschĂ€ftigt, keineswegs sehr viel leichter verstĂ€ndlich und kĂŒrzer als viele der bisher erschienenen BĂŒcher ĂŒber die Standard-Aufrufe ist. Der Umstieg auf andere Sprachen oder die Verwendung von Hilfsroutinen fĂŒr besondere Aufgaben, die man zum Beispiel in Zeitungen entdecken kann, wird meines Erachtens durch eine solche GEM-Einbindung unnötig erschwert. Außerdem sind, wie bereits erwĂ€hnt, nicht alle GEM-Funktionen enthalten, einige zusĂ€tzliche hinzugefĂŒgt usw. In der bisherigen Version des Pascal Plus Systems konnte man ja wenigstens völlig problemlos mit Hilfe der Dateien ‘aes-bind’ und ‘vdibind’ die Originalfunktionen verwenden, vorausgesetzt, man brachte den Fleiß auf, erst einmal die korrekten Procedurdefinitionen fĂŒr die vielen, vielen GEM-Funktionen in seinen Computer einzutippen, da ein Include-File mit solchen Definitionen leider nie vorgesehen war. Mit der verbesserten GEM-Bibliothek der neuesten Pascal-Plus Version ist das nicht mehr ganz so problemlos: Zwar wurden viele Fehler aus der alten GEM-Library entfernt und viele EinschrĂ€nkungen durch neu eingefĂŒhrte Funktionen hinfĂ€llig, doch leider wurde im Zuge dieser Verbesserungen auch einiges verĂ€ndert, so daß es nicht mehr so ohne weiteres möglich ist, einfach eine GEM-Prozedur zu definieren und sie dann durch linken mit ‘aesbind’ oder ‘vdibind’ auch tatsĂ€chlich nutzen zu können. Nein, etwas MĂŒhe gehört dazu; einige Spezialvariablen, die beim alten System automatisch definiert waren, sind jetzt in die Include-Dateien, die zur CCD-GEM-Library gehören, abgewandert, so daß man diese mitkompilieren, außerdem aber auch die GEM-Library von CCD mitlinken muß, um ein Programm mit Standard-GEM lauffĂ€hig zu machen, was die ganze Sache etwas unbequem macht. Dummerweise tragen einige Prozedur-Aufrufe in der CCD-Library in der neuen Version aber doch wieder Standard-Namen, was dazu fĂŒhrt, das unter UmstĂ€nden auch noch einiges an Änderungen fĂ€llig wird, damit ein Ă€lteres Programm fehlerfrei kompiliert und gelinkt werden kann. Mir erscheint diese Art der GEM-Einbindung recht ungeschickt, nichts gegen Erleichterungsversuche fĂŒr geplagte AnfĂ€nger, aber bitte doch mit Wahrung der KompatibilitĂ€t, ohne den Standard-gewöhnten durch große MĂŒhen zu verschrecken oder quasi zur Benutzung eines uneleganten Bindings zu zwingen.

Bild 4: Die Compiler-Optionen von ST Pascal Plus

Sehr gelungen ist dagegen eine Bibliothek namens PASTRIX (welch hĂŒbscher Name...), die wirklich Ă€ußerst nĂŒtzliche Funktionen enthĂ€lt, die es z.B. ermöglichen, ganze Bildschirminhalte in einer Variable abzuspeichern, zu peeken und poken, Adressen von Variablen zu finden, Datum und Zeit und Strings zu konvertieren usw., usw. Einige Probleme, die die strenge Pascal-TypĂŒberprĂŒfung besonders bei der systemnahen oder GEM-Programmierung bietet, lassen sich mit Hilfe dieser Funktionen recht einfach umgehen.

Bei Prospero sind derartige Funktionen bereits im Sprachumfang enthalten (Peek, Poke usw.) bzw. in die TOS-Bibliothek integriert (Zeit-/Datums-Konvertierung).

Dokumentation

Das CCD-Pascal wird selbstverstĂ€ndlich mit einem deutschen Handbuch geliefert. Die gesamte Dokumentation besteht aus dem Original-Handbuch der letzten Pascal-Plus-Version sowie einem dĂŒnnen ErgĂ€nzungsband, der die Erweiterungen und Änderungen der neuen Version beschreibt. Die Anleitung ist gut brauchbar, aber nicht immer optimal ĂŒbersichtlich.

FĂŒr ProPascal gibt es, wie könnte es auch anders sein, nur eine englische Anleitung. Drei BĂ€nde sind es, einer fĂŒr den Compiler, die TOS- und Hilfsbibliotheken, sowie jeweils einer fĂŒr die VDI- und AES-Bindings. Die Anleitung ist gut und leicht verstĂ€ndlich geschrieben; Ă€rgerlich in der AES-Anleitung ist, daß dort auch alle Funktionen der GEM-Version 2.0 (unter MS-DOS) enthalten sind, was an sich nicht weiter schlimm wĂ€re, wenn man nicht vergessen hĂ€tte, irgendwo aufzulisten, was das GEM im Atari nun eigentlich kann und was nicht. Etwas ungeschickt ist auch der Compiler-Band, der sich aus mehreren Teilen zusammensetzt, die leider kein gemeinsames Register haben, so daß man, wenn man nicht weiß, wo genau man etwas suchen soll, immer etwas blĂ€ttern muß.

ProPascal Pascal Plus
Floattest C: 15 sec. C: 5 sec.
500.000 Multiplika- L: 17 sec. L: 5 sec.
ticinen; 50.000 Sinus; 1 externe Library, 20 KByte 1 externe Libraty, 11 KByte
25.000 Matrix'Vektor Multiplikation: 1 Minute 15 Sekunden, 1:50
(4*4 -Matrix) Sinus: 1 Minute 30 Sekunden 3:15
MatriwVektor: 1 Minute 23 Sekunden 2:05
Tower C: 10 sec. C: 4 sec.
Türme von Hanoi L: 17 sec, L: 3 sec.
1 externe Libraty, 20K 1 externe Libraty, 6K
17 Scheiben: 29 Sekunden 17 Scheiben: 20 Sekunden
Sieve C: 11 sec. C: 5 sec.
Primzahlen —Sieb L: 17 sec. L: 3 sec.
1 externe Library, 20 Kbyte 1 externe Libraty, 6 K
10 Durchlufe bis 1001, mit Ausgabe;
9 Sekunden 11 Sekunden
Benchmark—Ergebnisse: Mathematik mit normaler Genauigkeit. ProPascal Linker ohne Selectiv—Scan —Option für optimale Code —Länge.

Tabelle: Pascal Benchmarks

Spracherweiterungen

Beide Pascal-Compiler sind in einigen Punkten gegenĂŒber der Norm erweitert. Fast schon Standard ist der Stringtyp samt den dazugehörigen Funktionen zu seiner Manipulation. In ProPascal sind Strings voll dynamisch, das heißt, ihre LĂ€nge (bis zu 32KByte) muß nicht festgelegt werden.

Beide Compiler erlauben auch modulares Kompilieren. Dabei können globale Variablen von allen Programmteilen genutzt werden, aber auch geschĂŒtzte Variablenbereiche sind möglich.

In Sachen Zahlen: Der Prospero-Compiler versteht verschiedene Real-Formate, nĂ€mlich mit 7 und 16 Stellen Genauigkeit, sowie 32-Bit-Integer-Zahlen. Vordefiniert sind Subranges mit 8 und 16 Bit GrĂ¶ĂŸe mit und ohne Vorzeichen.

Ein genereller Pointer-Typ ist vorhanden, der mit jedem beliebigen Pointer kompatibel ist.

Bei CCD gibt es ein Real-Format, das 11 Stellen Genauigkeit bietet. Inte-ger-Zahlen sind 16 Bit, vordefiniert ist der Unterbereich Byte, Long_Integer-Zahlen sind fĂŒr 32 Bit-Werte vorgesehen.

Weitere gĂ€ngige Erweiterungen wie ‘Else’ in ‘CASE’-Anweisungen, Random Access-Files und bitweise logische Operationen sind ebenfalls in beiden Compilern enthalten.

Eine hochinteressante Erweiterung bietet nur ProPascal: Eine ‘ownerr’-Routine erlaubt es, Run-Time-Fehler, wie z.B. Division durch Null, an eine eigene Fehlerbehandlungsroutine zu ĂŒbergeben. Auf diese Weise kann man Programme sehr sicher gegen Fehler machen.

Der CCD-Compiler erlaubt noch etwas, das eigentlich der Pascal-Philosophie strikt entgegengeht: Variablen dĂŒrfen, wie in Basic, an jeder beliebigen Stelle des Programms definiert werden und sind dann nur allen spĂ€ter definierten Teilen des Programmes bekannt. Eine besonders glĂŒckliche Idee scheint mir das nicht zu sein, aber CCD hat diese Möglichkeit laut Handbuch auf Wunsch zahlreicher Kunden implementiert.

Bild 5: Formatierte Ausgabemöglichkeit bei ST Pascal Plus

Praxis

Mit beiden Systemen, dem Manager von CCD und der Prospero-Workbench, kann man vernĂŒnftig und schnell arbeiten. Mir persönlich gefĂ€llt die Prospero-Workbench etwas besser, weil bei ihr die Ladezeiten fĂŒr den Editor entfallen. DafĂŒr ist der CCD-Editor etwas besser, denn der ProPascal-Editor hat ein kleines Problem, das man von den ersten 1st_Word-Versionen kennt: Der Cursor lĂ€uft nach. Sehr nĂŒtzlich bei der CCD-Shell sind die Kopierkommandos, so daß man die Shell nicht dauernd verlassen muß. In der Praxis ist das Pascal Plus-Paket wegen der kĂŒrzeren Turn-around-Zeiten immer dann im Vorteil, wenn keine schwierigeren Fehler zu suchen sind. Durch den integrierten Source-Level-Debugger macht ProPascal die Fehlersuche extrem angenehm, was manchen Compiler-Zyklus spart. Auf der Disk braucht der CCD-Compiler weniger Platz, weil er ohne Zwischenfiles auskommt. ProPascal erzeugt eines. Der Compiler-Output von CCD ist kompatibel zu anderen Sprachen, oder besser gesagt, der CCD-Linker versteht das Digital-Research-Linkformat.

Prospero benutzt, wie schon in der alten Version, das Objektcode-Format von GST.

Beim Testen der Compiler entstand bei mir immer stĂ€rker der Wunsch, einen Compiler zu besitzen, der die guten Eigenschaften beider Systeme in sich vereinigt. Beide Compiler haben nĂŒtzliche Bibliotheken, praktische Verbesserungen gegenĂŒber der Pascal-Norm, es erlauben z.B. beide modulare Kompilierung. Ich hĂ€tte gerne die Erweiterungen beider. Beide Shells haben einiges fĂŒr sich. Besonders deutlich wird der Wunsch aber bei den Benchmark-Tests: WĂ€hrend der CCD-Compiler wirklich in Windeseile arbeitet (er ist in der neuen Version noch schneller geworden, als er sowieso schon war), also fĂŒr extrem niedrige Turn-around Zeiten sorgt, ist das ProPascal eher etwas gemĂ€chlich. Leider gilt fĂŒr die Ergebnisse der Entwicklung, vor allem im Bereich Fließkommarechnung, genau das Gegenteil: Der CCD-Compiler hat hier seine deutliche Achillesferse. Den kompakteren Code erzeugt nun wiederum das CCD-System, die Fehlersuche bei ProPascal ist durch Probe, wie der Source-Level-Debugger sich zu nennen beliebt, natĂŒrlich ganz erheblich vereinfacht.

Zur Dokumentation einige Benchmarks im einzelnen (siehe Tabelle ). Zusammenfassung: Dieser Compiler-Vergleich ist irgendwie frustrierend. Beide Compiler haben in bestimmten Gebieten ganz besondere VorzĂŒge. Im Handling erweist sich der CCD-Compiler wegen seiner Geschwindigkeit als etwas angenehmer, mir persönlich gefĂ€llt das Arbeiten mit der Prospero-Shell etwas besser, aber der Compiler ist leider ein bißchen langsam. Debuggen ist natĂŒrlich die StĂ€rke von ProPascal, was bei komplexen Programmen den Nachteil der niedrigen Geschwindigkeit durchaus aufwiegen kann. Beim Arbeiten mit GEM ist die Bibliothek des ProPascal-Systems klarer Sieger. Bei den fertigen Programmen dreht sich das Bild: Prosperos Pascal ist plötzlich viel schneller, die Programme sind allerdings um einiges lĂ€nger, weil anscheinend grundsĂ€tzlich ein aufwendigeres RunTime-Paket dazugelinkt wird (je lĂ€nger die Programme, desto weniger fĂ€llt dieser Anteil ins Gewicht...). CCD Pascal rechnet arg langsam, eine Version fĂŒr den Arithmetik-Coprozessor soll da demnĂ€chst Abhilfe schaffen. Aber auch außerhalb der Arithmetik ist CCD-Pascal langsamer in der AusfĂŒhrung, wie die Benchmarks erweisen.

Das Preis-/Leistungs-VerhÀltnis der Pakete ist in Ordnung.

Kurzum: Es soll jeder nach seiner Fasson selig werden, mir gefallen die Pascals beide sehr gut, weil man mit beiden Systemen vernĂŒnftig und professionell arbeiten kann. Trotzdem bin ich sehr gespannt auf das, was die Konkurrenz, allen voran Metacomco, in KĂŒrze auf dem Pascal-Sektor zu bieten hat. Vielleicht findet sich ja doch noch das Pascal meiner WunschtrĂ€ume, das frei von Fehl und Tadel mir nur zur Freude dienet...

CS

74 1 out_char(#27); out_char('f') ; { Cursor off ) 75 1 { zeichnen } 76 1 REPEAT 77 2 FOR index := 0 TO max_draw_lines DO 78 2 BEGIN 79 3 FOR i :=0 TO 3 DO 80 3 BEGIN 81 4 t := ball[i] + vel[i]; 82 4 IF t >= maxfi] 83 4 THEN 84 4 BEGIN 85 5 t := max[i] * 2 - ball[i] - vel[i]; 86 5 vel[i] := -vel[i] 87 4 END; 88 4 IF odd(i) THEN min := min_y ELSE min := min_x; 89 4 IF t < min 90 4 THEN 91 4 BEGIN 92 5 IF t < 0 THEN t := -t ELSE t := min; 93 5 vel[i] := -vel[i]

Beispiel einer formatierten Ausgabe mit Pascal Plus