Megamax Modula-2

Nach längerem Warten haben Modula-2 Fans eine neue Alternative: Megamax Modula-2 ist erschienen. Das in der Bundesrepublik entwickelte Paket wartet mit einer ausgefeilten Arbeitsumgebung und umfangreichen Bibliotheken auf. Wir testeten, wie sich der Neuling in der inzwischen größer gewordenen Konkurrenz der Modula-Systeme schlägt.

Für DM 398,- erhält man von Application Systems Heidelberg vier Disketten, davon zwei doppelseitig. Änderungen gegenüber dem Handbuch sind in einer Info-Datei vermerkt.

Installation

Bei Diskettensystemen ist keine weitere Installation notwendig. Beim Booten wird automatisch eine RAM-Disk erzeugt und einige Dateien hineinkopiert. Das System wird dann von Diskette gestartet und greift auf die Dateien aus der RAM-Disk zu. Zur Installation auf Festplatte müssen die entsprechenden Dateien kopiert werden. Dieser Vorgang nimmt ungefähr eine halbe Stunde in Anspruch, in der 1,5 MB an Dateien und Programmen bewegt werden.

Bei der Installation kann die Ordnerstruktur beliebig gewählt werden. Mit der Datei SHELL.INF können Suchpfade für alle Bestandteile frei festgelegt werden. Einen Ausschnitt aus dem File sehen Sie in Bild 1 bei der Bearbeitung im Editor.

Die Umgebung

Die über 200 KByte große Shell von Megamax Modula-2 (MM2) verhält sich auf den ersten Blick wie der Desktop mit einigen zusätzlichen Funktions-Icons (Bild 2). Laufwerke können durch Anklicken der Laufwerkssymbole geöffnet werden. In den Dateifenstern können alle Desktop-Operationen wie Kopieren, Umbenennen oder Info-Anzeige durchgeführt werden.

Der Umgang mit dem Modula-System ist sehr objektorientiert: Zum Edieren einer Source wird die Datei auf das “Edieren”-Icon geschoben und damit der Editor gestartet. Analog läuft der Aufruf des Compilers oder das Ausführen eines Programms ab. Wer intensiv Programme entwickelt, kann auf die Benutzung des GEM-Desktop völlig verzichten, da die Shell dessen Funktionen zur Dateipflege beinhaltet.

Da beim Programmieren die Mausbenutzung oftmals hinderlich ist, kann die Shell auch über die Tastatur benutzt werden. Anstelle des Anklickens auf Funktionssymbole treten Control-Tasten.

Aber die Umgebung ist mehr als eine reine Unterstützung beim Turn-Around zwischen Editor und Compiler. Megamax Modula-2 benutzt das Load-Time-Linking Konzept, das es in frühesten Modula-Zeiten schon einmal auf dem Apple II gab. Das Zusammenbinden der verwendeten Module geschieht erst beim Start des Hauptmoduls - im Gegensatz zum herkömmlichen Vorgehen, bei dem ein Linker ein komplettes Programm zur Ausführung erzeugt.

Bild 1: Die Konfigurationsdatei im Editor

Beim Start eines Moduls erkennt die Umgebung, und das ist hier die Shell, welche Module importiert werden und führt den Bindevorgang beim Laden aus. Wenn drei Programme das InOut-Modul importieren, belegt es daher nur einmal Platz auf dem Massenspeicher. Der Linkerlauf muß dafür bei jedem Programmstart ausgeführt werden, ist allerdings sehr schnell, da ja nur im RAM gearbeitet werden muß.

Die Shell ist in der Lage, Module oder Programme resident im RAM bereitzuhalten, so daß Diskettenzugriffe entfallen können. Da für das Load-Time-Linking die Shell erforderlich ist, gibt es auch einen konventionellen Linker, der zum Abschluß der Programmentwicklung ein stand-alone Programm erzeugt.

Die komplette Shell liegt im Modula-Quelltext bei, so daß individuelle Änderungen kein Problem sind. Ein erfreulicher Service von Application Systems, der einem auch Einblicke in interne Vorgänge des Systems erlaubt.

Bild 2: Die Shell

Der Editor

Application Systems legt als Editor eine Version des auch einzeln erhältlichen Toolbox-Editors bei. Die Einbindung eines anderen Editors - die Anleitung schlägt hier Tempus vor -ist ohne weiteres über das genannte SHELL.INF möglich.

Der Editor ist nicht speziell auf Modula zugeschnitten. Er bietet alle Funktionen, die für das Programmeschreiben notwendig sind, wobei er erheblich schneller als der TDI-Modula Editor ist. Die verschiedenen Menüs sehen Sie in Bild 3. Der Großteil der Funktionen ist erfreulicherweise auch über Tastatur aufrufbar. Neben den Edierfunktionen finden sich einige zusätzliche Features, so z.B. zehn verschiedene Textfenster und eine Terminalemulation. Der Toolbox-Editor vervollständigt das System und ist für eine komfortable Programmentwicklung angemessen.

Bild 3: Die Editor-Funktionen

Der Compiler

Der in Assembler geschriebene Compiler arbeitet mit einer erstaunlichen Geschwindigkeit. Im Vergleich mit TDI ist er ungefähr doppelt so schnell (Bild 4a).

Es handelt sich um einen Ein-Pass-Übersetzer nach dem neuesten Modula-Standard. Der REAL-Typ ist mit 64 Bit implementiert, was eine Genauigkeit von 13.5 Stellen ermöglicht. Dafür ist LONGREAL entfallen, was bei der Übernahme von Modula-Programmen unpraktisch ist.

Bei der Übersetzung können verschiedene Compileroptionen zur Überprüfung von Bereichsgrenzen etc. gesetzt werden. Das Einfügen von Sourcetext aus anderen Dateien ist über ein Include möglich. Mit $P+ kann ein ausführliches Protokoll erstellt werden, das sogar eine Angabe über die Compiliergeschwindigkeit enthält.

Bei den schon von der Besprechung des Jefferson Modula-Compiler bekannten Benchmarks schnitt Megamax Modula schlecht ab (Bild 4b). Alle Operationen, bei denen Ausdrücke ausgewertet werden, laufen langsamer als bei TDI ab. Grund dafür ist die völlig stackorientierte Berechnung von Expressions.

Der Code wird nicht weiter optimiert, benutzt keine Register für die Speicherung von Zwischenergebnissen und läßt konstante Ausdrücke zur Laufzeit berechnen. An dieser Stelle hat das System eine ordentliche Verbesserung nötig.

Hervorragend schnell hingegen sind die REAL-Berechnungen implementiert. Megamax Modula hat im Vergleich mit den gleichlangen LONG-REAL von TDI um ein Viertel der Rechenzeit die Nase vorne.

Die Bibliotheken sind, da teilweise in Assembler optimiert ebenfalls überaus flink. Die getesteten String-Operationen sind doppelt so schnell wie bei den anderen verfügbaren Modula-Systemen.

Trifft der Compiler auf einen Fehler, wird die Übersetzung abgebrochen und man hat die Möglichkeit, sofort den Editor zu starten. Dabei wird der Cursor auf die entsprechende Stelle gesetzt und die Fehlermeldung angezeigt. Wer Turbo-Pascal kennt, weiß eine solche Integration zu schätzen. Allerdings wäre es wünschenswert, wenn der Compiler nach einem Fehler wieder aufsetzen könnte, um alle Fehler im Sourcecode zu ermitteln. Auch wenn der Wechsel Compiler-Editor-Compiler sehr schnell und ohne den Umweg über die Shell möglich ist, würde ein solches Vorgehen in vielen Fällen zeitsparend sein.

Bild 4: Der Compiler bei der Arbeit...

Der Assembler

Megamax Modula-2 integriert einen vollständigen 68000-Assembler. Dazu wurde als Statement ein ASSEMBLER...END-Block in die Syntax aufgenommen. Innerhalb dieses Blocks kann ein Maschinenprogramm mit Motorola-Mnemonics notiert werden.

In den Assemblerstatements lassen sich die im Modula-Programm definierten Bezeichner verwenden; auch der Aufruf von Modula-Prozeduren ist kein Problem. Das Handbuch erläutert detailliert Registerbenutzung, Parameterübergaben und den Zugriff auf Modula-Variablen und -Datenstrukturen wie Arrays oder Records. Gerade für die Geschwindigkeitsoptimierung ist der Assembler außerordentlich hilfreich. Da der volle 68000-Befehlssatz unterstützt wird, kann das Modula-System auch als Assembler benutzt werden. Auch wenn Puristen wahrscheinlich wegen der Prozessorabhängigkeit aufschreien werden, ist diese Erweiterung ideal für schnelle Programme. Die Routinen werden hochsprachlich formuliert und ausgetestet und dann in zeitkritischen Teilen mit Assembler ausprogrammiert. Überhaupt erschließt sich hiermit für Modula-Programmierer endlich die Assemblerwelt. Bisher war eine Benutzung der bekannten Assembler-Systeme aufgrund der völlig unterschiedlichen Linkformate nicht möglich.

Der Linker

Da für das Load-Time-Linking die Shell benötigt wird, müssen Programme, die weitergegeben werden, mit einem herkömmlichen Linker zu .PRG-Dateien gemacht werden.

Der Linkvorgang (Bild 5) dauert etwa so lange wie beim TDI-Linker. Allerdings werden die Programme nicht optimiert - Routinen aus den externen Modulen werden auch dann eingebunden, wenn sie nicht importiert werden. Das Ergebnis sind Programme, die merkbar länger werden, als beim TDI-System.

Beim TDI-Linker, der eine Option zum Ein- und Ausschalten der Optimierung besitzt, hat sich gezeigt, daß unoptimierte Programme zwischen 20 und 40 Prozent länger als nötig sind.

Der Linker erfüllt seine Aufgabe zufriedenstellend; eine Optimierung wäre wünschenswert und soll wohl auch in Arbeit sein.

Modula-2 Benchmarks

Nr. TDI Modula-2 JS Modula-2 MM Modula-2testet ...
Min.TicksMin.Ticks Min.Ticks
1 0:07 1334 0:07 1489 0:07 1480 Prozeduraufruf
2 1:42 20339 1:33 18548 2:59 35753 Addition
3 1:21 16277 1:18 15518 1:58 23506 Increment
4 1:47 21418 1:38 19634 2:59 35839 Additionsoptimierung
5 1:27 17311 1:23 16550 2:08 25554 Increment als Vergleich
6 2:09 25835 1:57 23480 3:48 45580 INTEGER-Addition
7 2:09 25833 1:57 23471 3:48 45581 CARDINAL-Addition
8 1:11 14228 1:18 15543 1:42 20437 FOR-Schleife
9 1:21 16278 1:02 12437 1:42 20398 REPEAT-Schleife
10 1:21 16191 1:18 1552 1:57 23487 WHILE-Schleife
11 1:04 12743 0:54 10791 1:15 15057 INTEGER-Parameter
12 1:04 12739 0:54 10791 1:17 15472 INTEGER VAR-Parameter
13 1:06 13130 0:59 11821 2:19 27807 RECORD-Parameter
14 0:34 6755 0:30 5977 0:41 8167 RECORD VAR-Parameter
15 0:49 9837 0:49 9780 1:33 18556 Konst anten-Optimierung
16 0:51 10249 0:51 10201 1:33 18552 Konst anten-Optimierung
17 1:28 17655 1:26 17171 2:06 25117 Expression-Optimierung
18 1:42 16822 1:22 16354 1:59 23884 Expression-Optimierung
19 0:37 7431 0:36 7102 0:55 10933 Zwischenergebnis-Optimierung
20 0:37 7435 0:35 7099 0:55 10931 Zwischenergebnis-Optimierung
21 0:09 1831 0:11 2154 0:13 2608 IF-Statement
22 0:13 2645 0:13 2688 0:16 3226 IF durch CASE ausgedrückt
23 0:38 7689 0:33 6667 0:41 8188 CASE-Statement
24 0:40 7960 0:39 7804 1:03 12630 CASE durch IF ausgedrückt
25 0:47 9441 1:03 12636 REAL-Arithmetik
26 2:05 24924 1:32 18495 LON GREAL-Arithmetik
27 1:52 22380 5:42 68358 REAL-Library
27a 5:39 67797 2:35 30990 LONGREAL-Library
28 1:21 16264 1:21 16135 0:40 8016 String-Library
29 2:10 26075 2:07 25437 2:13 26618 ARRAY-Zugriffe
30 0:09 1896 0:10 2056 0:17 3398 RECORD-Zugriffe

Alle Zeiten mit time-Kommando von Guläm gemessen

Die Bibliotheken

Die über 70 Bibliotheksmodule gehen weit über die üblicherweise vorhandenen GEM-Module hinaus. Bei den AES- und VDI-Libraries werden für alle Datenstrukturen eigene Record-Typen vordefiniert, die für eine übersichtliche GEM-Programmierung sorgen. So werden z.B. alle Messagearten eines EventMessage-Calls in einem Varianten Record dargestellt, so daß man beispielsweise bei einer Redraw-Aufforderung das neu zu zeichnende Rechteck in einem Rectangle-Typ erhält. Auch wenn sehr viele Bezeichner zu merken sind, werden GEM-Programme dadurch endlich lesbarer.

Was man beim TDI-Compiler als Toolkit dazukaufen muß, ist hier standardmäßig vorhanden. Es stehen Module für die Event-Verwaltung und Textfenster oder die Manipulation von Objektbäumen zur Verfügung. Ein Beispiel für den Komfort der Routinen ist die Anmeldung einer GEM-Applikation, die automatisch eine Workstation öffnet und alle notwendigen Handles zurückgibt.

Für systemnahe Programme gibt es Prozeduren, die in sauberem Hochsprachenstil z.B. das Setzen der Exception-Routinen oder den Zugriff auf Systemvariablen ermöglichen.

Bild 5:... und der Linker am Schuften

Die Modula-Standard-Module liegen in erweiterter Form vor. Das Filesystem kann mit mehreren Suchpfaden arbeiten, die Konvertierroutinen erkennen automatisch Zahlen, die mit “$” oder “%” als hexadezimal oder binär ausgezeichnet sind. Das InOut-Modul eröffnet für Textausgaben ein GEM-Textfenster, somit gehören TOS-Programme wohl der Vergangenheit an. Dafür braucht der Programmierer keinen Finger zu rühren; alle Routinen sind darauf vorbereitet. GEMDOS wird mit vielen Zusatzfunktionen unterstützt. So sind z.B. für Directory-Manipulationen eigene Prozeduren vorhanden, die das Ändern von Dateiattributen, einfaches Ermitteln und Setzen des aktuellen Ordners oder auch das Aufteilen eines Filebezeichners in Namen und Extension übernehmen.

Zur einfacheren Übernahme von TDI-Programmen sind auch Module für GEMDOS, BIOS und XBIOS vorhanden, die identische Bezeichner verwenden. Allerdings wird ob der besseren Megamax-Unterstützung für GEMDOS von deren Verwendung abgeraten.

Viele kleinere Module enthalten die Routinen, die man immer schon schreiben wollte und fast immer benötigt. So z.B. das Konvertieren eines Datums im GEMDOS-Format in einen String wie "9. März 1988”.

Auch weitere Module zur Bearbeitung von komplexeren Datenstrukturen wie Listen und Bäume werden mitgeliefert. Der Umfang, die Konzeption und die Funktionalität der Bibliotheken ist beeindruckend und übertrifft das TDI-System bei weitem. Ein Modula-System lebt auch von den vorhandenen Libraries -Megamax Modula zeigt, wie ein Entwicklungssystem dem Programmierer Arbeit abnehmen sollte.

Bild 6: Ein Laufzeitfehler...
Bild 7:... seine Folgen bei Megamax Modula-2 ...
Bild 8:... und seine Anzeige im Editor

Entwarnen

Das Debugging ist bis jetzt bei keinem Entwicklungspaket befriedigend gelöst worden. Megamax Modula-2 glänzt hier durch ausführliche Fehlermeldungen, die Anzeige der Fehlerstelle im Quelltext und eine Einzelschrittausführung mit Source-Anzeige.

Beim Auftreten eines Laufzeitfehlers werden in einer Alertbox umfangreiche Informationen über die Fehlerstelle gegeben (Bild 6). Angezeigt werden die Fehlerart, verursachendes Modul und die Prozedur, in der der Fehler entstand. Mit den Buttons “Back” und “Frwd” hat man dann die Möglichkeit, die Aufrufkette zu inspizieren.

Bei Abbruch durch “Exit” erscheint eine weiter Auswahl (Bild 7), mit der man entweder zur Shell zurückkehren, das Programm unter Ignorierung des Fehlers weiterführen oder den Scanner starten kann.

Der Scanner verbindet die Fehler-Informationen mit dem Quelltext und startet dann den Editor. Dieses Vorgehen erinnert stark an Turbo-Pascal und führt zu einem Ergebnis wie in Bild 8. Der Editor zeigt die Stelle im Sourcetext samt der Fehlermeldung an. Schon damit wird das Debugging zum Kinderspiel und erspart viele Überlegungen.

Falls die Fehlerursache nicht so offensichtlich ist, wie in dem abgebildeten Beispiel, bietet Megamax Modula-2 ein weiteres Bonbon: Durch Importieren des Debug-Moduls und Setzen der Compileroption $D+ lassen sich die Programme im Einzelschrittmodus ausführen (Bild 9). Dabei wird das Debug-Modul durch zusätzlich in den Code eingefügte Traps nach jedem Programmschritt aufgerufen. In einem Fenster werden dabei die jeweilige Quelltext-Zeile und die Ergebnisse der gerade berechneten Ausdrücke angezeigt. Daraufhin mögliche Kommandos zeigen z.B. die aktuellen Registerinhalte oder die Codeadresse der Instruktionen an. Ausgaben können dezimal oder hexadezimal notiert werden. Durch verschiedene Steuervariablen des Debug-Moduls lassen sich die Untersuchungen in einem Programm auf einen bestimmten Block oder Programmteile beschränkten, so daß potentielle Fehlerquellen ausführlich überwacht werden können.

Der Debugging-Teil des Systems ist für ein Compilersystem geradezu ideal. Die Fehlersuche läßt sich adäquat abstufen und sollte jedes auch noch so unerklärliches Problem lösen. Megamax Modula-2 übertrifft hier alle anderen Entwicklungspakete um Fängen und bietet dem Programmierer eine bisher unerreichte Unterstützung.

Bild 9: Einzelschritte in Hochsprache

Was noch ?

Inzwischen haben die Vertreiber von Entwicklungssystemen eingesehen, daß zu einem Compiler für den Atari ST ein Resource-Construction-Set gehört. So enthält Megamax Modula-2 im Gegensatz zum TDI-Modula das schon von Lattice-C und anderen Entwicklungssystemen bekannte NRSC (Bild 10).

Das Programm ermöglicht auf sehr komfortable Weise die Erstellung von Resourcen, ohne die GEM-Programme nicht möglich sind. Die im Original von Kuma stammende Applikation liegt in der Version 1.1 als deutschsprachige Anpassung vor, die auch mit dem Blitter und dem Mega ST arbeitet.

Einige der Bibliotheksmodule sind in Source-Text beigelegt. Für Assemblerprogrammierer befindet sich der aus der Public-Domain bekannte Maschinen-Monitor TEMPLMON in der Version 1.12. Kein Wunder, denn Thomas Tempelmann gehört neben Jürgen Müller und Manuel Chakravarty zu den Entwicklern.

Diverse Beispielprogramme demonstrieren die Fähigkeiten des Systems und geben Hilfestellung bei systemnahen Tricks.

Das Handbuch

Das Handbuch kommt in einem Ringbuch - leider keine Spiralbindung - und ist vorbildlich aufgemacht. Im Textteil werden auf über 130 Seiten die Benutzung des Systems, der Compiler, der Assembler und die Bibliothekskonzepte ausführlich beschrieben. Der sehr detailliert geschriebene Text bietet sowohl dem Einsteiger als auch dem Experten alle Informationen über das System.

Die harten Fakten, wie Fehlermeldungen oder der Aufbau der Codemodule, finden sich in dem umfangreichen Anhang. Dabei nehmen die Listings der Definitionsmodule der Libraries den größten Teil ein. Die hervorragenden Kommentierungen zu dem Routinen klären alle Fragen, die im Textteil eventuell noch offen geblieben sind. Beim Umfang der Bibliotheken wird der Anhang zu einer wahren Fundgrube.

Die letzten beiden Anhänge enthalten eine Kreuzreferenz aller in den Bibliotheken verwendeten Bezeichner und ein 19-seitiges Register zum Textteil. Das Handbuch wird dadurch zu einem exzellent zu benutzenden Nachschlagewerk.

Das Manual ist hervorragend gelungen. Wenn ein Handbuch ideal sein kann, dann dieses. Man würde sich wünschen, wenn andere Softwarehersteller sich hieran ein Vorbild nehmen würden.

Support

Von einem in der BRD entwickelten Produkt kann der Anwender zu Recht eine weiterreichende Unterstützung erwarten. Über eine Münchner Mailbox ist es inzwischen möglich, direkten Kontakt mit den Entwicklern aufzunehmen. Sinnvolle Anderungswünsche sollen gegen eine geringe Aufwandsentschädigung durchgeführt werden.

Die von Application Systems schon bei Signum! angewandte preiswerte Update-Politik soll auch bei Modula-2 weitergeführt werden. Der Distributor will bei Interesse den Vertrieb von nützlichen Utilities zum System -wie bei Megamax-C - übernehmen.

Fazit

Die Arbeitsumgebung der Shell ist sehr praktisch und konzeptuell neu. Sie ist weit besser, als der TDI-Desktop. Der Compiler arbeitet sehr flott und bietet schnelle und genaue Fließkommaoperationen. Der erzeugte Code ist etwas langsam und müßte besser optimiert werden.

Mit dem Assembler lassen sich auch zeitkritische Programme verwirklichen. Das Paket ist zudem als Hochsprache und als Übersetzer für Bitfanaktiker doppelt nutzbar.

Der Linker erfüllt seine Aufgabe; im Hinblick auf Optimierung läßt er sich noch verbessern. Das Debugging-Konzept sucht seinesgleichen; es läßt sich für den Atari ST kaum noch verbessern.

Bild 10: Resource-Entwurf mit NRSC

Die mitgelieferten Bibliotheksmodule lassen kaum noch Wünsche offen, und auch wer viel programmiert wird selten zusätzliche Module schreiben müssen. Mit Editor und Resource-Construction-Set ausgerüstet ist das Paket für jede Programmieraufgabe optimal ausgestattet. Das Handbuch läßt keinen Wunsch offen und ergänzt das System nicht nur, sondern wertet es auf.

Das lange Warten auf Megamax Modula-2 - hauptsächlich durch die Programmierung der Shell und der Bibliotheken verursacht - hat sich gelohnt. Es handelt sich im Ganzen auch trotz der genannten Wermutstropfen Ausdruckauswertung und nichtoptimierender Linker um das beste Modula-2 System für den Atari ST. Der Support von Application-Systems läßt erwarten, daß auch diese letzten Flecke auf der ansonsten überaus weißen Weste beseitigt werden.

Robert Tolksdorf

Ein-Pass-Übersetzer für Modula-2

Modula-2 hat eine längere Entwicklung hinter sich. Vater der Sprache ist Niklaus Wirth, der auch schon Pascal entworfen hat. Die allererste Implementierung wurde auf der von Wirth konzipierten Workstation “Lilith” vorgenommen. Zu diesem Zeitpunkt war die Sprache wohldefiniert und speziell auf die Architektur dieses Rechners ausgelegt. In einer ersten Revision wurde kleine Änderungen an der Syntax vorgenommen, die vorerst als Standard-Modula galten. Der TDI-Compiler ist eine Implementierung dieser Version. Inzwischen existiert eine dritte Sprachdefinition, ebenfalls von Wirth, in der wiederum kleine Änderungen enthalten sind, die allerdings nur kosmetischer Natur sind. Die wirkliche Änderung liegt in der Abstimmung der Sprache auf Ein-Pass-Compiler. Dabei geht der Übersetzer nur einmal über den Quelltext. Das hat allerdings zur Folge, daß jeder benutzte Bezeichner, sei es für Prozeduren, Typen oder Variablen vorher definiert werden muß (dies was in der “alten” Version nicht notwendig).

Das neue Schlüsselwort FORWARD erlaubt es, einen Bezeichner zu deklarieren, ohne z.B. die Prozedur schon auszuformulieren. Ein Name kann nur so auch dann verwendet werden, wenn er textuell nach der Verwendung deklariert ist.

Diese Änderung ist leider ein Schritt rückwärts und wohl mit Wirths Eigenheit zu begründen, schon bei der Sprachdefinition die konkrete Implementierung im Auge zu haben. Denn durch die Einführung der FOR-WARD-Deklarationen wird es möglich, Ein-Pass-Compiler zu schreiben. Sie sind logischerweise schneller als ihre Vorgänger mit mehreren Pässen, da ein Programmtext “in einem Rutsch” übersetzt wird.

Alle neueren Modula-Compiler halten sich an den neuesten Standard, so auch Megamax und Jefferson. TDI-Modula soll inzwischen auch in einer Ein-Pass-Version erhältlich sein.



Aus: ST-Computer 05 / 1988, Seite 100

Links

Copyright-Bestimmungen: siehe Über diese Seite