Heft 4•1990



Bild 1 
Primzahlensieb in Modula-2 (JPI)

Uwe Schulze, Berlin  

Im Test: Programmiersprachen für MS-DOS

Nachdem wir in MP 1 und 3/90 Testberichte zu Programmiersprachen, die unter dem Betriebssystem CPIM laufen, veröffentlichten, vergleichen wir in diesem Beitrag Programmiersprachen, die unter MS-DOS verfügbar sind.

Für MS-DOS steht eine Vielzahl von Compilern und Interpretern zur Verfügung. Damit die zu messenden Laufzeiten der Compiler in einer leicht auswertbaren Größenordnung liegen, wurden für das Primzahlensieb des Erathostenes 100 Iterationen bis 8190 ausgeführt (statt 10 bei den CP/M-Compilern) und die Fibonacci-Funktion zehnmal bis 22 protokolliert. Es ist also gegenüber den CP/M-Compilern der Faktor 10 anzusetzen. Die Compilezeiten beziehen sich auf die Erzeugung eines EXE-Files (bei Turbo 3.0: COM-File) auf Festplatte. Manche Compiler bieten auch die Möglichkeit der Compilierung im Speicher (Turbo-Pascal) oder eines Syntax-Checks ohne Codeerzeugung (Quick-C). Vorteilhaft zum Schreiben portierbarer Quellen sind Optionen zum Erzwingen des jeweils genormten Sprachstandards (Turbo-C). In einer Zeit, in der Produktnamen ohne Präfixe wie Turbo oder Power nicht auszukommen scheinen, mag ein TopSpeed-Modula kein besonderes Aufsehen erregen. Doch der Name hält, was er verspricht. So kann sich die Einschätzung "nett, aber langsam" von Turbo-Pascal-Bauer Anders Hejlsberg über das Werk seines ehemaligen Team-Kollegen Niels Jensen wohl kaum auf das Laufzeitverhalten beziehen, sondern allenfalls auf die Compilezeit – und das auch nur im Vergleich mit Borland-Produkten (Tafel 1). Die erzeugten Programme verdienen zu Recht das Prädikat "handcodiert". Man darf auf TopSpeed-C und die angekündigten Möglichkeiten der Mixed-Language-Programmierung gespannt sein.

Daß Microsoft-C schnellen Code erzeugt, ist gemeinhin bekannt; auch wird erstmals umfassender OS/2-Support geboten. Bemerkenswert ist aber, daß der kürzeste Code von einem Pascal-Compiler kommt: Auch bei den Übersetzungszeiten und im Entwicklungskomfort liegt Turbo-Pascal vorn. Interessant auch zu entdecken, daß es für Verbesserungen Grenzen gibt: In der Tat benötigt Turbo-Pascal 5.0 für die Fibonacci-Funktion – bei unbestrittenen Vorteilen in den anderen Leistungsparametern – mehr Zeit als die Vorgängerversion.

Beeindruckend ist die Laufzeit des C-88-Compilers für die Fibonacci-Funktion. Selbst in Assembler geht es nicht schneller (jedenfalls nicht bei mir). Gleichzeitig zeigt das aber, daß Vorsicht bei der Verallgemeinerung von Aussagen über das Laufzeitverhalten geboten ist. Beim Primzahlensieb rangiert derselbe Compiler unter "ferner liefen". Neben dem Test einiger häufig verwendeter Programmkonstrukte (Speicherzugriffe und Schleifen beim Sieb, Unterprogrammrufe, Parameterübergaben und Möglichkeiten der Rekursion bei Fibonacci) liegt der Wert dieser Benchmarks wohl vor allem in der allgemeinen Akzeptanz und der Möglichkeit des Vergleichs /1/, /2/, /3/. Während Dateiarbeit aufgrund der gemeinsamen Nutzung der BDOS-Funktionen keine signifikanten Unterschiede erwarten läßt, wäre ein ausführlicher Arithmetiktest sicher auch interessant. Die bei C-Compilern verbreitete Möglichkeit der Optimierung brachte nur auf dem P8000 deutlich bessere Ergebnisse (siehe Tafel 2). Hier ist auf Kosten der Compilezeit eine gleichzeitige Optimierung von Codegröße und Laufzeit möglich. Die untersuchten C-Compiler für MS-DOS erlauben wahlweise nur die Optimierung nach einem Zielkriterium (außer Quick-C).

Quick-C wird ab Version 2.0 nicht mehr als Zugabe zum „großen“ Microsoft-C-Compiler, sondern als selbständiges Produkt vertrieben. Gegenüber der Vorgängerversion wurden die erzeugten Programme wieder etwas schneller, allerdings auf Kosten von Übersetzungszeit und Codegröße. Geliefert wird neben einer separaten Kommandozeilenversion des Compilers jetzt auch ein Quick-Assembler – der erste Assembler in integrierter Entwicklungsumgebung. Eine exponierte Stellung unter den C-Compilern nimmt Zortech C++ ein. Dieser Compiler verarbeitet neben Standard-C- und Assembler(!)-Quellen den objektorientierten Sprachstandard nach Stroustrup /4/. Und das nicht als Präcompiler – erzeugt werden direkt ausführbare EXE-Files. Der noch etwas schnellere Zorland-Compiler stammt übrigens vom selben Autor – Walter Bright.

Tafel 1 Testergebnisseauf einem EC 1834 (4,7 MHz) nach Laufzeit des Primzahlensiebes geordnet

*) keine EXE-Dateien, sondern LOD-Files, die mit "M2 Dateiname" abgearbeitet werden

Einige Compiler legen ihre Datenbereiche statisch im EXE-File an. Augenfällig wird das durch die Differenz von etwa 8000 Byte zwischen SIEVE.EXE und FIBO.EXE bei Atztec-C und IBM-Pascal. Die Untersuchung zeigt, daß sich bei der Verkleinerung des Feldes für die Primzahlenberechnung die Filegröße äquivalent ändert.

Als State of the Art gelten heute Compiler mit integrierter Entwicklungsumgebung (vor allem Editor), kontextsensitivem Hilfssystem und Sourcecode-Debugger. Wegbereiter sind die Turbo-Compiler von Borland und die Quick-Compiler von Microsoft. Das bisher fehlende Quick-Pascal (mit objektorientierten Features wie Turbo-Pascal 5.5) ist seit kurzem verfügbar.
Um einen inkrementellen Compiler – wie der Hersteller vorgibt – handelt es sich bei Quick-Pascal zwar nicht (das bedeutete Codeerzeugung parallel zum Editieren), aber die Eingabe von Schlüsselwörtern, Zeichenketten und Kommentaren wird ständig überwacht und farblich verschieden dargestellt. Interessant ist der direkte Vergleich zwischen Turbo- und Quick-Pascal; beide Compiler bieten den gleichen Sprachumfang bis Turbo 5.0 (Quellfiles können problemlos ausgetauscht werden) und vergleichbare objektorientierte Erweiterungen.

Literatur
/1/ Strauß, D.: Wettstreit zweier C-Compiler. mc, München 8 (1989) 1, S.112
/2/ Wollschläger, P.: Topspeed-Modula – Turbo statt Tuning. Computer persönlich, Haar (1989) 4. S. 97
/3/ Zerbe, K.: C für Profis. C't, Hannover (1988) 7, S. 58
/4/ Stroustrup, B.: Die C++ Programmiersprache. Addison WesIey 1987



nach oben