GFA-BASIC-Compiler 3.0 - Ein geschenkter Gaul mit großer Leistung

Endlich hat ihn die Firma GFA-Systemtechnik fertiggestellt, den GFA-BASIC-Compiler 3.0. Von vielen Programmierern wurde er bereits lange erwartet, vom Hersteller immer wieder angekündigt, und sein Erscheinungsdatum mußte ständig verschoben werden - wohl auch wegen betriebsinterner Umstrukturierungen im Hause GFA.

Im Gegensatz zum Compiler 2.0 fällt dem Benutzer zunächst das umfangreiche Handbuch positiv auf. Mit immerhin 80 Seiten werden allerlei Unterschiede zum Interpreter aufgeführt und Möglichkeiten zur Optimierung von compilierten Programmen gegeben. Nicht so positiv wird der Benutzer beim ersten Blick in die Benutzeroberfläche des Programms überrascht sein. Hier blieb nämlich keineswegs „alles beim Alten“, so daß nur noch eine Box „Compilieren“ angeklickt werden mußte und fertig. Nein, beim Compiler 3.0 gestaltet sich ein Compilier Vorgang auf den ersten Blick eher recht kompliziert. Eine Vielzahl von Parametereinstellungen verwirrt den Neuling im Compiler 3.0.

Bei genauerem Studieren des Handbuches stellt sich jedoch heraus, daß der Käufer keineswegs erschrecken muß. solange er „normale“ Programme ohne Programmierkniffe und allerlei Hintertürchen erstellt. Unter solchen Umständen gestaltet sich der Compiliervorgang nämlich etwas schwieriger, das Programm muß teilweise geändert werden, und wehe, einige Parametereinstellungen stimmen nicht...

Bei „sauber programmierter“ Software wird die Vielzahl der einstellbaren Optionen gewöhnlich nicht verändert, wodurch sich nach kurzer Eingewöhnungsphase ganz vernünftig arbeiten läßt. Denn hat man im Menüprogramm (das bemerkenswerterweise als GFA-Sourcecode mitgeliefert wird und so jederzeit auf eigene Bedürfnisse umprogrammiert werden kann) erst mal alle Parameter eingestellt, so genügen gewöhnlich ein paar Knopfdrücke. Außerdem wurde bei der Version 3.0 strikt zwischen „Compilieren“ und „Linken“ getrennt, so daß sich auch Unterprozeduren aus verschiedenen Programmen „Zusammenhängen“ lassen. Ferner bietet die neue Version des Compilers auch die Möglichkeit. Accessories zu erstellen und Routinen aus „C“-Compilern in seine GFA-Programme einzubinden.

Sicherheit & Fehlerabfrage

Zugunsten höherer Programmablaufgeschwindigkeit und kürzerer Programmlänge hat man bei GFA ein neues Konzept verfolgt: Nach dem Molto „Es werden sowieso nur ausgetestete (=fehlerfreie) Programme compiliert...“, wurde auf Fehlerabfragen verzichtet. Kommt es also zu einem Überlauf des Zahlenbereiches (Integerüberlauf), so muß man beim Compilat mit „scheinbar unerklärlichen Programmreaktionen“ und nicht leicht auffindbaren Programmfehlern vorliebnehmen, weil es keine Warnbox gibt, die auf einen Zahlenüberlauf hinweist. Ebenso wird auch der Index eines Feldes nicht überprüft. Versucht man also aus einem auf 20 Elemente dimensionierten Feld das 25. Element anzusprechen, so erfolgt keine Fehlermeldung. Stattdessen wird möglicherweise undefinierbarer „Unsinn“ ausgegeben.

Der Programmierer sollte also darauf achten, wirklich nur solche Programme zu compilieren, bei denen er von hoher Fehlerfreiheit ausgehen kann, da der GFA-BASIC-Compiler 3.0 keine Sicherheitsabfragen ins Compilat einbaut. Ansonsten kann es zu tagelanger Fehlersuche kommen, die meist mit verzweiflungsähnlichen Zuständen endet...

Benchmark Interpreter Compiler Faktor
1 a 0,95 sek 0,595 sek. 1.6 x
1 b 0,48 sek. 0,11 sek. 4,4 x
1 c 0.445 sek. 0,075 sek. 5,9 x
2 20 sek. 0,92 sek. 2,2 x
3a 4,125 sek. 0,175 sek. 23,6 x
3b 1,415 sek. 0,175 sek. 8,1 x
4 a 8,695 sek. 1.935 sek. 4,5 x
4b 4,38 sek. 0,44 sek. 10 x

Tabelle 1: Geschwindigkeitsvergleich zwischen Compiler und Interpreter

Geschwindigkeit & Programmverkürzung

Wie bereits erwähnt, hat GFA groben Wert aut eine hohe Ablaufgeschwindigkeit gelegt und dafür auf Sicherheit verzichtet. Im Handbuch werden viele Hinweise gegeben, wie sich Programme „compilergerecht“ aufbereiten und somit beschleunigen lassen. Hier finden sich im Handbuch Tips zu einfachen Additionen und Multiplikationen sowie Divisionen. Ferner erstreckt sich die Optimierung auf kompliziertere Rechnungen mit Verschachtelungen etc. Auch bei Schleifen innerhalb des Compilats labt sich ein Geschwindigkeitszuwachs erzielen, aber durch gezielten Einsatz von globalen und lokalen Variablen labt sich ebenfalls eine Steigerung erzielen. Durch verschiedene Ablage von Zeichenketten im Programm kann ebenso wertvoller Speicherplatz gespart werden. Hierzu beschreibt das Handbuch anhand von Beispielen die verschiedenen Möglichkeiten und begründet die unterschiedliche Länge oder Geschwindigkeit mit dokumentierten Maschinensprache-Listings.

Optionen

Der Compiler 3.0 bietet dem Programmierer die Möglichkeit, verschiedenste Optionen für einen Compiliervorgang einzustellen. Der Programmierer hat die Möglichkeit, den zur Verfügung stehenden Speicher für das Programm einzugrenzen. Bei 2.0-Programmen reservierte der Compiler nämlich bei Programmstart zunächst den gesamten freien Speicher und gab nach dem Befehl „RESERVE“ den übrigen Platz wieder frei. Um aber zum Beispiel ein Accessory zu erstellen, ist es nötig, dab nicht der gesamte Speicher reserviert wird. Hierzu kann man durch Parametereinstellungen festlegen, wieviel Speicher beim Start vom Programm beansprucht werden darf’.

Ebenso labt sich festlegen, ob die STOP-Tasten nach jedem Befehl nur einmal oder gar nicht überprüft werden sollen, was auch für die Anweisungen EVERY/AFTER gilt. Vorsicht ist geboten bei der Programmunterbrechung, da die Abbruchprüfung nur nach „CODE-generierenden“ Anweisungen erfolgt. So kann es zum Beispiel bei einer DO-LOOP Schleife ohne CODE-generierende Anweisungen dazu kommen, dab man aus dem Programm einfach nicht mehr „rauskommt“, weil keine STOP-Tastenabfrage durchgeführt wird. Ein Anhang, welche Befehle CODE generieren und welche nicht, fehlt bisher leider im Handbuch.

Auch das Ein- oder Ausschalten des Interrupts für EVERY, AFTER, das Drücken der Tasten Control/Shift/Alternate, die Funktionstastenbelegung, das Einschalten des Mauszeigers bei Diskettenfehlern und ähnlichem sowie die Eingabe von Sonderzeichen mittels ALTERNATE & ASCII Code läßt sich so beeinflussen. Ebenso kann die SELECT-CASE-Abfrage auf Zwei- und Vier-Byte-Werte eingegrenzt werden, was wiederum zu einer Beschleunigung des Programmes führen kann. Weiterhin ist eine Wahl zwischen Tempo-und Programmlängenoptimierung möglich.

Wie bereits beim Compiler 2.0 hat der User die Wahl zwischen Fehlermeldungen als Nummer oder als Text und kann statt Bomben auch Fehlernummern ausgeben lassen.

Neu ist die Möglichkeit. Prozeduren wahlweise als GFA-BASIC-oder als 68000-Unterroutinen zu compilieren oder beim Linken „C“-Routinen einzubinden.

Benchmark-Test Nr. 1 a:

PRINT "Real-Zeit: ";
t=TIMER  
FOR I=1 TO 20000 
    INC i 
NEXT 1  
PRINT (TIMER-t)/200

Benchmark-Test Nr. 1 b:

PRINT "Int-Zeit: ";
t=TIMER  
FOR i%=1 TO 20000 
    INC i%  
NEXT i%  
PRINT (TIMER-t)/200

Benchmark-Test Nr. 1 c:

PRINT "Word-Zeit: ";
t=TIMER  
FOR i&=1 TO 20000 
    INC i& 
NEXT i&
PRINT (TIMER-t)/200

Benchmark-Test Nr. 2:

PRINT "Stringzuweisung: "; 
t=TIMER  
DIM a$(10000)  
FOR i&=1 TO 10000 
    a$(i&)="Test“  
NEXT i&  
PRINT (TIMER-t)/200

Die Benchmarks, die für Tabelle 1 benutzt wurden.

Benchmark-Test Nr.3 a:

PRINT "Addition ";
t=TIMER  
i%=0  
FOR i&=1 TO 20000 
    i%=i%+1 
NEXT i&  
PRINT (TIMER-t)/200 
PRINT i%

Benchmark-Test Nr. 3 b:

PRINT "Addition ADD ";
t=TIMER  
i%=0  
FOR i&=1 TO 20000 
    ADD i%,1 
NEXT i&  
PRINT (TIMER-t)/200 
PRINT i%

Benchmark-Test Nr. 4 a:

PRINT "Addition  ";
t=TIMER  
i%=10
FOR i&=1 TO 20000 
    i%=(i%*2+2)/2 
NEXT i& 
PRINT (TIMER-t)/200 
PRINT i%

Benchmark-Test Nr. 4b:

PRINT "Addition ADD "; 
t=TIMER  
i%=10  
FOR i&=1 TO 20000 
    MUL i%,2 
    ADD i%,2 
    DIV i%,2 
NEXT i&  
PRINT (TIMER-t)/200 
PRINT i%

Accessories

Auf der mitgelieferten Diskette befinden sich auch einige kürzere Beispielprogramme, die zum Beispiel die Programmierung eines Accessories aufzeigen. Außerdem wird auf 12 Seiten im Handbuch genauestens erklärt, wie man bei der Programmierung der kleinen „Helferlein“ vorgehen muß. Das Programm läbt sich durch den Compiler so erstellen, daß es sowohl als *.ACC als auch als *.PRG verwendet werden kann, ohne neu compiliert werden zu müssen. Der Compiler 3.0 kann also auch als Accessory-Entwicklungssystem verwendet werden.

Fazit

Der Compiler 3.0 stellt mit dem GFA-BASIC zusammen eine gute Entwicklungsoberfläche dar, die fast alle Möglichkeiten ausschöpft. Angesichts des Preises von nur DM 10,- (zehn!) für dieses Programm kann der User sowieso zufrieden sein, denn „einem (fast) geschenkten Gaul schaut man nicht ins Maul“. GFA-BASIC-3.0-Käufern wird der Compiler nun kostenlos beim Kauf beigelegt oder anderen Besitzern kostenfrei zugesandt.

Aber auch der Betrag von zehn Mark sollte keinen vom Kauf zurückhalten, der den Compiler nicht umsonst dazubekommt. GFA-BASIC 3.0 wird sicherlich noch einmal einen unheimlichen „Qualitätszuwachs“ auf dem Sektor Entwicklungssysteme erfahren.


Ralf Peiler
Aus: ST-Computer 09 / 1989, Seite 57

Links

Copyright-Bestimmungen: siehe Über diese Seite