Przypisy.
[1] Modele 400/800. W serii XL/XE stanowi integralną część komputera.
[2] Możliwe jest zapisanie programu w Atari BASIC-u poleceniem LIST, a następnie odczytanie go pod Microsoft BASIC-em poleceniem MERGE. Jednak ze względu na różnice w składni, uruchomienie takiego programu bez znaczących poprawek jest ograniczone do bardzo prostych konstrukcji.
[3] W pakiecie Advan BASIC dostępny jest program dostosowujący kod Atari BASIC-a do Advan BASIC-a, ale i tak konieczne mogą się okazać ręczne modyfikacje programu źródłowego.
[4] Ograniczona do zmiany koloru linii tła w GRAPHICS 0.
[5] Istnieją cztery stałe liczbowe: %0, %1, %2, %3, zajmujące tylko 1 bajt pamięci.
[6]Przy użyciu specjalnego programu dostarczanego w pakiecie Advan BASIC.
[7] Nie działają prawidłowo poza DIR i SHELTER.
Uwagi ogólne dotyczące testu szybkości.
– Wykorzystane zostały nieco zmienione przeze mnie testy zamieszczone w Bajtku nr 1/1988.
– Pomiar został dokonany przy użyciu emulatora Altirra 2.80-test45 w systemie PAL, hardware 600/800XL, Atari BASIC wersja C. W innych warunkach wyniki mogą się różnić dlatego należy je traktować jako orientacyjne.
– BASIC XL i XE – pomiar w trybie FAST.
– Advan BASIC – kompilator standardowy.
– Współczynnik szybkości obliczony został poprzez zsumowanie wyników testów odpowiednio od nr 1 do nr 8 i od nr 1 do nr 9 z użyciem liczb rzeczywistych i podprogramów typu GOSUB.
– Należy pamiętać, że w testach pojawia się ledwie kilka poleceń, głównie operacji matematycznych i trygonometrycznych, wspólnych dla wszystkich implementacji, tak naprawdę nieodzwierciedlających rzeczywistej siły zaawansowanych BASIC-ów (BASIC XE, Advan BASIC, Turbo BASIC XL). Przewaga zaawansowanych BASIC-ów przy umiejętnym wykorzystaniu ich możliwości, w tym poleceń niedostępnych w uboższych odmianach, może być znacznie większa niż wynikałoby to z tych testów.
Moja subiektywna charakterystyka BASIC-ów.
Atari BASIC – jaki jest, każdy widzi… Jak na swoje 8 kB i czas, w którym powstał, całkiem przyzwoity i popularny do dziś. Z wad można wymienić powolność (na szczęście dostępne są kompilatory) i brak kilku istotnych poleceń takich jak MOVE czy DPEEK/DPOKE. Szczególnie brak MOVE powoduje, że trudno napisać program nie podpierając się procedurami w języku maszynowym. Brak pętli warunkowej typu REPEAT...UNTIL i polecenia IF...ELSE...ENDIF wymusza częste użycie skoku do numeru linii, co przy złożonych programach zaciera czytelność kodu.
Atari Microsoft BASIC II – niektórzy uważają, że jego wady równoważą z nawiązką zalety. Z pewnością osoba programująca w Atari BASIC-u i podobnych interpreterach musi zmienić dotychczasowe przyzwyczajenia. I nie wynika to tylko z różnic w składni poleceń, ale też z pewnych ograniczeń, których nie narzuca Atari BASIC, na przykład jako parametr GOTO czy GOSUB musi być podana stała liczbowa. Używanie zmiennych w tym przypadku jest niedozwolone. Niektóre polecenia działają też inaczej niż można byłoby się spodziewać. Ponadto na swoje potrzeby rezerwuje znaki o kodach 0 i 124 oraz 6. stronę pamięci. Zajmuje też 16 kB RAM, czyli mamy do dyspozycji o 8 kB RAM mniej niż w Atari BASIC-u. W zamian dostajemy mechanizm ułatwiający tworzenie programów składających się z dwóch i więcej części (zmienne wraz z nazwami i wartością mogą być przenoszone między programami), możliwość rezerwacji obszaru pamięci na własne cele, w tym na generator znaków i PMG bez zawracania sobie głowy gdzie ten obszar jest umiejscowiony. To za użytkownika robi interpreter. Podobnie, tu ciekawostka, działa polecenie MOVE, które zawsze „automatycznie” dobiera kierunek transferu, tak aby nie nastąpiło nadpisanie danych. Można też używać liczb całkowitych, które zajmują mniej miejsca w pamięci i pozwalają na szybsze wykonywanie programu. Pomocna jest możliwość wykorzystania definicji, a także tablic, których ilość wymiarów ograniczona jest tylko dostępnym RAM-em. Irytujący za to jest brak polecenia DIR. Interpreter ten jest szacunkowo szybszy od Atari BASIC-a o 100-150%. Jednak tak samo, jak w Atari BASIC-u im dalej od początku programu, tym bardziej on zwalnia. Ogólnie, mimo ciekawych możliwości używanie tego interpretera można przyrównać do jazdy samochodem bez wspomagania kierownicy.
OSS BASIC XL – jest niemal równie powolny co Atari BASIC. Jego rozwinięciem jest OSS BASIC XE i w tym kontekście bliższe zapoznanie się z nim raczej nie ma sensu.
OSS BASIC XE – jeden najbardziej rozbudowanych i jeden z dwóch najszybszych (obok Turbo BASIC-a XL) interpreterów. Obsługa PMG, procedury, zmienne lokalne, możliwość konfiguracji systemu, opcjonalne wykorzystanie 128 kB RAM (z czego na sam kod programu przeznaczone jest 64 kB) to oprócz szybkości największe atuty BASIC-a XE. Są też wady. Brak kompilatora, konieczność posiadania kartridża BXE, aby uruchomić program (współcześnie alternatywą jest emulator). Wprawdzie można użyć runtime od BASIC-a XL, ale wtedy nie można używać poleceń niewystępujących w BASIC-u XL, co czyni BASIC XE równie słabym, jak wspomniany XL. W takiej sytuacji warto rozważyć użycie Altirry BASIC-a. W tej klasie BASIC-a, dziwić może też brak liczb całkowitych, pętli bez końca, pauzy (PAUSE) czy możliwości umieszczania tekstu w trybach graficznych. Niemniej jest wygodny, przejrzystości kodu nie ustępując Turbo BASIC-owi XL, a jeśli to nieznacznie. Ze względu na wykorzystanie rozszerzonej pamięci można go szczególnie polecić do pisania dużych, złożonych programów.
Advan BASIC – słowo advan[ced] nie jest tu przypadkowe, jest rzeczywiście najbardziej zaawansowanym BASIC-em, w dodatku nietypowym, bo wyłącznie kompilatorem. Jako jedyny pozwala na wstawki w asemblerze, generowanie nie tylko efektów dźwiękowych, ale też muzyki niezależnie od wykonywanego programu, a także na animację obiektów PMG. Jak w praktyce Advan BASIC się sprawuje trudno mi powiedzieć. Dotychczas nie miałam okazji napisać niczego poważniejszego w tym języku. Na pewno istotną wadą jest zintegrowanie go z własnym DOS-em, co wymusza używanie tylko tego konkretnego, prawdopodobnie zgodnego z DOS 2.5. Problemem może być też to, że jakakolwiek zmiana w kodzie programu skutkuje ponowną kompilacją, co przy dłuższych programach może być uciążliwe. Niemniej jest to najpotężniejszy z BASIC-ów, chociaż nie wynika to wprost z testów szybkości. Głównym powodem jest to, co napisałem w „uwagach ogólnych dotyczących testu szybkości”. Ponadto standardowy kompilator Advana używa sprzętowego pakietu procedur matematycznych. Podobno (nie sprawdzałem osobiście) szybkie procedury posiada Kompilator Optymalizujący, wchodzący w skład pakietu Advan BASIC. Jednak i tu szczególnie „ciężkie” operacje matematyczne (dzielenie, potęgowanie, funkcje trygonometryczne) nie są wykonywane zauważalnie szybciej, np. test 10 zajmuje 1654 sekundy po optymalizacji, wobec 1660 sekund bez optymalizacji. Jednakże z drugiej strony, jeśli wykorzystamy składnię i możliwości tego języka, unikając zarazem wspomnianych „trudnych” operacji, to możliwe jest uzyskanie naprawdę imponującej szybkości. Żeby nie być gołosłownym, przykład:
100 ?"*** TEST ***"
110 POKE 18,0:POKE 19,0:POKE 20,0
120 K=0
130 REPEAT
140 K=K+1
150 TEST@
160 UNTIL K=1000
170 T=65536*PEEK(18)+256*PEEK(19)+PEEK(20)
180 ?"CZAS:";T/50;" RAMEK:";T
190 END
200 SUB TEST@
210 A=K*2+4-1
220 SUBEND
Czas wykonania (sekundy):
5,86 liczby rzeczywiste;
4,62 liczby rzeczywiste, kompilator optymalizujący;
1,70 liczby całkowite;
0,62 liczby całkowite, kompilator optymalizujący;
Dla porównania:
6,40 Turbo BASIC XL;
1,40 Turbo BASIC XL skompilowany.
Turbo-BASIC XL 1.5 – najpopularniejszy obok Atari BASIC-a. Dlaczego? Od początku był dostępny jako darmowy, w formacie plikowym, to ważkie argumenty, ale niewystarczające. Poza tym jest szybki (a jeszcze posiada kompilator), pozostawia nawet nieco więcej wolnego miejsca na program niż Atari BASIC. Posiada też w praktyce wszystkie najpotrzebniejsze w programowaniu polecenia, łącznie z możliwością użycia tekstu w trybie graficznym. Wielorakie pętle, procedury i możliwość skoku do etykiety, a nie numeru linii, powodują, że pisanie programu jest łatwe, a tworzony kod wyjątkowo przejrzysty. Co prawda nie posiada obsługi grafiki player-missile, ale nie stanowi to jakiegoś poważniejszego problemu. Jego popularność spowodowała, że doczekał się kilku mutacji.
Hypra-Soft-BASIC – wydaje się próbą stworzenia alternatywy dla Atari BASIC-a i usunięcia najpoważniejszych jego wad. Posiada 48 dodatkowych poleceń, w tym obsługę PMG. Niestety jest równie wolny, jak Atari BASIC i nie posiada kompilatora. Zajmuje o 8 kB RAM więcej, tym samym pozostawiając na program ok. 23 kB. Gwoli sprawiedliwości należy dodać, że dzięki tym dodatkowym poleceniom strata dostępnego RAM-u jest częściowo kompensowana. Ciekawostką jest polecenie MULTICOL i LINECOL umożliwiające zmianę koloru tła w wybranych lub wszystkich liniach GRAPHICS 0.
Altirra BASIC – interpreter stworzony został z myślą o zastąpieniu wysłużonego Atari BASIC-a dlatego jest ulokowany w tym samym miejscu pamięci co Atari BASIC (dostępny jako pamięć ROM lub plik). Mimo że zajmuje również 8 kB posiada znacznie więcej poleceń w tym wygodną obsługę dżojstików (HSTICK i VSTICK). Nie zabrakło poleceń do obsługi PMG i stacji dysków. Pojawiły się też tak brakujące w Atari BASIC-u IF...ELSE...ENDIF i MOVE. Wszystkie polecenia i tokeny zgodne są z OSS BASIC XL/XE. Jest też szybszy, co z jednej strony jest korzystne, z drugiej pogarsza kompatybilność. Przydałby się tryb zgodności z Atari BASIC-em, wówczas Altirra BASIC mógłby zastąpić ten pierwszy w 100%, ale jak na 8 kB i tak jest niezwykły.
Istnieją jeszcze:
– BASIC A+, działa jedynie na Atari 800. Jego odpowiednikiem na modele Atari XL/XE jest BASIC XL, wydany na kartridżu;
– Atari Microsoft BASIC wydany w 1981 roku w wersji plikowej. Jego udoskonaloną wersją jest Atari Microsoft BASIC II wydany w 1982 roku na kartridżu;
– i kilka innych, których nie uwzględniam ze względu na śladową popularność, jaką uzyskały.
Na zakończenie warto zauważyć, że znaczną przewagę w szybkości osiągają te implementacje, które posiadają własny pakiet szybkich procedur matematycznych, zamiast korzystać z pakietu zainstalowanego w OS ROM Atari.
-------------------
W opracowaniu prócz własnego doświadczenia wykorzystałem również materiały:
Charles Cherry, BASIC Bonanza Powerhouse languages for 8-bit Ataris, „Antic” 1988, volume 6, number 2.
Wojciech Zientara, Który lepszy?, „Bajtek” 1988, nr 1 (25).