Każdy, kto choć trochę interesuje się informatyką, bez trudu wymieni kilka lub kilkanaście nazw języków programowania - nie licząc różnych dialektów.
Ot, choćby Action!, Ada, Algol, Basic, C, Comal, Cobol, Forth, Fortran, Lisp, Logo, Modula, Occam, Pascal, PL/I, Prolog, Simula - nie wspominając nic o językach najniższego poziomu, czyli asemblerach. Takie bogactwo różnych sposobów zapisu, lub różnych filozofii stojących u podstaw różnych języków, wiąże się nie z poszukiwaniem języka uniwersalnego, nadającego się do wszystkiego, bo takiego być nie może, ale z mno-gośCią zastosowań. Każdy wymieniony powyżej język ma swoje plusy i minusy, każdy ma swój zakres stosowalności, i - co równie ważne - do pewnych zadań każdy z nich jest niezastąpiony.
Chcę Wam zaproponować poznanie języka C, o którym mówimy dopiero od niedawna. (Dzieckiem tej samej filozofii, co C jest Action I, ale istnieje on wyłącznie na Atari).
Być może jest to związane z tym, że C to język trudny, wymagający znajomości wielu pojęć nieznanych wytrawnym specjalistom od Basica, czy nawet ekspertom od asemblera. Tym niemniej warto zainwestować trochę trudu w nauczeniu się przynajmniej podstaw. Tym, którzy nie wierzą, że warto, dedykuję program, który drukujemy obok. Dlaczego? Otóż jest to nieodłącznie związane z filozofią tego języka.
C wymyślono, żeby ułatwić życie wszystkim tym, którzy wcześniej używali asemblera. Dlatego też zawiera on wiele instrukcji niemal żywcem wyciągniętych z zestawu instrukcji mikroprocesora. Równocześnie jednak jest to język wysokiego poziomu, pozwalający na korzystanie z wyrafinowanych technik programowania - procedury (a właściwie funkcje), skomplikowane struktury danych, wskaźniki - wszystko czego tylko dusza zapragnie. Stąd też obecnie jest to jeden z najpopularniejszych języków stosowanych przez zawodowych programistów. C króluje podczas pisania programów systemowych, edytorów tekstu, gier - do niedawna robiono to wyłącznie przy pomocy asemblera, dzisiaj w asemblerze pisze się najwyżej kilkadziesiąt linii programu - tam gdzie trzeba skorzystać ze szczególnych możliwości mikroprocesora, gdy potrzebna jest maksymalna szybkość jub dokładna znajomość czasu trwania jakiegoś podprogramu w taktach zegara. Kompilatory C istnieją na niemal wszystkich komputerach - od Spectrum do Craya. To też świadczy o jego popularności.
Gra, którą widzicie obok, ma Was przekonać o tym, że to wszystko, co napisałem powyżej, jest prawdą. Jest to gra graficzna, skądinąd bardzo prosta, ale spróbujcie ją napisać w innym języku. Kilka razy skorzystałem przy jej pisaniu z asemblera, ale wyłącznie po to, by móc się.; odwołać do procedur zawartych w ROM-ie, oraz do rejestru R i do instrukcji IN i OUT procesora. Cała reszta to C. Nawet duszki dały się oswoić (z niewielką pomocą ROM-u). Jeżeli nie znacie C firmy Hi-Soft, służę kilkoma radami praktycznymi:
- Po wczytaniu kompilatora naciskamy EDIT i ENTER - przechodzimy da edytora. Edytor jest taki sam jak i w innych kompilatorach HiSoftu (HP4S, GENS).
- Po wprowadzeniu programu i nagraniu go na taśmę (można również skorzystać z microdrive-u, podając przed nazwą zbioru numer urządzenia poprzedzony dwukropkiem, np. 1:GRA_W_C), piszemy C i ENTER - jesteśmy w kompilatorze. Teraz piszemy #include i ENTER. Po zakończeniu kompilacji naciskamy SYMBOL SHIFT i I, żeby dać kompilatorowi sygnał, że to już wszystko - i gramy.
Sama gra jest prosta, choć nie wróżę nikomu wysokiego wyniku (nasz redakcyjny rekord wynosi 47 punktów). Przy pomocy klawiszy h, n, k oraz o poruszamy po ekranie ośmiokątną ramkę. Ramka służy do zalepiania dziur, które co jakiś czas pojawiają się na ekranie. Żeby dziurę zalepić wystarczy na nią najechać. Ramki wolno używać, dopóki dysponujemy energią. Energia ucieka przez każdą niezalepioną dziurę, ale można ją stracić również wpadając na krawędź ekranu. I ostatnia rada-nie zbliżajcie się zbyt blisko do paskudnej mordy krążącej po ekranie. Jej powolność może okazać się zwodnicza!
Jeżeli chcecie do gry używać Kempstona, wystarczy zmienić definicje lewo, prawo, góra, dół na następujące:
#define prawo (in(31)&1)
#define lewo (in(31)&2)
#define dół (in(31)&4)
#define góra (in(31)&8)
W taki sam sposób można wprowadzić do programu dowolny inny joystick, lub - jeśli komuś na tym zależy - przedefiniować klawisze używane podczas gry.
Napisanie takiej gry jest na Spectrum możliwe tylko przy użyciu C albo asemblera. Program w C powstał w ciągu niecałego tygodnia - wieczorami, po dobranocce, o ile rodzina nie zabrała mi telewizora. Zrobienie .tego samego w asemblerze w tak krótkim czasie byłoby niemożliwe ? i to jest najważniejszy argument na rzecz C. Naprawdę warto się z nim zapoznać. Zainteresowanych odsyłam do dwóch książek: pierwsza to "Język C" B.W. Kemighana i D.M. Ritchiego - znakomite skrzyżowanie podręcznika z przewodnikiem, nadająca się dla każdego, kto chce poznać C; druga - "Sam na sam z językiem C" J. Bieleckiego - zawiera opis (niekompletny) "naszego" kompilatora.
Marcin Borkowski
Bajtek, grudzień 1989