FORTH
A jednak FORTH!
Długo zastanawiałem się nad
tym, czy miłośnicy komputerów
w Polsce są Jeszcze zainteresowani
programowaniem. Mam nadzieję.
że po wielu latach bezkarnego pi
ractwa została Jednak spora liczba
amatorów programowania. Uwzględniając panujące nam miłościwie
prawodawstwo, wszyscy programiści powinni byli wymrzeć jak dinozaury. Jeżeli tak się nie stało, nie
jest to na pewno zasługą naszych
polityków. Tym wytrwałym, którzy
nie dali się ponieść bieżącym prądom i nie założyli pirackiej meliny,
chciałbym zaproponować jedno
z naJ bardziej efektywnych narzędzi
programowania jakie znam. Narzędziem tym jest język PORTH. Nie
jest on zbyt popularny w naszym
kraju. Domyślam się, z czego to wynika i spróbuję tego dociec w dalszej części artykułu. W tym
momencie mogę tylko stwierdzić że przelotna znajomość z Panem FORTHem
trwa krótko, gdy jednak poznamy
go lepiej, staje się naszym najlepszym przyjacielem na wiele lat.
Możliwości, jakie daje nam
FORTH, są zbliżone do języka maszynowego, a sam zapis jest bardziej przejrzysty. FORTH nie jest
właściwie językiem, lecz systemem
programowania.
Dlaczego system?
Każdy początkujący programista
pragnie, aby dano mu do ręki gotowe narzędzie programowania.
Ucząc się stopniowo poszczególnych instrukcji, nabiera umiejętności w posługiwaniu się wybranym
językiem. Po pewnym czasie poznaje język dokładnie i dostrzega jego
ograniczenia. Nie chodzi tu tylko
o szybkość działania, lecz także
o możliwość realizacji dowolnego
algorytmu. Pamiętam, że miałem
trudności w Atari-Basic, chcąc
umieścić dane obrazu wewnątrz
programu. To struktura języka
stwarzała trudności w realizacji
jakże prostego zadania. Ostatecznie udało mi się to osiągnąć bardzo
okrężną drogą. Wykonując dowolną
pracę (programowanie wbrew pozorom to też praca), stajemy przed
wyborem: czy ważniejsze jest narzędzie, czy metoda realizacji zamierzonego celu. Złe narzędzie
zmusi nas do straty wielu godzin
na opracowanie metody. Każdy
z czytelników zgodzi się chyba
z tym, że należy dobrać efektywne
narzędzie, aby ułatwić sobie zadanie. Rzecz jednak w tym, że uniwersalnych narzędzi nie ma. Co by się
jednak stało, gdyby nie używać gotowego narzędzia, lecz jedynie odpowiednie jego elementy, takie klocki LEGO, które można składać na
różne sposoby. Ułatwiłoby to znakomicie naszą pracę. Zamiast szukać narzędzia do realizacji naszego
celu, po prostu sami je tworzymy.
Dostosowujemy jego możliwości do
naszego sposobu myślenia (ergonomia), a nie odwrotnie. Daje to znakomite efekty przy realizacji nawet
bardzo skomplikowanych zadań.
Właśnie na takiej filozofii został
opracowany system FORTH.
Części systemu
W ramach systemu FORTH znajdziemy zawsze ASEMBLER oraz
EDYTOR. EDYTOR służy nam do
wprowadzania dowolnego tekstu
z klawiatury i zapamiętaniu go
w takiej formie w pamięci zewnętrznej. ASEMBLER to także element FORTHa, umożliwia tworzenie programu bezpośrednio w języku asemblera i
łączenie go z programem głównym. Korzystanie
z ASEMBLERA jest bardzo proste
i odbywa się w ramach systemu
FORTH. Odczuwamy to tak, jakbyśmy tworzyli program w jednym
zintegrowanym FORTHo-ASEMBLERze. Myślę, że ta zaleta zachęci
wielu zaawansowanych programistów do poznania systemu FORTH.
Doświadczony programista wie dobrze, jakie znaczenie ma łatwość
stosowania asemblera w językach
wyższego rzędu.
Szczególnie jednak polecałbym
ten język wszystkim początkującym
adeptom programowania. FORTH
posiada wszystkie zalety języka BASIC (jak bezpośredni dostęp do
każdej stworzonej procedury), nie
dziedzicząc jego wad. Każdy najmniejszy fragment programu możemy przetestować prawie natychmiast po wprowadzeniu do komputera. Wszystkie nazwy zmiennych,
procedur, itp., są kodowane w programie i dostępne w każdej chwili
dla programisty. Ma to oczywiście
tę wadę, że wydłuża program o długość zastosowanych nazw, mimo to
FORTH jest najbardziej pamieciooszczędnym językiem jaki udało się
stworzyć. Wynika to z metody kompilacji oraz zastosowanego sposobu
zapisu. Przykładem oszczędności
w gospodarowaniu pamięcią może
być porównanie instrukcji wywołania podprogramu w języku FORTH
i Asemblerze 6502. W pierwszym
przypadku zajmuje ona 2 bajty,
w drugim 3, a trzeba wiedzieć, że
FORTH składa się praktycznie
z samych wywołań podprogramów.
Extended fig FORTH
Chciałbym bliżej zapoznać czytelników z impementacją o tej nazwie
na małe Atart. Język FORTH istnieje także na inne komputery, w tym
16 bitowe, co zapewnia programiście łatwe przejście na maszyny
wyższej klasy. Język ten bardzo
przystępnie przedstawił Jan Ruszczyc w swojej książce pt. "Poznajemy FORTH". Wszystkich czytelników zachęcam gorąco do poznania
tej publikacji.
Jako praktyk, używający systemu fig-FORTH dłuższy czas, chciałbym przedstawić metody programowania, liczne usprawnienia
języka, jego obsługi oraz ciekawe procedury i ich wykorzystanie. Może
uda mi się przedstawić kasetową
wersję FORTHa, opracowaną przeze mnie. Tu już słyszę głosy czytelników: przecież my mamy ten język
na kasecie i to w kilku wersjach!
Mogę tylko stwierdzić, że wersje te
zrobiły więcej szkody niż przyniosły
pożytku. Raczej wcześniej niż później każdy entuzjasta FORTHa posiadający magnetofon zauważy, że
mimo szczerych chęci poniesie klęskę na samym początku swojej
twórczości. Czy może być inaczej.
Jeżeli nie mamy możliwości zapisu
wersji źródłowej na kasetę? W ten
sposób na podstawie zdekompletowanej wersji powstaje zła opinia
o języku. Aby uzyskać możliwość
współpracy z magnetofonem, należy stworzyć odpowiedni system
operacyjny zarządzający zapisem
na taśmie. Należy jednak pamiętać,
że nic nie zastąpi pracy ze stacją
dysków.
Drugim elementem skutecznie
zniechęcającym do programowania
w tym języku (także ze stacją dysków) jest wręcz fatalny standardowy EDYTOR. Na dysku zawierającym Extended fig FORTH
znajdują się aż dwa edytory: jeden
gorszy od drugiego. Aby zapewnić
pełen komfort pracy, napisałem
swój własny EDYTOR. Był to jeden
z pierwszych programów napisanych przeze mnie w języku FORTH,
co potwierdza fakt, że nie wymaga
to od programisty szczególnych
umiejętności. EDYTOR ten chciałbym zaproponować czytelnikom
(do wklepania) w kolejnych numerach TA. Dopiero wtedy z czystym
sumieniem będę mógł przedstawić
możliwości praktycznego wykorzystania języka.
FORTH - podstawy
Pierwszą instrukcją, jaką chciałbym opisać, jest VLIST. Tu muszę
poświęcić parę słów nazewnictwu
w języku FORTH. Zamiast nazwy
"procedura", znanej z innych języków, stosujemy określenie "słowo".
Słowami będziemy nazywali wszystkie podstawowe instrukcje języka
oraz te, stworzone przez użytkownika. Zamiast nazwy "program" stosujemy określenie "Słownik". Słownik to obszar pamięci zajmowany
przez wszystkie słowa. Do wyświetlenia wszystkich nazw, znajdujących się w słowniku, służy słowo
VLIST
Sprawdzimy jego działanie
w praktyce. Po załadowaniu języka
FORTH, na ekranie pojawi się nazwa implementacji, np. fig-FORTH
1.1. Teraz możemy wywołać nasze
słowo, pisząc jego nazwę na ekranie i zatwierdzając oczywiście klawiszem RETURN. To co zobaczymy, jest podstawowym słownikiem
języka FORTH, dostępnym dla programisty. Nie należy się przerażać
mnogością słów, bo w większości
wypadków (do napisania przeciętnego programu) wystarczy znajomość kilkudziesięciu. Najważniejszym i najczęściej stosowanym
słowem (znakiem) jest spacja. Odgrywa ona ogromną rolę podczas pisania programu źródłowego. Spacja
odziela jedno słowo od drugiego i z tego powodu nie może być stosowana wewnątrz nazwy słowa. Poznajmy teraz dwa bardzo ważne
słowa języka FORTH, są to: : -
dwukropek i ; - średnik. Oba służą
do definiowania nowych słów
i wprowadzania ich do słownika.
Napiszmy więc na ekranie naszego
komputera następującą sekwencję:
: SLOWNIK VLIST ;
Pamiętajmy o spacjach w odpowiednich miejscach. Zatwierdzamy
zapis klawiszem RETURN i co? Na
ekranie nic się nie stało, tylko pojawił się napis OK, potwierdzający że
wszystko się udało. Wywołujemy jeszcze raz znane nam słowo VLIST
i widzimy na samym szczycie słownika nowe słowo - "SLOWNIK". To
nasze działanie spowodowało
wprowadzenie do słownika słowa
o tej nazwie. Dwukropek poinformował system, że występujący po
nim napis będzie nazwą nowo tworzonego słowa. Po nazwie nastąpił
ciąg słów istniejących już w słowniku, w naszym przypadku tylko słowo VLIST. Całość zamknął średnik, oznaczający koniec definicji
słowa. Co będzie wykonywało nasze nowe słowo łatwo się domyślić,
ale sprawdźcie sami. Na tym przykładzie widać, jak prosto możemy
tworzyć nowe słowa. Jeżeli ktoś ma
ochotę, może zastąpić wszystkie
podstawowe słowa języka FORTH
polskimi odpowiednikami, tworząc
w ten sposób polską wersję języka.
Jeżeli zainteresował czytelników
ten artykuł, prosiłbym o listy
z uwagami i oczekiwaniami dotyczącymi dalszych odcinków, odkrywających tajemnice Pana FORTHa.
Roland Pantoła
|