home *** CD-ROM | disk | FTP | other *** search
/ Global Amiga Experience / globalamigaexperience.iso / compressed / development / clusterdemo.dms / clusterdemo.adf / Sprachreport.lha / Cluster-Features < prev    next >
Text File  |  1993-03-08  |  7KB  |  181 lines

  1. Cluster weist gegenüber Modula folgende Abweichungen auf (ModulaII-Programme
  2. können dennoch übersetzt werden):
  3.  
  4. - Funktionen können komplexe Typen als Rückgabewerte haben, wie
  5.   Records oder Arrays
  6.  
  7. -Funktionen können sogar offene Typen wie z.B. Strings
  8. zurückgeben, auch als Parameter an VAR-Parameter. z.B.
  9. Str3:=Concat(Seg(str1,4,5),Seg(str2,6,7));
  10.  
  11. -Strings sind nicht nur als ARRAY OF CHAR mit einem Null-Byte am
  12. Ende definiert, sondern als RECORDs mit der Länge als Word
  13. an erster Position, wobei das terminierende Null-Byte nicht in der
  14. Länge enthalten ist:
  15.  
  16. STRING  = RECORD
  17.        len  : INTEGER;
  18.        data : ARRAY OF [0..MAX] CHAR
  19.      END
  20.  
  21. Diese Definition bietet viele Vorteile, da man, je nachdem, ob
  22. man alle Zeichen eines Strings auf eine bestimmte weise behandeln will
  23. (z.B. kopieren), oder ob man eine String parst (z.B. umwandlung in eine Zahl
  24. jeweils die schnelleste Methode verwendenkann, entweder suche nach dem Null-Byte,
  25. oder eine FOR-Schleife über die Länge, z.B. besonders schnelle Stringvergleiche.
  26.  
  27. -CASE wurde eliminiert und zu einem Unterfall von IF (IF KEY)
  28. gemacht. Damit wurde auch der OF-Operator für alle
  29. Bedingungen zugänglich (z.B. IN IF,WHILE,REPEAT). Im gegensatz zu
  30. Modula können sowohl bei IF KEY, als auch bei OF als Vergleichswerte oder
  31. -schranken nicht nur Konstanten sondern auch Variablen verwendet werden.
  32.  
  33. -Die IF THEN END wurde um ein AND_IF erweitert, das einen
  34. eigenen ELSE-Fall haben kann.
  35.  
  36. -Ebenfalls wurde die WHILE Struktur um ein OR_WHILE sowie ein
  37. ELSE erweitert, womit die Verwendung von LOOP so gut wie
  38. überflüssig wird. Außerdem kann man eine WHILE-Bedingung
  39. durch das Schlüsselwort KEY wie ein CASE aufbauen, wobei der
  40. ELSE-Fall den Aussprung aus der Schleife bewirkt. Dadurch
  41. konnte im gesammten Kompiler ein LOOP vermieden werden.
  42.  
  43. -Module können nicht nur einen BEGIN-Teil sondern auch einen
  44. CLOSE-Teil besitzen, welcher am Programmende, sowie bei
  45. einem Absturz aufgerufen wird, somit entfallen die lästigen
  46. TermProceduren um z.B. ein File oder ein Fenster am Ende zu
  47. schließen.
  48.  
  49. -Ein Punkt, der vor allem C-Programmierer bisher von Modula
  50. abgehalten hat, nämlich die ewig Langen Importlisten am
  51. Programmanfang, wurde entschärft, indem sich mehrere
  52. Bezeichner in einem Definitions-Modul zu einer Importgruppe
  53. zusammenfassen lassen, dabei kann eine Gruppe auch
  54. Bezeichner aus fremden Modulen sowie andere Gruppen
  55. enthalten. Importiert man von einem anderen Modul eine
  56. Gruppe, importiert man damit auch alle darin enthaltenen
  57. Bezeichner.
  58. Außerdem kann man auch innerhalb Prozeduren Module
  59. importieren.
  60. Bei unqualifiziertem Import kann der Name des Moduls
  61. geändert werden, so daß das stereotype wiederholen eines
  62. langen Modulnamens entfällt.
  63.  
  64. -Es besteht die Möglichkeit erweiterbare Records zu
  65. definieren. Wobei Erweiterungen zu ihren Vätern
  66. zuweisungskompatibel bleiben.
  67.  
  68. -Konstanten von komplexen Typen sind möglich, so kann man
  69. beim öffnen einer Screen, direkt eine Konstante vom Typ
  70. NewScreen an OpenScreen übergeben.
  71.  
  72. -Es können offene Arrays als Typen deklariert werden. Von
  73. diesen Typen, können Konstanten gebildet, Zeiger darauf
  74. definiert, Parameter von Prozeduren deklariert, oder ein
  75. anderer Typ mit fester Elementanzahl definiert werden, wobei
  76. dieser Typ zu dem offenen Typen kompatibel ist.
  77.  
  78. -WITH kann nicht nur auf Records angewendet werden, sondern
  79. auch für Pointer und Arrays. "With`t" man eine Variable
  80. einfachen Typs, wird diese im Bereich der WITH-Anweisung in
  81. ein Prozessorregister gelegt, was natürlich einen enormen
  82. Geschwindigkeitsgewinn zur Folge hat.
  83.  
  84. -Variablen und Prozedur-Parameter können als
  85. Registervariablen definiert werden.
  86.  
  87. -Die Conditioncodes des Prozessors können direkt abgefragt
  88. werden z.B:
  89.  
  90.    REPEAT
  91.      DEC(i)
  92.    UNTIL = ;
  93.  
  94. Diese Schleife wird solange durchlaufen bis das ZeroFlag
  95. gesetzt wird. Sollte man nur in Low-Level-Modulen verwenden.
  96.  
  97.  
  98. -Liegt eine Pointer-Variable in einem Register, kann man
  99. direkt den Postincrement- bzw. den Predecrement-Mode des
  100. MC-68000 verwenden: p1+^:=p2+^. Ebenfalls besser in Low-Level-Modulen
  101. kapseln.
  102.  
  103. -Laufzeitfehler werden mit Quelltextangabe gemeldet und
  104. verursachen keine Abstürze.
  105.  
  106. -Automatische Variableninitalisierung, sowohl auf Modul als auch
  107. auf Prozedurebene. Statische Variablen in Prozeduren, erlauben
  108. ein sauberes Geheimnissprinzip.
  109.  
  110. VAR i :  INTEGER := 10;
  111.     q := ARRAY OF INTEGER:(0,1,2,3,4,5,6,7);
  112.  
  113. -Vorinitialisierte Prozedurparameter, und Variablenübergabe durch
  114. Schlüsselwörter
  115.  
  116. PROCEDURE Bla(x,y : INTEGER := 0);
  117. ...
  118.  
  119. Bla;Bla(1);Bla(y:=10);Bla(1,2)...
  120.  
  121.  
  122. -Prozeduren mit beliebiger Anzahl von Übergabeparametern.
  123.  
  124. PROCEDURE Concat(REF strs : LIST OF STRING):STRING;
  125. ...
  126.  
  127. WriteString(Concat("Bla bla",Text,"Dummer Text..."));
  128.  
  129. -Überladen von Aufzählungstypelementen. Der effektive Wert wird
  130. aus dem Kontext oder durch Qualifizierung ermittelt.
  131.  
  132. TYPE a = (Apfel,Birne,Kirsche)
  133.      b = (Banane,Pflaume,Birne);
  134.  
  135. -Exceptionhandling durch TRY...EXCEPT und RAISE/ASSERT.
  136.  
  137. -Resourcetracking durch Contexte und TRACK...END erlaubt saubere
  138. programmierung, ohne Gefahr und Verwalltungsüberaufwand.
  139.  
  140. -Objektorientierte Elemente: Klassen, Objekte, Methoden,
  141. Vererbung, Generizität, dynamisches Binden, Mehrfacherben etc.
  142.  
  143.  
  144. Nach dieser Aufzählung von Abweichungen, die Sie gewiß auch als
  145. Vorteile Anerkennen werden noch ein paar Worte zu Cluster
  146. allgemein:
  147.  
  148. -Durch Ausnutzung der obengenannten maschinennahen Elementen,
  149. sowie durch verwendung spezieller 68XXX-Befehle (z.B.
  150. MOVEM,CMPM), durch Peephole-Optimizing und durch optimierung
  151. auf Short-Branches, erreicht der Compiler auf einem normalen
  152. Amiga ,ohne Turbokarte, mit FastMem, über 1600 Dhrystones/s.
  153. Auf einem Amiga mit 33MHz 68030 erreicht er 13000 Dhrystones/s.
  154.  
  155. -Cluster kann reentrante Programme im kleinen Datenmodell
  156. sowie Libraries und Devices erzeugen.
  157.  
  158. -Der Compiler ist ein schneller Single-Pass-Compiler (ca 6000
  159. Zeilen pro Minute.
  160.  
  161. -Der Linker linkt selektiv, d.h. nur Objekte, die benutzt
  162. werden, werden eingelinkt. Somit erhält man trotz großer
  163. Module sehr kompakte Programme.
  164.  
  165. -Cluster besteht aus einer integrierten Entwicklungsumgebung,
  166. diese besteht aus einem schnellen
  167. Editor (Macros, mehrere Textfenster, Blockfunktionen,
  168. Iconify, eigene Tastaturbelegung, Tabindent), dem Compiler,
  169. einem Make, sowie einem Loader. Alle Funktionen können
  170. direkt aus dem Editor aufgerufen werden, man kann also aus
  171. dem Editor Programme compilieren, maken, linken, oder
  172. starten.
  173.  
  174. -Cluster bietet die Möglichkeit der bedingten Compilierung,
  175. d.h. Sie können durch Flags festelegen, welche Programmteile
  176. übersetzt werden sollen. Zum Beispiel wenn Sie ein Programm
  177. in einer Englischen und einer Deutschen Verion herstellen
  178. wollen, müssen Sie nur ein Flag umsetzen und neu
  179. Compilieren.
  180.  
  181. Nähere Informationen entnehmen Sie bitte dem Sprachreport.