home *** CD-ROM | disk | FTP | other *** search
- Cluster weist gegenüber Modula folgende Abweichungen auf (ModulaII-Programme
- können dennoch übersetzt werden):
-
- - Funktionen können komplexe Typen als Rückgabewerte haben, wie
- Records oder Arrays
-
- -Funktionen können sogar offene Typen wie z.B. Strings
- zurückgeben, auch als Parameter an VAR-Parameter. z.B.
- Str3:=Concat(Seg(str1,4,5),Seg(str2,6,7));
-
- -Strings sind nicht nur als ARRAY OF CHAR mit einem Null-Byte am
- Ende definiert, sondern als RECORDs mit der Länge als Word
- an erster Position, wobei das terminierende Null-Byte nicht in der
- Länge enthalten ist:
-
- STRING = RECORD
- len : INTEGER;
- data : ARRAY OF [0..MAX] CHAR
- END
-
- Diese Definition bietet viele Vorteile, da man, je nachdem, ob
- man alle Zeichen eines Strings auf eine bestimmte weise behandeln will
- (z.B. kopieren), oder ob man eine String parst (z.B. umwandlung in eine Zahl
- jeweils die schnelleste Methode verwendenkann, entweder suche nach dem Null-Byte,
- oder eine FOR-Schleife über die Länge, z.B. besonders schnelle Stringvergleiche.
-
- -CASE wurde eliminiert und zu einem Unterfall von IF (IF KEY)
- gemacht. Damit wurde auch der OF-Operator für alle
- Bedingungen zugänglich (z.B. IN IF,WHILE,REPEAT). Im gegensatz zu
- Modula können sowohl bei IF KEY, als auch bei OF als Vergleichswerte oder
- -schranken nicht nur Konstanten sondern auch Variablen verwendet werden.
-
- -Die IF THEN END wurde um ein AND_IF erweitert, das einen
- eigenen ELSE-Fall haben kann.
-
- -Ebenfalls wurde die WHILE Struktur um ein OR_WHILE sowie ein
- ELSE erweitert, womit die Verwendung von LOOP so gut wie
- überflüssig wird. Außerdem kann man eine WHILE-Bedingung
- durch das Schlüsselwort KEY wie ein CASE aufbauen, wobei der
- ELSE-Fall den Aussprung aus der Schleife bewirkt. Dadurch
- konnte im gesammten Kompiler ein LOOP vermieden werden.
-
- -Module können nicht nur einen BEGIN-Teil sondern auch einen
- CLOSE-Teil besitzen, welcher am Programmende, sowie bei
- einem Absturz aufgerufen wird, somit entfallen die lästigen
- TermProceduren um z.B. ein File oder ein Fenster am Ende zu
- schließen.
-
- -Ein Punkt, der vor allem C-Programmierer bisher von Modula
- abgehalten hat, nämlich die ewig Langen Importlisten am
- Programmanfang, wurde entschärft, indem sich mehrere
- Bezeichner in einem Definitions-Modul zu einer Importgruppe
- zusammenfassen lassen, dabei kann eine Gruppe auch
- Bezeichner aus fremden Modulen sowie andere Gruppen
- enthalten. Importiert man von einem anderen Modul eine
- Gruppe, importiert man damit auch alle darin enthaltenen
- Bezeichner.
- Außerdem kann man auch innerhalb Prozeduren Module
- importieren.
- Bei unqualifiziertem Import kann der Name des Moduls
- geändert werden, so daß das stereotype wiederholen eines
- langen Modulnamens entfällt.
-
- -Es besteht die Möglichkeit erweiterbare Records zu
- definieren. Wobei Erweiterungen zu ihren Vätern
- zuweisungskompatibel bleiben.
-
- -Konstanten von komplexen Typen sind möglich, so kann man
- beim öffnen einer Screen, direkt eine Konstante vom Typ
- NewScreen an OpenScreen übergeben.
-
- -Es können offene Arrays als Typen deklariert werden. Von
- diesen Typen, können Konstanten gebildet, Zeiger darauf
- definiert, Parameter von Prozeduren deklariert, oder ein
- anderer Typ mit fester Elementanzahl definiert werden, wobei
- dieser Typ zu dem offenen Typen kompatibel ist.
-
- -WITH kann nicht nur auf Records angewendet werden, sondern
- auch für Pointer und Arrays. "With`t" man eine Variable
- einfachen Typs, wird diese im Bereich der WITH-Anweisung in
- ein Prozessorregister gelegt, was natürlich einen enormen
- Geschwindigkeitsgewinn zur Folge hat.
-
- -Variablen und Prozedur-Parameter können als
- Registervariablen definiert werden.
-
- -Die Conditioncodes des Prozessors können direkt abgefragt
- werden z.B:
-
- REPEAT
- DEC(i)
- UNTIL = ;
-
- Diese Schleife wird solange durchlaufen bis das ZeroFlag
- gesetzt wird. Sollte man nur in Low-Level-Modulen verwenden.
-
-
- -Liegt eine Pointer-Variable in einem Register, kann man
- direkt den Postincrement- bzw. den Predecrement-Mode des
- MC-68000 verwenden: p1+^:=p2+^. Ebenfalls besser in Low-Level-Modulen
- kapseln.
-
- -Laufzeitfehler werden mit Quelltextangabe gemeldet und
- verursachen keine Abstürze.
-
- -Automatische Variableninitalisierung, sowohl auf Modul als auch
- auf Prozedurebene. Statische Variablen in Prozeduren, erlauben
- ein sauberes Geheimnissprinzip.
-
- VAR i : INTEGER := 10;
- q := ARRAY OF INTEGER:(0,1,2,3,4,5,6,7);
-
- -Vorinitialisierte Prozedurparameter, und Variablenübergabe durch
- Schlüsselwörter
-
- PROCEDURE Bla(x,y : INTEGER := 0);
- ...
-
- Bla;Bla(1);Bla(y:=10);Bla(1,2)...
-
-
- -Prozeduren mit beliebiger Anzahl von Übergabeparametern.
-
- PROCEDURE Concat(REF strs : LIST OF STRING):STRING;
- ...
-
- WriteString(Concat("Bla bla",Text,"Dummer Text..."));
-
- -Überladen von Aufzählungstypelementen. Der effektive Wert wird
- aus dem Kontext oder durch Qualifizierung ermittelt.
-
- TYPE a = (Apfel,Birne,Kirsche)
- b = (Banane,Pflaume,Birne);
-
- -Exceptionhandling durch TRY...EXCEPT und RAISE/ASSERT.
-
- -Resourcetracking durch Contexte und TRACK...END erlaubt saubere
- programmierung, ohne Gefahr und Verwalltungsüberaufwand.
-
- -Objektorientierte Elemente: Klassen, Objekte, Methoden,
- Vererbung, Generizität, dynamisches Binden, Mehrfacherben etc.
-
-
- Nach dieser Aufzählung von Abweichungen, die Sie gewiß auch als
- Vorteile Anerkennen werden noch ein paar Worte zu Cluster
- allgemein:
-
- -Durch Ausnutzung der obengenannten maschinennahen Elementen,
- sowie durch verwendung spezieller 68XXX-Befehle (z.B.
- MOVEM,CMPM), durch Peephole-Optimizing und durch optimierung
- auf Short-Branches, erreicht der Compiler auf einem normalen
- Amiga ,ohne Turbokarte, mit FastMem, über 1600 Dhrystones/s.
- Auf einem Amiga mit 33MHz 68030 erreicht er 13000 Dhrystones/s.
-
- -Cluster kann reentrante Programme im kleinen Datenmodell
- sowie Libraries und Devices erzeugen.
-
- -Der Compiler ist ein schneller Single-Pass-Compiler (ca 6000
- Zeilen pro Minute.
-
- -Der Linker linkt selektiv, d.h. nur Objekte, die benutzt
- werden, werden eingelinkt. Somit erhält man trotz großer
- Module sehr kompakte Programme.
-
- -Cluster besteht aus einer integrierten Entwicklungsumgebung,
- diese besteht aus einem schnellen
- Editor (Macros, mehrere Textfenster, Blockfunktionen,
- Iconify, eigene Tastaturbelegung, Tabindent), dem Compiler,
- einem Make, sowie einem Loader. Alle Funktionen können
- direkt aus dem Editor aufgerufen werden, man kann also aus
- dem Editor Programme compilieren, maken, linken, oder
- starten.
-
- -Cluster bietet die Möglichkeit der bedingten Compilierung,
- d.h. Sie können durch Flags festelegen, welche Programmteile
- übersetzt werden sollen. Zum Beispiel wenn Sie ein Programm
- in einer Englischen und einer Deutschen Verion herstellen
- wollen, müssen Sie nur ein Flag umsetzen und neu
- Compilieren.
-
- Nähere Informationen entnehmen Sie bitte dem Sprachreport.