Nejen samotné osobní počítače, ale i jejich programování prošlo ohromným vývojem. Pokud si chcete zavzpomínat, oprašte Atari a znalosti Basicu.
Pro porovnání Basiců mezi sebou i mezi jednotlivými počítači jsem sestrojil velmi jednoduché programy a měřil dobu jejich běhu. Nejedná se o žádné přelomové dílo a vůbec si nekladu za cíl nějaké zásadní srovnávání, takže hodnoty jsou jen orientační. Použity jsou jen takové aritmetické funkce a postupy, které by snad každý Basic na osmibitových počítačích měl zvládnout bez problémů.
Zde je první program a následovat budou výsledky:
10 PRINT "ZACATEK";
20 INPUT A
25 POKE 18,0:POKE 19,0:POKE 20,0
30 DIM A$(20)
40 DIM B$(20)
50 FOR I=1 TO 100
60 A$="HELLO "
70 B$="WORLD!"
80 A$=B$
90 X=RND(0)
100 X=SIN(X)
110 PRINT I;" ";X;CHR$(65)
120 X=RND(0)
130 X=COS(X)
140 X=EXP(1)
150 X=LOG(X)
160 B=VAL("100")
170 C=LEN(A$)
180 X=ABS(X)
190 IF X<1000 THEN GOSUB 300
195 FOR J=1 TO 5
196 Y=1000*SQR(17*7)/3*17/123456
197 NEXT J
200 NEXT I
210 GOTO 500
300 X=0
320 RETURN
500 T=INT((PEEK(19)*256+PEEK(20))/50)
510 PRINT "KONEC";T
Program jsem spustil v Atari Basicu a pro srovnání i v Turbo Basicu, zkompiloval jsem jej, no a zkusil jsem verzi s výpisem hodnot a bez výpisu (vymazán řádek 110), abych mohl porovnat, nakolik samotný výpis zpomaluje běh. To tajuplné POKE na řádku 25 a následné PEEK na řádku 500 slouží k měření času běhu programu.
Zde jsou naměřené hodnoty:
Atari Basic s výpisem: 134 s
Atari Basic bez výpisu: 128 s
Turbo Basic s výpisem: 34 s
Turbo Basic bez výpisu: 30 s
Zkompilovaný pomocí Turbo Basic Kompileru:
S výpisem: 33 s
Bez výpisu: 27 s
Pro možnost snadného porovnání s jinými počítači jsem pro jistotu vypustil veškeré matematické funkce a ponechal jen onen matematický vzorec. Program tedy vypadá takto:
10 PRINT "ZACATEK";
25 POKE 18,0:POKE 19,0:POKE 20,0
50 FOR I=1 TO 1000
195 FOR J=1 TO 5
196 Y=1000*SQR(17*7)/3*17/123456
197 NEXT J
200 NEXT I
450 T=INT((PEEK(19)*256+PEEK(20))/50)
500 PRINT "KONEC ";T
Výsledky jsou následující a řekněme si, že zcela evidentně ukazují, jak je Atari Basic pomalý. Zároveň lze na obou testech pozorovat, že kompilace programu v Turbo Basicu jeho běh nijak zásadně nezrychlí. Buď je Turbo Basic tak dokonalý, že převod programu v něm do strojového kódu již zázraky nezajistí, nebo není kompilátor nijak zvlášť optimalizovaný. Jsem skeptik, takže podle mne B je správně…
Atari Basic: 860 s
Turbo Basic: 199 s
Zkompilovaný program: 186 s
Výše uvedený algoritmus jsem zapsal i v Pascalu, konkrétně v Kyan Pascalu. Rychlost je zmíněna níže.
program (input, output)
begin
var i, j : integer
f: float;
writeln ('zacatek');
for i:= 1 to 1000 do begin
for j:=1 to 5 do begin
f = 1000*sqr(17*7)/3*17/123456;
end;
end;
writeln ('konec');
end.
Kyan Pascal: 157 s
Pokusil jsem dát dohromady i další velmi primitivní prográmek, který na rozdíl od předchozího testuje rychlost basicovské grafiky. Zde je třeba rovnou upozornit, že ten nebude možné testovat všude – jak jsme si říkali, C64 nezná grafické příkazy. Grafika přes PEEK a POKE je na něm šíleně pomalá a lze se důvodně obávat, že pokud bychom jej tímto způsobem upravili a spustili, bylo by nutné psaní seriálu na několik týdnů přerušit.
Zde je tedy prográmek a dosažené výsledky:
5 POKE 18,0:POKE 19,0:POKE 20,0
10 GRAPHICS 8
15 FOR J=0 TO 10
20 FOR I=0 TO 100
25 COLOR 1
30 PLOT 0,I
40 DRAWTO 100,I
50 NEXT I
55 PRINT J
60 NEXT J
80 T=INT((PEEK(19)*256+PEEK(20))/50)
90 PRINT T
Atari Basic: 67 s
Turbo Basic: 60 s
Zkompilovaný program: 57 s.