Tovább | |
---|---|
Szemantika | parancsoló |
Nyelvóra | programozási nyelv , értelmezett programozási nyelv és lefordított programozási nyelv |
A végrehajtás típusa | tolmács/fordító |
Megjelent | 1971 |
Szerző | Charles H. Moore |
Típusrendszer | gépeletlen |
Főbb megvalósítások | gForth , pForth, kForth, SP-Forth [1] , win32forth [2] |
Dialektusok | FORTH-79, FORTH-83, ANSI FORTH 1994, ColorForth , RetroForth . Forth 2012 Standard |
Befolyásolva | APL , Lisp |
befolyásolta | PostScript , Factor és más konkatenatív nyelvek |
Médiafájlok a Wikimedia Commons oldalon |
A Forth ( eng. Forth ) az egyik első konkatenatív programozási nyelv , amelyben a programokat lexémák sorozataként írják le (a Forth nyelv terminológiájában „szavak”). A matematikai kifejezéseket postfix jelöléssel ábrázoljuk, ha veremjelölést használunk . Támogatja a nyelv szemantikájának és szintaxisának meta-kiterjesztésének mechanizmusait, hogy alkalmazkodjanak a kívánt tárgykörhöz. A Forth alapszintű szintaxisa egyszerű, és egyetlen szabályból áll: "minden definíció szóközzel van elválasztva". A negyedik definíciók bármilyen karakterkombinációt tartalmazhatnak.
Számos tulajdonság, nevezetesen az interaktivitás , a rugalmasság és a könnyű fejlesztés teszi a Forth-ot hatékony nyelvvé az alkalmazott kutatás és az eszközfejlesztés számára. A beágyazott vezérlőrendszerek nyilvánvaló alkalmazási területei ennek a nyelvnek . Egyszerűsége miatt a fordító és gyakran a Forth fordító könnyen megvalósítható a mikrokontrollerek túlnyomó többségénél , és keresztprogramozási eszközként is használható . Különböző operációs rendszereket futtató számítógépek programozásakor vagy független operációs környezetként is használják.
A Forth nyelvet Charles X. Moore hozta létre az 1960-as évek végén és az 1970-es évek elején. Moore negyediknek nevezte a nyelvét , mert azt hitte, hogy ez lesz a negyedik generációs számítógépes nyelv . De mivel egy IBM 1130 dolgozott , amely legfeljebb öt nagybetűből álló neveket engedélyezett, a nevet FORTH -ra ( eng. forth - forward) alakították át. Moore első kísérletei azonban az 1950-es évek végére nyúlnak vissza egy egyszerű értelmező létrehozására, amely megkönnyíti a csillagászati berendezések vezérlésére szolgáló programok megírását. [3]
1971 óta Moore a Nemzeti Rádiócsillagászati Obszervatóriumban dolgozott , és részt vett a rádióteleszkóp által fogadott adatok gyűjtésére és feldolgozására szolgáló programok kidolgozásában . Ekkor jelent meg a Forth nyelv első megvalósítása. Ebben a munkában részt vett Moore munkatársa , Elizabeth Rather is , aki a világ második erődprogramozójának tekinthető .
Az újonnan létrehozott nyelvet az Amerikai Csillagászati Társaság fő programozási nyelvként fogadta el . Később, 1973-ban Charles Moore és Elizabeth Rather megalapította a FORTH, Inc-t [4] , amelynek során a nyelvet a következő évtized során számos platformra átvitték .
Az 1970-es évek végén a FORTH Interest Group (FIG) a nyelv fejlesztése iránt érdeklődő programozókból alakult. Ez a csoport fejlesztette ki a FIG Forth Model koncepcióját, egy nyilvánosan elérhető forth rendszert, amely könnyen portolható népszerű számítógépes architektúrákra. Ezt a negyedik hivatkozási rendszert, a FIG-FORTH-t gyakran tekintik eredeti nyelvi szabványnak.
A Forth hivatalos szabványosításának ötlete eredetileg a Nemzetközi Csillagászszövetségen ( Angol Astronomical Sciences, AST ) származik. 1977 májusában a Kitt Peak Nemzeti Obszervatóriumban ( USA ) tartott értekezleten kidolgozták a Forth nyelv szószedetét , amelyet AST.01-ként jelöltek meg.
1978 februárjában Utrechtben elfogadták a FORTH-77 szabványt, amely a mikroszámítógépes megvalósítást célozta .
1979 októberében a Santa Catalina-szigeten ( Kalifornia ) egy találkozó a FORTH-79 szabvány kidolgozásával ért véget, amely minden típusú számítógépre vonatkozik.
1983 őszén értekezletet tartottak a következő szabvány kidolgozására, amelyet 1984-ben FORTH-83 néven hagytak jóvá. A Fort-83 szabvány bizonyos részletekben eltér a Fort-79 szabványtól, de lényegében nem.
1988-ban az ACM részeként megalakult a SIGFORTH [5] csoport ; volt egy megfelelő orosz ACM-csoport is (elnök - Prof. S. N. Baranov ( Szentpétervár , SPIIRAS )). A SIGFORTH ma már az általánosabb csoport létezik
1994- ben, sok érdeklődő cég bevonásával folytatott hosszas tárgyalás után elfogadták a Forth ANSI nyelvi szabványt. [6]
A jelenlegi Forth nyelvi szabványt 2012-ben fogadták el. [7]
A Fort sikerének jól ismert példája a mélytengeri ereszkedő jármű szoftverében való felhasználása, amikor 1985 -ben a Titanicot keresték . A Fortot a Shuttle spektrográfjának szoftverében, mesterséges földi műholdak vezérlésére szolgáló mikromodulokban, a rijádi repülőtér vezérlőrendszerében , számítógépes látórendszerekben , véranalízis és kardiológiai vezérlés automatizálásában, zsebfordítókban is használták.
A Forth dialektust az OpenBootban , a SPARC és PowerPC processzorokon alapuló számítógépes szoftverben használják .
Az 1980-as évek elején John Warnock és Chuck Geschke, az Adobe Systems munkatársa megalkotta a PostScript nyelvet [8] . A nyelvek hasonlósága ellenére John Warnock megjegyezte [9] , hogy Forth nem volt hatással a PostScript létrehozására.
Vannak olyan processzorok és vezérlők, amelyek hardver szinten támogatják a nyelv számítási modelljét. A Forth számos nyílt forráskódú implementációja készült különféle hardverplatformokhoz. Külön cégek (köztük mindenekelőtt a Charles Moore által alapított FORTH, Inc. és a brit MicroProcessor Engineering Ltd. [10] ) szállítják a nyelv kereskedelmi változatait különböző képességekkel.
Az Electronic Arts 1980-as években készült két otthoni számítógépes játéka a Forth: Worms? (1983) [11] és Starflight (1986). [12] A Canon Cat (1987) a Forth -ot használta rendszerprogramozási nyelvként .
Az EuroForth konferenciákat évente rendezik, többek között Oroszországban, Angliában, Ausztriában, Németországban, Spanyolországban, a Cseh Köztársaságban (korábban Csehszlovákiában). [13]
A Forth rendszer fő része egy linkelt szólista vagy szótár , amelyből egy szót név szerint hívnak meg, hogy bizonyos funkciókat hajtson végre . A negyedik programozás új szavak meghatározásából áll a szótárban korábban definiált szavak alapján. Miután az új szavakat szótárba állítottuk össze, alakjukban nem különböznek a szótárban már szereplő szavaktól. Egy szó leírását a szótárban szócikknek nevezzük .
A "tipikus" Forth szótár felépítése a következő:
Hagyományosan a Forth cikkek két kategóriába sorolhatók: alacsony szintű cikkek és negyedik cikkek . Az első típusú cikkek a kódmezőben egy mutatót tartalmaznak a célprocesszor kódjaiban egy olyan eljárásra, amely közvetlenül végrehajtja a szó szemantikáját. Az ilyen cikkek paramétermezője az eljárásnak átadott paramétereket vagy magát annak kódját tartalmazza. A negyedik cikk más cikkekre mutat mutatókat a paramétermezőben, a kódmező pedig egy speciális eljárásra, az úgynevezett hivatkozás értelmezőre mutat . A gyakorlatban a cikk szerkezete a megvalósítástól függ, de általában hasonló a fent tárgyalthoz. A negyedik cikk paramétermezőjében használt elvet szálas kódnak , a hivatkozás értelmezőt pedig virtuális negyedik gépnek nevezik .
Nyelvtanilag a Forth fordító által feldolgozott szöveg tokenek sorozata ( eng. token ), amelyeket szóközök és sorvégi karakterek választanak el. A bemeneti karakterlánc fordító kiválasztja a következő tokent, és megkeresi az aktuális szótárban, és a keresést az újabb szavaktól a régebbiekig végzi. Ha a szó nem található, a tokent megkísérlik számbejegyzésként értelmezni, amely sikeres esetben a verem tetejére kerül. Ha a token megegyezik a Forth szóval, akkor a rendszer elemzi a Forth rendszer fordítási jelzőjének aktuális állapotát . Ha a zászló törlődik, akkor a szó végrehajtásra kerül - az irányítás átadásra kerül a talált cikk kódmezőjének mutatója szerint. Ha a jelző be van állítva, akkor a szó lefordításra kerül, azaz a kódmezőre mutató mutató hozzáfűződik az éppen létrehozott cikkhez. Ha egy számot lefordítottak, a rendszer kiugrik a veremből, és egy literális kódba fordítja , amelynek végrehajtása egy szótári bejegyzésen belül a verem tetejére tolja a számot. Ezenkívül a szavak tartalmazhatnak egy azonnali jelzőt is, ebben az esetben mindig végrehajtásra kerülnek.
A paraméterek szavak közötti átadásának mechanizmusa:
A nyelv lehetőséget biztosít a rendszermemória mint lineáris régió kezelésére.
A rendszer kötelező eleme a visszatérő verem is. Programozottan elérhető a program vezérlési folyamatának megváltoztatásához.
A fentiek mindegyike csak az első közelítésben vonatkozik az Erőd fogalmára. A Forth nem éppen egy programozási nyelv; inkább átfedi a programozási nyelv fogalmát. A Forth inkább egy virtuális gép és egy ForthOS operációs rendszer. [tizennégy]
A Forth szintaxisa és szemantikája bármely más programozási nyelvre kiterjeszthető közvetlenül a Forth program értelmezése (összeállítása) idején. A Forth metanyelvként való használata kényelmes a Forth-eszközök elérhetősége miatt, amelyek támogatják azokat a nyelveket, amelyek már szerepelnek a Forth rendszerben. A Forth rendszer összes erőforrása elérhető a felhasználó számára, és szótári bejegyzések formájában jelennek meg. Általános szabály, hogy a felhasználó által definiált szótárbejegyzések pontosan ugyanolyan reprezentációval rendelkeznek a Forth rendszerben, mint az összes többi szótárbejegyzés, amely a teljes Forth rendszert alkotja.
Valamilyen szálas kódot használnak egy lefordított program gépi reprezentációjaként .
A szubrutinkód használatakor gépi kódot kapunk, amelyben a hagyományos programozási nyelv fordítója által generált kóddal összehasonlítva, ahol a változók és a szubrutinokból származó visszatérési címek is egyetlen veremben vannak elhelyezve, nincs művelet a „húzásra”. and drop” szubrutin paramétereinek. Visszatérő veremként a processzor fő veremét használjuk, az adatvermet szoftverek rendezik.
Ha a szubrutinkódtól eltérő szálas kódot használ, a csak gépi kódból álló Forth definíciókat primitíveknek nevezzük . Egy ilyen szálas kódban gyakran a főprocesszor veremét próbálják adatveremként használni, és gépi utasítások popés formátumban hozzáférni a rajta heverő adatokhoz push.
Az indirekt szálas kód használatának egyik nem túl nyilvánvaló előnye, hogy az összes natív kód, azaz a primitívek, a kódértelmező hívások és a változók egyetlen kódszegmensbe helyezhetők, amely nem lesz hozzáférhető megváltoztatásra. Az összes többi Forth kód az adatszegmensben található. Sok ilyen szegmens lehet, és könnyebb egyetlen szegmensszámmal dolgozni, mint kettővel.
A negyedik rendszerek a bájtkódot is használhatják logikai következtetésként az indirekt szálas kód és a címtáblázattal ellátott hajtogatott szálas kód fejlesztéséhez. Ebben az esetben a programkód (Forth) bájtok sorozata, vagy valamilyen kitalált virtuális processzor kódja. A kód végrehajtásához szükség van egy 256 címből álló (2 bájtos, 4 bájtos vagy 8 bájtos) címtáblázatra, amelyen a Forth primitívek vagy összetett definíciók találhatók.
Ez az opció nagyon különbözik a többi kódtípustól, és külön figyelmet érdemel.
Példa egy .SIGN szódefinícióra, amely kiírja a megfelelő kifejezést a verem tetején lévő szám előjelétől függően:
\ Nyomtassa ki egy szám jelét : .JEL ( n -- ) ?DUP 0=HA "NULLA" MÁS 0>HA ." POZITÍV SZÁM" EGYÉB ." NEGATÍV SZÁM" AKKOR AKKOR ;Példa valódi kódra, amely egy karakterlánc-konstanst hoz létre a Forth-ban elfogadott formában (számlálóval):
\ Hozzon létre egy "konstanst" egy karakterláncból : S-ÁLLÓ ( c-addr u "<szóközök>név" -- ) TEREMT DUP, 0?DO DUP C@C,CHAR+ LOOP DROP 0 C, TESZ> DUP CELL+ SWAP @ ;Ez a példa szódefiníciót hoz létre a szó namehasználatával CREATE. A szónév végrehajtásakor a memóriaterületre mutató mutató címe, amely a szó fordításakor volt, a verembe kerül. Ahhoz, hogy valahogy használni lehessen, egy karakterláncot írnak oda ("összeállítva"). Amikor egy szót végrehajtanak, a szó után megadott szavak végrehajtásra kerülnek DOES>.
Így ebben a példában egy új szintaktikai konstrukciót hoztak létre. Hasonló szolgáltatások ritkán állnak rendelkezésre más programozási nyelvekben.
Amellett, hogy új szintaktikai konstrukciókat hoz létre, a Forth egyik legerősebb tulajdonsága az, hogy azonnali végrehajtási szavakkal (azonnali szavakkal) megzavarhatja a fordítási folyamatot.
Példák az ilyen szabványos szavakra:
[ - Átmenetileg végrehajtási módba váltás (sőt, gyakran csak 0-t ír a STATE változóba).
] — Váltson vissza fordítási módba.
LITERAL - Állítsa össze konstansként a verem tetején lévő számot. Ez is az azonnali végrehajtás szava.
Példakód, ahol ezek a szavak használatosak:
\ Bizonyos adatméret kilobájtban 16 ÁLLANDÓ méret \ Nyomtasson jelentést a kilobájtok bájtokká alakításáról :jelentés(-) méret . ." kilobájt egyenértékű a következővel: " [ méret 1024 * ] LITERAL . "bájt" ;Forth vitájának egyik visszatérő témája a „klasszikus” imperatív nyelvek között elfoglalt hely. A Forth programok rendkívül szokatlan megjelenésűek:
Yoda mester beszédtitka kiderült:
az Old Fort programozója csak ő volt.
Yoda beszédének feltárt rejtélye a következő: Yoda
csak egy régi Forth programozó volt. [tizenöt]
Ezek a tulajdonságok határozzák meg a Forth nyelv előnyeit és hátrányait:
Talán ami igazán hátráltatja a Fort fejlesztését, az az a "nehéz örökség", amely azoktól a kis kapacitású gépektől származott, amelyekhez eredetileg létrehozták. Az ANSI FORTH 94 szabvány például a következő jellemzőkkel rendelkezik:
Ezen jellemzők nagy része annak a ténynek köszönhető, hogy a szabvány elfogadásának idején sok rosszul kompatibilis Forth rendszer volt, amelyek két, részben eltérő szabványon alapultak 1979-ből és 1983-ból.
Programozási nyelvek | |
---|---|
|