Forth: A Weird Programming Language. Here’s Why You Might Love It Anyway.

Disclosure: Your support helps keep the site running! Az ezen az oldalon ajánlott néhány szolgáltatásért ajánlói díjat kapunk. További információ

A Forth egy szokatlan nyelv. Elsősorban egy értelmező, és parancssori interfésszel rendelkezik, így valós időben is használható. De képes arra is, hogy kódkészleteket vegyen át és fordítson le. Tehát egyfajta hibrid.

Emiatt a Forth-ot általában olyan hardvereken használják, amelyek nem rendelkeznek hagyományos operációs rendszerrel. Széles körben használják gépek vezérlésére is, és az űrkutatásban is használták – még a Philae-n is, a 67P/Csurjumov-Geraszimenko üstökösre leszállt szondán.

Történet

A Forth-ot Charles Moore fejlesztette ki 1968-tól kezdve, miközben a Mohasco Industries-nál grafikus programozást végzett. Az első teljes Forth implementáció azonban csak 1971-ben készült el, amikor Moore egy önálló rendszert készített az amerikai Nemzeti Rádiócsillagászati Obszervatórium (NRAO) 11 méteres teleszkópjának vezérlésére.

A Forth korábbi változatai felkeltették a programozói közösség figyelmét. Ekkor azonban nagyon népszerűvé vált a csillagászati közösségben. Ezért 1973-ban Moore az NRAO munkatársaival, Elizabeth Ratherrel és Edward Conklinnal megalapította a FORTH, Inc-t.

A cég számos különböző rendszerre portolta a programot. A FORTH, Inc pedig ma is fontos vállalat, amely a Forth-hoz kapcsolódó termékeket kínál az üzleti életben, a tudományos életben és a kormányzatban dolgozóknak.

A Forth áttekintése

A Forth programozási nyelvnek számos egyedi aspektusa van. Itt a legfontosabbakat tárgyaljuk.

A Forth jellemzői

A Forth számos egyedi jellemzőt kínál:

  • Interaktív programozás
  • A nyelv “szavaknak” nevezett lefordított kiterjesztéseinek létrehozása
  • Szakaszok és fordított lengyel jelölés
  • Közvetlen kapcsolat a felhasználó és a hardver között.

Reverse Polish Notation

Forth matematikai számításokat végez a Reverse Polish Notation használatával. Ez a számok veremben való tárolásától függ.

Figyelembe veszi a számítást: 2 + 3. A Forth-ban ez úgy történne, hogy a 2-t a veremre helyezzük, majd a 3-at a veremre, és aztán összeadjuk őket. Ez valahogy így nézne ki: 2 3 +.

Ez egy kicsit furcsának tűnik, de a számítógép számára könnyebben értelmezhető, mert a számítógépek valójában így végzik a számításokat. És ha egyszer kódolóként megszokod, teljesen természetes lesz.

Ezeken kívül nincs szükség zárójelekre. Tekintsük a következő két példát. (Megjegyzés: a backslash karakter egy megjegyzést indít.)

2 3 + 5 * This is the same as (2 + 3) * 52 3 5 * + This is the same as 2 + 3 * 5

Az első példában a 2-t toljuk a veremre, amit a 3 követ. Tehát a 2 a második a veremben, a 3 pedig az első. A “+” operátort a verem első két elemére alkalmazzuk. Ezzel ezt a két elemet eltávolítjuk a veremről, és 5 (2 + 3) marad a verem tetején.

Ezután 5-t tolunk a veremre. Ezáltal egy 5-ös kerül a verem első és második pozíciójába. Végül alkalmazzuk a “*” operátort, aminek eredményeképpen 25 (5 * 5) kerül a verem tetejére.

A második példában 2, 3 és 5 elemet helyezünk a veremre, így az 5 az első, a 3 a második és a 2 a harmadik pozícióba kerül. Ezután a “*” operátort alkalmazzuk a verem két felső elemére (5 * 3), aminek eredményeképpen 15 kerül a verem tetejére.

A 15 ekkor az első pozícióban van, 2 pedig a második pozícióban. Amikor a + operátort alkalmazzuk, 17 (15 + 2) marad a verem tetején.

Példaprogram

A következő program nagyon egyszerű, de sok mindent bemutat abból, ami a nyelvben történik.

 : OUTMATH Output a mathematical calculation ." We will now calculate: (2 + 3) * 5" CR 2 3 + 5 * ." This equals: " . CR ; OUTMATH

A program első dolga egy OUTMATH nevű függvény definiálása. Az ezt követő sorok a függvény részét képezik a pontosvesszővel végződő sorig. Az első sor a következő szöveget írja ki: “Most kiszámítjuk: (2 + 3) * 5”, majd ezt egy kocsivissza követi.

A következő sor elvégzi a fentebb tárgyalt számítást, amelynek eredményeként a 25 a verem tetejére kerül. A függvény utolsó sora a következőt adja ki: “Ez egyenlő: “, amelyet a verem tetején lévő érték (amelyet a “.” jelképez) és egy kocsivissza követ.

Ezután egyszerűen futtatjuk a függvényt. Tehát amikor a program fut, akkor kimeneti:

We will now calculate: (2 + 3) * 5This equals: 25

Learning Forth

A legtöbb programozó számára ez egy új gondolkodásmód. De meglepő, hogy mennyire természetesnek tűnik, ha egyszer elkezdesz vele dolgozni. Íme néhány oktatóanyag és könyv, amelyek segítik a nyelvvel való munkát.

Forth oktatóanyagok

Egy csomó online oktatóanyag létezik. Mivel a Forth a nem Forth programozók számára idegen, ugyanakkor a jelenlegi felhasználók számára magától értetődő, sok oktatóanyag elhallgat olyan dolgokat, amelyek a kezdők számára zavaróak lehetnek. Ezekkel az oktatóanyagokkal ez a probléma nem áll fenn.

  • Easy Forth: Ez a rövid Ebook kiváló bevezetés. Egyetlen hátránya, hogy nincs benne sok példa. Ezért nézz meg néhányat az alábbi példák közül.
  • A Beginner’s Guide to Forth: Ez egy másik jó bevezető. Kicsit technikásabb, de több példát tartalmaz.
  • And So Forth…: Ez egy nagyon alapos bevezetés a Forth-ba – majdnem olyan jó, mint egy könyv.

Forth Books

Egy új nyelvet gyakran könnyebb megtanulni egy olyan könyvvel, amely lépésről lépésre végigvezet a folyamaton. Rengeteg jó könyv van a Forth-ról – különösen az 1980-as évekből, amikor a Forth igazán beindult. Íme a legjobbak és legfontosabbak gyűjteménye.

  • Discover Forth: Learning and Programming the Forth Language (1982), írta Thom Hogan: ez egy jó és tömör bevezetés a Forth nyelvbe.
  • Starting Forth: An Introduction to the Forth Language and Operating System for Beginners and Professionals (1982) by Leo Brodie: ez egy klasszikus és remek módja a Forth megtanulásának. Már elfogyott, de használt példányokat nem nehéz találni kevés pénzért. Az interneten is ingyenesen elérhető. Haladó Forth programozóknak érdemes megnézni Brodie újabb, Thinking Forth című könyvét.
  • Programming a Problem Oriented Language: Forth – How the Internals Work (2014) by Charles Moore: ez a Forth megalkotója által régen írt könyv Kindle változata. Még mindig éles betekintést nyújt a nyelvbe, de kezdésnek nem a legjobb választás.
  • Forth Programmer’s Handbook (2007) by Elizabeth Rather and Edward Conklin: Ez egy haladóbb könyv a Forth-ról a Forth másik két úttörőjétől. Lásd még Rather: Forth Application Techniques (2006) című könyvét.

Other Resources

  • Forth Interest Group: Ez az oldal mindenféle érdekes információt tartalmaz, beleértve régi történelmi dokumentumokat is. Sajnos rengeteg törött linket is tartalmaz. De azért érdemes megnézni.
  • Links to Forth Programs: Ez egy nagyszerű gyűjtemény valódi példaprogramokból, mint például egy táblázatkezelő és egy Sudoku puzzle megoldó.
  • Forth Google Group: Ez egy nagyon aktív Forth felhasználókból álló csoport, akik kérdéseket tesznek fel és válaszolnak.
  • Forth Subreddit: Ez nem egy borzasztóan aktív fórum, de azért vannak hozzáértő emberek rajta.

Forth implementációk

A Forth-nak rengeteg implementációja volt az évek során. A Forth Interest Groupnak van egy hosszú Forth Compilers oldala. Tehát ha véletlenül van egy PDP-11-esed a garázsodban, szerezhetsz hozzá Forth fordítót! De a modernebb rendszerekhez itt vannak az elterjedtebb lehetőségek.

bigFORTH

A nyolcvanas évek közepén Dietrich Weineck, Georg Rehfeld és Klaus Schleisiek kifejlesztették a volksFORTH-ot 16 bites gépekre, például a 8086-os IBM PC-re és a 6502-es Apple, Commodore és Atari gépekre.

Végül létrehoztak egy 32 bites változatot a (16 bites buszú) 68000 alapú Atari ST-re. Bár a volksFORTH haladt előre, a projekt nagyjából elhalt (bár később újraindították).

Bernd Paysan azonban eléggé érdeklődött a volksFORTH ezen változata (akkor már turboFORTH-nak hívták) iránt, hogy a bigFORTH alapjává tette.

Az első változata 1990-ben jelent meg az Atari ST-re. 1995-re a bigFORTH-ot átültették a 386-osra, és a következő évben már Windows NT, OS/2 és Linux alatt is elérhető volt.

Grafikus felület

Ebben az időben Paysan elkezdett dolgozni a MINOS-on. (Technikailag ez a “MINOS”, de általában egyszerűen csak “MINOS”-ként hivatkoznak rá.)

Ez a bigFORTH grafikus felülete. Talán a legegyszerűbb úgy gondolni rá, hogy “Visual bigFORTH”, mint a Visual Basic, mert többé-kevésbé ez is az. Először az X-Windows rendszerhez készült. De hamarosan elérhetővé vált Windowsra is.

Úgy tűnik, hogy mind a bigFORTH, mind a MINOS fejlesztése 2010 körül leállt. Azonban mindkettő könnyen elérhető és elég hasznos (a bigFORTH ANSI kompatibilis). Valójában a MINOS-szal nagyon szórakoztató játszani.

bigFORTH erőforrások

Ha a bigFORTH-ot akarod használni, vagy akár fejleszteni hozzá, minden szükséges eszköz a rendelkezésedre áll:

  • Forráskód: Ez a kód a 2010. március 22-i utolsó hivatalos kiadás 2. verziójából származik.4.
  • Debian csomag: egy könnyen telepíthető csomag bármely Debian alapú Linux disztribúcióhoz (pl. Ubuntu, Mint). A /usr/local/bin könyvtárba települ, és tartalmazza a MINOS-t, bár a neve xbigforth.
  • Windows Self-Installing Executable: Ugyanaz, mint a Debian csomag, csak Windowsra. A MINOS-nak még a neve is xbigforth.exe.
  • Dokumentáció (PDF): Ez a közel 300 oldalas könyv oktatóanyagként és referenciaként szolgál, JL Bezemer írta. Nagy része az általános Forth-ról szól, és ebből származik az “And So Forth…”.
  • Bernd Paysan’s Homepage: Ez az oldal sok érdekes Forth-tal kapcsolatos információt és példát tartalmaz. Külön említést érdemel Paysan Forth-alapú jelölőnyelve.
  • bigFORTH Repository: A végső célpont minden bigFORTH szükségletedhez.

Gforth

A Gforth a Forth GNU implementációja. Jelentős pedigréje van.

A Gforth projektet 1992-ben kezdte el a bigFORTH megalkotója, Bernd Paysan és Anton Ertl, Jens Wilke jelentős hozzájárulásával.

A bigFORTH és a sokkal régebbi fig-FORTH (lásd alább) kombinációja volt. De a története csavaros, mivel a bigFORTH a volksFORTH-ból származik, amely a fig-FORTH-ra épült.

Mivel GNU projekt volt, a kezdetek óta rengeteg munka folyt rajta. Most már teljesen ANSI-kompatibilis, és elérte az összes eredeti célját. A legfrissebb verzió a 0.7.3, az utolsó bejegyzés (Paysan által) 2013. február 25-én történt.

A szabad Forth implementációk közül a Gforth a leggyakrabban használt. Ez részben csak azért van, mert a GNU projekt része és elérhető. De azért is, mert nagy teljesítményű és gyors.

Gforth erőforrások

A Gforth minden szükséges erőforrással rendelkezik ahhoz, hogy bármilyen célra használhassa:

  • Forráskód: Ez az oldal a Gforth forráskódját a 0.2.1-es verziótól a jelenlegi, 0.7.3-as verzióig tartalmazza.
  • Debian csomagok: A Debian Linux terjesztéshez különböző csomagok állnak rendelkezésre. Vegye figyelembe, hogy a választott csomagtól függően előfordulhat, hogy előbb telepítenie kell egy vagy több más csomagot.
  • Windows Self-Installing Executable: Ez a Gforth egy korábbi (0.7.0) verziója, de gyors módja a kezdésnek.
  • Dokumentáció (PDF): Ez a 250 oldalas könyv a Gforth 0.7.0 verziójára vonatkozik. HTML formátumban is elérhető.
  • Gforth Repository: nagyjából minden, ami a Gforth-tal kapcsolatos, megtalálható itt.

pbForth

pbForth úgy tűnik, hogy már nem támogatott, de ez egy olyan érdekes implementációja a Forth-nak, hogy érdemes megnézni.

Amint már megbeszéltük, a Forth mindig is a hardveres vezérléssel volt kapcsolatban. Így egyáltalán nem volt meglepő, hogy a LEGO MINDSTORMS robotkészlethez – konkrétan az 1998-ban megjelent 16 bites RCX-hez – készült egy Forth implementáció.

Úgy tűnik, soha nem frissítették, hogy működjön a második generációs, 2006-ban megjelent NXT sorozathoz, és a jelenlegi MV3-hoz sem, amely 2013-ban jelent meg.

Noha a pbForth-nak nincs hivatalos oldala, mégis meg lehet ismerni, sőt használni is lehet. Azonban meredek lehet a tanulási görbe, mert nincs túl sok információ. És nyilván szükséged lenne egy LEGO MINDSTORMS RCX-re (nem olyan nehéz használtan találni).

Az NXT egy teljesen más (és 32 bites) processzort használ, így a pbForth biztosan nem működne vele. Mégis, lehet, hogy jó móka lenne. És ha van hozzá kedved, elképzelhető, hogy át lehetne portolni a második és harmadik generációs készletekre.

pbForth Források

Ami információ elérhető a normál interneten, az általában szűkszavú, és mindig a pbForth Home Page-re hivatkozik, ami legalább 2010 óta nem működik. Csak az Internet Archive-nak köszönhetően sok minden elérhető.

  • History of LEGO Robotics: Bár nem a pbForth-ról szól, de gyors áttekintést nyújt a LEGO MINDSTORMS termékekről.
  • Introduction to pbForth (PDF): Ez a 30 oldalas bemutató segít a nyelvvel való ismerkedésben.
  • phForth forráskód: vegye figyelembe, hogy a pbForth assembly nyelven és Tcl nyelven íródott, ezért szükség lesz ezeknek az eszközöknek a meglétére.
  • Windows GUI: ez a fájl fut, bár az, hogy bármit is csináljon, bonyolultabb lehet. Ha a pbForth-ot Linuxra vagy Macre szeretné, akkor a forráskódot kell használnia.
  • phForth Home Page Circa 2009: Ez az oldal linkeket tartalmaz elég sok érdekes információhoz a pbForth-ról, leginkább egy fél tucat mintaszkripthez.

Más implementációk

  • fig-FORTH: ez volt az egyik legkorábbi Forth implementáció, amelyet a Forth Interest Group készített. Ez egy 16 bites implementáció. Elérhető néhány csodálatos régi számítógéphez, mint a Data General Eclipse és az Alpha Micro, valamint 8086- és 6502-alapú számítógépekhez. A probléma az, hogy nincsenek futtatható fájlok – csak assembly nyelvű kód. És a legtöbb esetben csak bitképes PDF-fájlok a kódról. Úgy tűnik, a tényleges kód csak a 8088/8086, a PDP-11 és a 6800 számára érhető el. (A 6800 egy 8 bites processzor, így a jelek szerint létezett a fig-FORTH 8 bites változata is.)
  • SP-Forth: ez egy ingyenes Forth implementáció Windowsra és Linuxra.
  • 4tH: ez egy könnyen használható Forth implementáció, amely számos hardverhez (beleértve a Raspberry Pi-t is) elérhető, és jó dokumentációt tartalmaz.
  • SwiftForth™: ez a Forth fordító az eredeti cégtől, amely a Forth-ot a világnak bemutatta. Ez egy kereskedelmi termék, de elfogadható áron.

Összefoglaló

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.