Forth to niezwykły język. Jest przede wszystkim interpreterem i posiada interfejs wiersza poleceń, dzięki czemu może być używany w czasie rzeczywistym. Ale ma również zdolność do pobierania zestawów kodu i kompilowania go. Jest to więc coś w rodzaju hybrydy.
Z tego powodu Forth jest powszechnie używany na sprzęcie, który nie posiada tradycyjnego systemu operacyjnego. Jest również szeroko stosowany do sterowania maszynami i był używany w eksploracji kosmosu – nawet w Philae, sondzie, która wylądowała na komecie 67P/Churyumov-Gerasimenko.
Historia
Forth został opracowany przez Charlesa Moore’a w 1968 roku podczas programowania grafiki w Mohasco Industries. Ale pierwsza kompletna implementacja Fortha pojawiła się dopiero w 1971 roku, gdy Moore stworzył samodzielny system do sterowania 11-metrowym teleskopem w amerykańskim Narodowym Obserwatorium Radioastronomicznym (NRAO).
Wcześniejsze wersje Fortha przyciągnęły uwagę społeczności programistów. Ale w tym momencie stał się on bardzo popularny w społeczności astronomicznej. Tak więc w 1973 roku Moore założył FORTH, Inc wraz z kolegami z NRAO, Elizabeth Rather i Edwardem Conklinem.
Firma przeniosła program na wiele różnych systemów. I FORTH, Inc nadal jest ważną firmą, dostarczającą produkty związane z Forth ludziom z biznesu, środowisk akademickich i rządowych.
Przegląd języka Forth
Jest wiele unikalnych aspektów języka programowania Forth. Omówimy tu najważniejsze z nich.
Cechy Forth
Forth oferuje wiele unikalnych cech:
- Interaktywne programowanie
- Tworzenie skompilowanych rozszerzeń języka zwanych „słowami”
- Stosy i odwrotna notacja polska
- Bezpośrednie połączenie między użytkownikiem a sprzętem.
Odwrotna notacja polska
Forth wykonuje obliczenia matematyczne używając Odwrotnej notacji polskiej. Zależy to od przechowywania liczb na stosie.
Rozważanie obliczeń: 2 + 3
. W Forth zostałoby to wykonane przez umieszczenie 2 na stosie, następnie umieszczenie 3 na stosie, a następnie dodanie ich. Wyglądałoby to mniej więcej tak: 2 3 +
.
Wydaje się to trochę dziwne, ale jest to łatwiejsze dla komputera do parsowania, ponieważ jest to sposób, w jaki komputery faktycznie wykonują obliczenia. A kiedy już się do tego przyzwyczaisz jako koder, staje się to całkiem naturalne.
W dodatku nie ma potrzeby stosowania nawiasów. Rozważmy następujące dwa przykłady. (Uwaga: znak odwrotnego ukośnika rozpoczyna komentarz.)
2 3 + 5 * This is the same as (2 + 3) * 52 3 5 * + This is the same as 2 + 3 * 5
W pierwszym przykładzie, 2 jest popychany na stos, po którym następuje 3. Tak więc 2 jest drugi na stosie, a 3 jest pierwszy. Operator „+” jest stosowany do dwóch pierwszych elementów stosu. To usuwa te dwa elementy ze stosu i pozostawia 5 (2 + 3) na wierzchu stosu.
Następnie wciskamy 5 na stos. To umieszcza 5 na pierwszej i drugiej pozycji stosu. Na koniec stosujemy operator „*”, który powoduje, że 25 (5 * 5) znajduje się na szczycie stosu.
W drugim przykładzie, umieszczamy 2, 3 i 5 na stosie, tak że 5 jest na pierwszej pozycji, 3 na drugiej, a 2 na trzeciej. Następnie stosujemy operator „*” na dwóch górnych elementach stosu (5 * 3), w wyniku czego 15 zostaje umieszczone na szczycie stosu.
W tym momencie 15 jest na pierwszej pozycji, a 2 na drugiej. Po zastosowaniu operatora + na wierzchu stosu pozostaje 17 (15 + 2).
Przykładowy program
Poniższy program jest bardzo prosty, ale demonstruje wiele z tego, co dzieje się w języku.
: OUTMATH Output a mathematical calculation ." We will now calculate: (2 + 3) * 5" CR 2 3 + 5 * ." This equals: " . CR ; OUTMATH
Pierwszą rzeczą, jaką robi ten program, jest zdefiniowanie funkcji o nazwie OUTMATH
. Linie, które po niej następują są częścią funkcji aż do linii, która kończy się średnikiem. Pierwszy wiersz wypisuje tekst: „Teraz obliczymy: (2 + 3) * 5” i następuje po nim powrót karetki.
Kolejna linia wykonuje obliczenia, które omówiliśmy powyżej, w wyniku czego 25 zostaje umieszczone na wierzchu stosu. Ostatni wiersz funkcji wypisuje „To równa się: „, po czym następuje wartość na wierzchołku stosu (reprezentowana przez „.”) i powrót karetki.
Potem po prostu uruchamiamy funkcję. Więc kiedy program jest uruchomiony, wypisuje:
We will now calculate: (2 + 3) * 5This equals: 25
Learning Forth
Dla większości programistów jest to nowy sposób myślenia. Ale zaskakujące jest to, jak naturalny wydaje się, gdy zaczniesz z nim pracować. Oto kilka samouczków i książek, które pozwolą ci pracować z tym językiem.
Tutoriale Forth
Jest wiele samouczków online. Ponieważ Forth jest dziwny dla nieprogramistów w tym samym czasie, w którym jest oczywisty dla obecnych użytkowników, wiele z tych tutoriali pomija rzeczy, które mogą być mylące dla początkujących. Te tutoriale nie mają tego problemu.
- Easy Forth: ten krótki Ebook jest doskonałym wprowadzeniem. Jego jedyną wadą jest to, że nie jest duży na przykładach. Więc sprawdź niektóre z przykładów poniżej.
- A Beginner’s Guide to Forth: jest to kolejne dobre wprowadzenie. Jest trochę bardziej techniczne, ale ma więcej przykładów.
- And So Forth…: jest to bardzo dokładne wprowadzenie do Fortha – prawie tak dobre jak książka.
Forth Books
Często łatwiej jest nauczyć się nowego języka przez zdobycie książki, która przeprowadzi cię krok po kroku przez proces. Jest wiele dobrych książek o Forth – szczególnie z lat 80-tych, kiedy Forth naprawdę wystartował. Oto zbiór najlepszych i najważniejszych z nich.
- Discover Forth: Learning and Programming the Forth Language (1982) autorstwa Thoma Hogana: jest to dobre i zwięzłe wprowadzenie do języka Forth.
- Starting Forth: An Introduction to the Forth Language and Operating System for Beginners and Professionals (1982) Leo Brodie: jest to klasyk i świetny sposób na naukę języka Forth. Nie jest już drukowany, ale używane kopie nie są trudne do znalezienia za niewielkie pieniądze. Jest również dostępny online za darmo. Zaawansowani programiści Forth mogą chcieć sprawdzić nowszą książkę Brodie’go, Thinking Forth.
- Programming a Problem Oriented Language: Forth – How the Internals Work (2014) by Charles Moore: jest to wersja Kindle książki, którą twórca Fortha napisał dawno temu. Nadal zapewnia wnikliwy wgląd w język, ale nie jest najlepszym wyborem na początek.
- Forth Programmer’s Handbook (2007) Elizabeth Rather i Edward Conklin: jest to bardziej zaawansowana książka na temat Fortha autorstwa pozostałych dwóch pionierów Fortha. Zobacz także książkę Rather, Forth Application Techniques (2006).
Inne zasoby
- Forth Interest Group: ta strona ma wszystkie rodzaje interesujących informacji, w tym stare dokumenty historyczne. Niestety, ma również wiele uszkodzonych linków. Ale wciąż jest warta sprawdzenia.
- Links to Forth Programs: jest to wspaniała kolekcja prawdziwych przykładów programów takich jak arkusz kalkulacyjny i Sudoku puzzle solver.
- Forth Google Group: jest to bardzo aktywna grupa użytkowników Forth, którzy zadają pytania i odpowiadają na nie.
- Forth Subreddit: to nie jest strasznie aktywne forum, ale wciąż są na nim kompetentni ludzie.
Wdrożenia Forth
Na przestrzeni lat powstało wiele wdrożeń Forth. Forth Interest Group ma długą stronę Forth Compilers Page. Więc jeśli zdarzyło Ci się mieć PDP-11 w garażu, możesz zdobyć dla niego kompilator Forth! Ale dla bardziej nowoczesnych systemów, oto bardziej popularne opcje.
bigFORTH
W połowie lat 80-tych, Dietrich Weineck, Georg Rehfeld i Klaus Schleisiek stworzyli volksFORTH dla 16-bitowych maszyn, takich jak 8086 IBM PC i 6502 Apple, Commodore i Atari.
W końcu stworzyli 32-bitową wersję dla (16-bitowej magistrali) Atari ST opartego na 68000. Mimo że volksFORTH robił postępy, projekt praktycznie umarł (choć później został ponownie uruchomiony).
Bernd Paysan był jednak na tyle zainteresowany tą wersją volksFORTH (zwaną wtedy turboFORTH), że uczynił z niej podstawę bigFORTH.
Jego pierwsza wersja została wydana dla Atari ST w 1990 roku. Do 1995 roku bigFORTH został przeniesiony na 386, a w następnym roku był już dostępny na Windows NT, OS/2 i Linux.
Interfejs graficzny
W tym momencie Paysan rozpoczął pracę nad MINOS-em. (Technicznie rzecz biorąc, jest to „MINOS,” ale zwykle mówi się o nim po prostu „MINOS.”)
Jest to interfejs graficzny dla bigFORTH. Najłatwiej jest myśleć o nim jako o „Visual bigFORTH” jak o Visual Basic, ponieważ mniej więcej tym właśnie jest. Po raz pierwszy został stworzony dla systemu X-Windows. Ale wkrótce był dostępny także dla Windows.
Rozwój zarówno bigFORTH jak i MINOSa wydaje się być zatrzymany około 2010 roku. Jednak oba są łatwo dostępne i całkiem użyteczne (bigFORTH jest zgodny z ANSI). W rzeczywistości, MINOS jest bardzo przyjemny do zabawy.
zasoby bigFORTH
Jeśli chcesz używać bigFORTH lub nawet rozwijać dla niego, będziesz miał wszystkie narzędzia, których potrzebujesz:
- Kod źródłowy: to jest kod z ostatniego oficjalnego wydania 22 marca 2010, wersja 2.4.
- Pakiet Debiana: łatwy do zainstalowania pakiet dla każdej dystrybucji Linuksa opartej na Debianie (np. Ubuntu, Mint). Instaluje się w /usr/local/bin i zawiera MINOS, choć nazywa się xbigforth.
- Windows Self-Installing Executable: to samo co pakiet Debiana, ale dla Windows. MINOS jest nawet nazwany xbigforth.exe.
- Dokumentacja (PDF): ta prawie 300-stronicowa książka działa jako samouczek i odniesienie, napisana przez JL Bezemera. Duża jej część jest poświęcona generycznemu Forth i to właśnie z niej pochodzi „And So Forth…”.
- Strona domowa Bernda Paysana: ta strona zawiera wiele interesujących informacji i przykładów związanych z Forth. Na szczególną uwagę zasługuje język znaczników Paysana oparty na Forth.
- Repozytorium bigFORTH: ostateczne miejsce docelowe dla wszystkich twoich potrzeb związanych z bigFORTH.
Gforth
Gforth jest implementacją Forth przez GNU. Ma wybitny rodowód.
Projekt Gforth został rozpoczęty w 1992 roku przez twórcę bigFORTH Bernda Paysana i Antona Ertla, z istotnym wkładem Jensa Wilke.
Był połączeniem bigFORTH i znacznie starszego fig-FORTH (zobacz poniżej). Ale jego historia jest pokręcona, ponieważ bigFORTH pochodzi z volksFORTH, który był oparty na fig-FORTH.
Jako projekt GNU, od początku jego istnienia wykonano nad nim wiele pracy. Obecnie jest on całkowicie zgodny z ANSI i osiągnął wszystkie swoje pierwotne cele. Najnowsza wersja to 0.7.3, z ostatnim wpisem (autorstwa Paysana) z 25 lutego 2013 roku.
Jeśli chodzi o wolne implementacje Fortha, Gforth jest najczęściej używany. Częściowo wynika to po prostu z tego, że jest częścią projektu GNU i jego dostępności. Ale także dlatego, że jest potężny i szybki.
Zasoby Gforth
Gforth posiada wszystkie zasoby, których potrzebujesz, aby go wykorzystać w dowolny sposób:
- Kod źródłowy: ta strona zawiera kod źródłowy Gforth od wersji 0.2.1 do obecnej, 0.7.3.
- Pakiety Debiana: istnieją różne pakiety dostępne dla dystrybucji Debian Linux. Zauważ, że w zależności od wybranego pakietu, może być konieczne zainstalowanie najpierw jednego lub więcej innych pakietów.
- Samoinstalujące się pliki wykonywalne dla Windows: jest to wcześniejsza (0.7.0) wersja programu Gforth, ale jest to szybki sposób na rozpoczęcie pracy.
- Dokumentacja (PDF): ta 250-stronicowa książka dotyczy wersji 0.7.0 programu Gforth. Jest ona również dostępna w formacie HTML.
- Repozytorium Gforth: całkiem sporo wszystkiego związanego z Gforth można znaleźć tutaj.
pbForth
pbForth nie wydaje się być już wspierany, ale jest to tak interesująca implementacja Fortha, że warto ją sprawdzić.
Jak już mówiliśmy, Forth zawsze był związany z kontrolą sprzętu. Nie było więc żadnym zaskoczeniem, że implementacja Fortha została stworzona dla zestawu robotycznego LEGO MINDSTORMS – konkretnie dla 16-bitowego RCX, który pojawił się w 1998 roku.
Wydaje się, że nigdy nie został zaktualizowany do pracy z drugą generacją, serią NXT, która pojawiła się w 2006 roku, ani z obecną MV3, która pojawiła się w 2013 roku.
Chociaż nie ma oficjalnej strony dla pbForth, wciąż można się o nim dowiedzieć, a nawet go używać. Jednakże, może być stroma krzywa uczenia się, ponieważ nie ma tak wiele informacji. I oczywiście, potrzebowałbyś LEGO MINDSTORMS RCX (nie są tak trudne do znalezienia używane).
NXT używa zupełnie innego (i 32-bitowego) procesora, więc pbForth na pewno nie będzie z nim działał. Mimo to, może być niezła zabawa. I jeśli jesteś na to gotowy, mógłbyś go przenieść na drugą i trzecią generację zestawów.
zasoby pbForth
Jakiekolwiek informacje są dostępne w normalnym Internecie są ogólnie zwięzłe i zawsze odsyłają do strony domowej pbForth, która nie działa od co najmniej 2010 roku. Tylko dzięki Internet Archive wiele z tych informacji jest dostępnych.
- History of LEGO Robotics: chociaż nie dotyczy pbForth, zapewnia szybki przegląd produktów LEGO MINDSTORMS.
- Wprowadzenie do pbForth (PDF): ten 30-stronicowy samouczek pozwoli Ci rozpocząć pracę z językiem.
- Kod źródłowy phForth: zauważ, że pbForth jest napisany w języku asemblera i Tcl, więc będziesz musiał mieć te narzędzia dostępne.
- Windows GUI: ten plik działa, chociaż uzyskanie go do zrobienia czegokolwiek może być bardziej skomplikowane. Jeśli chcesz pbForth dla Linuksa lub Maca, będziesz musiał użyć kodu źródłowego.
- phForth Home Page Circa 2009: ta strona zawiera odnośniki do całkiem sporo interesujących informacji o pbForth, przede wszystkim pół tuzina przykładowych skryptów.
Inne implementacje
- fig-FORTH: to jedna z najwcześniejszych implementacji Forth, stworzona przez Forth Interest Group. Jest to implementacja 16-bitowa. Jest dostępna dla niektórych wspaniałych starych komputerów, takich jak Data General Eclipse i Alpha Micro, a także dla komputerów opartych na 8086 i 6502. Problem w tym, że nie ma plików wykonywalnych – tylko kod języka asemblera. I w większości przypadków, tylko pliki PDF z bitmapami kodu. Właściwy kod wydaje się być dostępny tylko dla 8088/8086, PDP-11 i 6800. (6800 jest procesorem 8-bitowym, więc najwyraźniej istniała 8-bitowa wersja fig-FORTH.)
- SP-Forth: jest to darmowa implementacja Forth dla Windows i Linux.
- 4tH: jest to łatwa w użyciu implementacja Forth, która jest dostępna dla szerokiej gamy sprzętu (w tym Raspberry Pi) i zawiera dobrą dokumentację.
- SwiftForth™: jest to kompilator Fortha od oryginalnej firmy, która przyniosła Fortha światu. Jest to produkt komercyjny, ale w rozsądnej cenie.
Podsumowanie
.