von Christoph Bach Jeder hat wohl schon mal davon gehört: BASIC ist langsam. Wenn Du Geschwindig- keit brauchst mußt Du in Assembler pro- grammieren. Das ist eine recht allge- meine Feststellung. Man müsste die Geschwindigkeit messen können. Zu diesm Zweck wurden Benchmark-Programme erdacht. WICHTIG: steht für das Semikolon Was ist ein Benchmark-Test? Um die Geschwindigkeit verschiedener Computer oder verschiedener Software vergleichen zu können, wurden Programme entwickelt, deren Laufzeit auf den verschiedenen Systemen gestoppt wurde. Das Sieb des Eratosthenes wird oft dafür verwendet, ein Algorythmus, der Primzahlen berechnet. Ganz so schwer muß man sich das Leben aber nicht machen. Vier Mini-Benchmarks Manche Dinge gibt es in allen Pro- grammiersprachen: z.B. Schleifen. Der Kern dieser Mini-Benchmarks ist eine Schleife, die 10000 mal durchlaufen wird. Beim ersten Benchmark wird sie leer durchlaufen, beim zweiten eine Integer-Division, beim dritten eine Realzahl-Division (1) und beim vierten ein Aufruf eines leeren Unterprogrammes eingefügt. Getestete Sprachen Getestet wurde das eingebaute ATARI-BASIC, das weitverbreitete TURBO-BASIC und drei Public-Domain Programmiersprachen: ACE-C, Draper Pascal und FIG-FORTH. Als Referenzuhr wurde die Systemuhr in den Speicherzellen 20 und 19 verwendet. In BASIC sieht der dritte Test so aus: 10 POKE 19,0:POKE 20,0 20 FOR I=1 TO 10000:J=10/3:NEXT I 30 ? PEEK(19)*256+PEEK(20) Die ausgegebene Zahl stellt die Anzahl der vergangenen fünfzigstel Sekunden dar. Der besseren Genauigkeit wegen habe ich sie nicht durch 50 geteilt. Der vierte Test in BASIC: 10 POKE 19,0:POKE 20,0 20 FOR I=1 TO 10000:GOSUB 500:NEXT I 30 ? PEEK(19)*256+PEEK(20) 40 END 500 RETURN Der zweite Test in ACE-C: main() $( int i,j poke(19,0) poke(20,0) for (i=1i<10001i++) $( j=10/3 $) i=peek(19) j=peek(20) printf("%dÖn",i*256+j) getchar() $) in Draper Pascal: PROGRAM ZEIT VAR I,J:INTEGER BEGIN POKE(19,0) POKE(20,0) FOR I:=1 TO 10000 DO BEGIN J:=10/3 END I:=PEEK(19) J:=PEEK(20) WRITELN(I*256+J) REPEAT UNTIL KEYPRESS END. und in FIG-FORTH: : ZEIT 0 19 ! 10000 1 DO 10 3 / DROP LOOP 19 C@ 256 * 20 C@ + . Die anderen Tests sind alle nach dem gleichen Schema aufgebaut. Die Ergebnisse: Leer Int Real GOSUB ATARI-BASIC 1073 ---- 6345 2579 TURBO-BASIC 352 ---- 2281 777/560 ACE-C 437 574 5604 520 Draper Pascal 970 1826 6204 1425 FIG-FORTH 51 1973 ---- 108 Der erste Wert beim Unterprogrammaufruf in TURBO-BASIC beschreibt die Zeit für das normale GOSUB, der zweite für ein EXEC. Tatsächlich: das ATARI-BASIC ist die langsamste Programmiersprache. Allerdings befindet sie sich in guter Gesellschaft mit Draper-Pascal. Wie kommt das? Draper Pascal ist kein Compiler! Der Quellcode wird in einen Zwischencode (P-Code) übersetzt, und dann interpretiert. Bei den Fließ- kommazahlen liegen die Ergebnisse für ATARI-BASIC, ACE-C und Draper-Pascal sehr dicht beieinander. TURBO-BASIC sticht sie alle aus. Das kommt daher, daß TURBO-BASIC als einzige Pro- grammiersprache nicht mit den Fließ- kommaroutinen des Betriebssystems arbeitet, sondern eigene, schnellere eingebaut hat. Etwas erstaunt hat mich, daß FIG-FORTH, bei sonst guten Zeiten, bei der Integerdivision so schlecht abgeschnitten hat. Es wird schon beinahe von den Fließkommaroutinen von TURBO-BASIC eingeholt. Weitere Eigenschaften, wie das Zeichnen von Linien etc. habe ich nicht mit in die Tests aufgenommen, da sich praktisch alle Programme dabei des Betriebssystems bedienen. Es würde mich sehr interessieren, wenn jemand diese Tests mit anderen Pro- grammiersprachen (Kyan-Pascal, Quick, Assembler) durchführen würde. Ich glaube, daß solche Werte auch für den Erwerb einer Programmiersprache von Bedeutung sind. (1) Herwig Feichtinger Genauigkeit kostet Zeit (Basic-Benchmarks) mc 6/1983 S.28-29