Forth | |
---|---|
Sémantika | rozkazovací způsob |
Jazyková třída | programovací jazyk , interpretovaný programovací jazyk a kompilovaný programovací jazyk |
Typ provedení | překladač/překladač |
Objevil se v | 1971 |
Autor | Charles H. Moore |
Typový systém | netypizovaný |
Hlavní implementace | gForth , pForth, kForth, SP-Forth [1] , win32forth [2] |
Dialekty | FORTH-79, FORTH-83, ANSI FORTH 1994, ColorForth , RetroForth . Čtvrtý standard 2012 |
Byl ovlivněn | APL , Lisp |
ovlivnil | PostScript , Factor a další zřetězení jazyků |
Mediální soubory na Wikimedia Commons |
Forth ( anglicky Forth ) je jedním z prvních zřetězených programovacích jazyků , ve kterém jsou programy psány jako sekvence lexémů („slova“ v terminologii jazyka Forth). Matematické výrazy jsou reprezentovány postfixovým zápisem při použití zásobníku . Podporuje mechanismy pro metarozšíření sémantiky a syntaxe jazyka pro přizpůsobení požadované oblasti. Syntaxe základní úrovně ve Forth je jednoduchá a skládá se z jediného pravidla: "všechny definice jsou odděleny mezerami". Čtvrté definice mohou mít libovolnou kombinaci znaků.
Řada vlastností, jmenovitě interaktivita , flexibilita a snadný vývoj, činí z Forth efektivní jazyk pro aplikovaný výzkum a vytváření nástrojů. Vestavěné řídicí systémy jsou zřejmé oblasti použití tohoto jazyka . Díky své jednoduchosti je kompilátor a často kompilátor Forth snadno implementován pro velkou většinu mikrokontrolérů a používá se také jako nástroj křížového programování . Používá se také při programování počítačů s různými operačními systémy nebo jako nezávislé operační prostředí.
Jazyk Forth vytvořil Charles X. Moore koncem 60. a začátkem 70. let. Moore nazval svůj jazyk Fourth , protože věřil, že to bude počítačový jazyk čtvrté generace . Ale protože pracoval na stroji IBM 1130 , který umožňoval jména složená z ne více než pěti velkých písmen, bylo jméno převedeno na FORTH ( eng. forth - forward). První Mooreovy experimenty s vytvořením jednoduchého tlumočníka, který usnadňuje psaní programů pro ovládání astronomických zařízení, však pocházejí z konce 50. let 20. století. [3]
Od roku 1971 Moore pracoval na National Radio Astronomy Observatory , kde se podílel na vývoji programů pro sběr a zpracování dat přijatých radioteleskopem . Tehdy se objevila první implementace jazyka Forth. Na této práci se podílela i Moorova spolupracovnice Elizabeth Ratherová , kterou lze považovat za druhou programátorku pevnosti na světě .
Nově vytvořený jazyk byl přijat jako hlavní programovací jazyk Americkou astronomickou společností . Později, v roce 1973, Charles Moore a Elizabeth Rather založili FORTH, Inc [4] , během níž byl jazyk portován na mnoho platforem v průběhu následující dekády.
Na konci 70. let byla FORTH Interest Group (FIG) vytvořena programátory, kteří měli zájem o vývoj jazyka. Tato skupina vyvinula koncept modelu FIG Forth, veřejně dostupného systému, který lze snadno přenést na populární počítačové architektury. Tento čtvrtý referenční systém, FIG-FORTH, je často považován za původní jazykový standard.
Myšlenka oficiální standardizace Forth původně vznikla v rámci International Association of Astronomers ( anglicky Astronomical Sciences, AST ). V květnu 1977 byl na setkání v Kitt Peak National Observatory ( USA ) vyvinut glosář jazyka Forth, označený jako AST.01.
V únoru 1978 byl v Utrechtu přijat standard FORTH-77 , zaměřený na implementaci mikropočítačů .
V říjnu 1979 skončilo setkání na ostrově Santa Catalina ( Kalifornie ) vývojem standardu FORTH-79, který platí pro všechny typy počítačů.
Na podzim roku 1983 se konala schůzka k vypracování dalšího standardu, schváleného v roce 1984 jako FORTH-83. Standard Fort-83 se liší od standardu Fort-79 v některých detailech, ale ne v podstatě.
V roce 1988 byla skupina SIGFORTH [5] organizována jako součást ACM ; existovala i odpovídající ruská skupina ACM (předseda - prof. S. N. Baranov ( Petrohrad , SPIIRAS )). SIGFORTH nyní existuje jako součást SIGPLAN
V roce 1994, po zdlouhavých jednáních zahrnujících mnoho zainteresovaných firem, byla přijata jazyková norma ANSI Forth. [6]
Současná jazyková norma Forth byla přijata v roce 2012. [7]
Známým příkladem úspěchu Fortu je jeho použití v softwaru hlubokomořského sestupového vozidla při hledání Titaniku v roce 1985 . Fort byl také použit v softwaru spektrografu na Shuttle , v mikromodulech pro ovládání umělých družic Země, pro řídicí systém na letišti v Rijádu , systémy počítačového vidění , automatizaci krevních analýz a kardiologické kontroly, kapesní překladače.
Čtvrtý dialekt se používá v OpenBoot , základním počítačovém softwaru založeném na procesorech SPARC a PowerPC .
Na počátku 80. let vytvořili John Warnock a Chuck Geschke z Adobe Systems jazyk PostScript [8] . Přes podobnosti jazyků John Warnock poznamenal [9] , že Forth neměl vliv na vytvoření PostScriptu.
Existují procesory a řadiče, které podporují výpočetní model jazyka na hardwarové úrovni. Mnoho open source implementací Forth bylo vytvořeno pro různé hardwarové platformy. Samostatné firmy (mezi nimiž je třeba poznamenat především FORTH, Inc založený Charlesem Moorem a britská společnost MicroProcessor Engineering Ltd. [10] ) dodávají komerční verze jazyka s různými schopnostmi.
Dvě domácí počítačové hry od Electronic Arts vytvořené v 80. letech byly napsány ve Forth: Worms? (1983) [11] a Starflight (1986). [12] Canon Cat (1987) použil Forth jako systémový programovací jazyk .
Konference EuroForth se konají každoročně, mimo jiné v Rusku, Anglii, Rakousku, Německu, Španělsku, České republice (dříve v Československu). [13]
Hlavní částí systému Forth je propojený seznam slov neboli slovník , ze kterého je slovo voláno jménem, aby plnilo specifické funkce. Čtvrté programování spočívá v definování nových slov na základě slov dříve definovaných ve slovníku. Jakmile jsou nová slova sestavena do slovníku, neliší se ve formě od slov, která již ve slovníku jsou. Popis slova ve slovníku se nazývá záznam .
Struktura "typického" hesla ve Forth slovníku je:
Články čtveřice lze běžně rozdělit do dvou kategorií: články nízké úrovně a články čtveřice . Články prvního typu obsahují v poli kódu ukazatel na proceduru v kódech cílového procesoru, která přímo provádí sémantiku slova. Pole parametrů takových článků obsahuje parametry předávané proceduře nebo její samotný kód. Čtvrté články obsahují ukazatele na jiné články v poli parametru a pole kódu ukazuje na speciální proceduru nazývanou interpreter odkazů . V praxi struktura článku závisí na implementaci, ale zpravidla je podobná výše uvedenému. Princip použitý uvnitř pole parametrů čtvrtého článku se nazývá vláknový kód a interpret odkazů se nazývá virtuální čtvrtý stroj .
Gramaticky je text zpracovaný překladačem Forth posloupností tokenů ( angl. token ), oddělených mezerami a znaky na konci řádku. Překladač vstupních řetězců vybere další token a vyhledá jej v aktuálním slovníku a vyhledávání se provádí od novějších slov ke starším. Pokud slovo není nalezeno, pokusí se token interpretovat jako číselný záznam, který se v případě úspěchu posune na vrchol zásobníku. Pokud se token shoduje se slovem Forth, analyzuje se aktuální stav příznaku kompilace systému Forth . Pokud je příznak vymazán, pak se slovo vykoná - řízení se předá podle ukazatele pole kódu nalezeného článku. Pokud je příznak nastaven, slovo se zkompiluje , to znamená, že se k aktuálně vytvořenému článku připojí ukazatel na pole jeho kódu. Pokud bylo číslo přeloženo, je vyjmuto ze zásobníku a zkompilováno do doslovného kódu , jehož spuštění uvnitř položky slovníku posune číslo na vrchol zásobníku. Kromě toho mohou slova obsahovat okamžitý příznak , v takovém případě se vždy provedou.
Mechanismus pro předávání parametrů mezi slovy:
Jazyk poskytuje způsob, jak pracovat se systémovou pamětí jako s lineární oblastí.
Povinnou součástí systému je také vratný zásobník. K dispozici programově pro změnu řídicího toku programu.
Vše výše uvedené platí pro koncept Fort pouze v prvním přiblížení. Forth není zrovna programovací jazyk; spíše překrývá pojem programovacího jazyka. Forth je spíše virtuální stroj a operační systém ForthOS. [čtrnáct]
Syntaxi a sémantiku Forth lze rozšířit na jakýkoli jiný programovací jazyk přímo v době interpretace (kompilace) programu Forth. Použití Forth jako metajazyka je pohodlné díky dostupnosti nástrojů Forth, které podporují ty jazyky, které jsou již v systému Forth. Všechny zdroje systému Forth jsou uživateli k dispozici a jsou prezentovány ve formě slovníkových hesel. Uživatelsky definované slovníkové položky mají zpravidla přesně stejné zastoupení v systému Forth jako všechny ostatní položky slovníku, které tvoří celý systém Forth.
Nějaký druh vláknového kódu se používá jako strojová reprezentace zkompilovaného programu .
Při použití kódu podprogramu se získá strojový kód, ve kterém ve srovnání s kódem generovaným kompilátorem běžného programovacího jazyka, kde jsou proměnné i návratové adresy z podprogramů umístěny na jednom zásobníku, neexistují žádné operace pro „přetažení a drop“ parametrů podprogramu. Hlavní zásobník procesoru se používá jako návratový zásobník, zásobník dat je organizován softwarově.
Při použití zřetězeného kódu jiného než kódu podprogramu se definice Forth skládající se pouze ze strojového kódu nazývají primitiva . V takovém vláknovém kódu se často snaží použít hlavní zásobník procesoru jako zásobník dat a přístup k datům na něm ležícím ve formě strojových instrukcí popa push.
Jednou z ne zcela zřejmých výhod používání nepřímého vláknového kódu je, že veškerý nativní kód, tedy primitiva, volání interpretu kódu a proměnné, lze umístit do jednoho segmentu kódu, který nebude přístupný ke změnám. Všechny ostatní kódy Forth jsou umístěny v datovém segmentu. Těchto segmentů může být mnoho a je jednodušší pracovat s jedním číslem segmentu než se dvěma.
Čtvrté systémy mohou také používat bajtový kód jako logický závěr vývoje nepřímého vláknového kódu a složeného vláknového kódu s tabulkou adres. V tomto případě je programový kód (Forth) posloupnost bajtů nebo kód nějakého vynalezeného virtuálního procesoru. Aby bylo možné tento kód spustit, musí existovat tabulka 256 adres (2bajtové, 4bajtové nebo 8bajtové), na kterých jsou umístěna Forth primitiva nebo komplexní definice.
Tato možnost se velmi liší od ostatních typů kódu a zaslouží si zvláštní pozornost.
Příklad definice slova .SIGN, která vytiskne příslušnou frázi v závislosti na znaménku čísla v horní části zásobníku:
\ Vytiskněte znak čísla : .SIGN ( n -- ) ?DUP 0=KDYŽ "NULA" JINÝ 0>IF "POZITIVNÍ ČÍSLO" JINAK "ZÁPORNÉ ČÍSLO" PAK PAK ;Příklad skutečného kódu, který vytváří řetězcovou konstantu ve formě přijaté ve Forth (s čítačem):
\ Vytvořte "konstantu" z řetězce : S-CONSTANT ( c-addr u "<mezery>jméno" -- ) VYTVOŘIT DUP , 0? DO DUP C@ C,CHAR+ LOOP DROP 0 C, DĚLÁ > DUP CELL+ SWAP @ ;Tento příklad vytvoří definici slova namepomocí slova CREATE. Po provedení názvu slova se do zásobníku umístí adresa ukazatele na oblast paměti, která byla v době kompilace slova. Aby se to dalo nějak použít, zapíše se tam řetězec („zkompilovaný“). Po provedení slova se provedou slova zadaná za slovem DOES>.
V tomto příkladu byl tedy vytvořen nový syntaktický konstrukt. Podobné funkce jsou zřídka poskytovány v jiných programovacích jazycích.
Kromě vytváření nových syntaktických konstrukcí je jednou z nejsilnějších funkcí Fortha schopnost zasahovat do procesu kompilace pomocí okamžitých prováděcích slov (bezprostředních slov).
Příklady takových standardních slov:
[ - Dočasné přepnutí do režimu provádění (ve skutečnosti často pouze zapíše 0 do proměnné STATE).
] — Přepněte zpět do režimu kompilace.
LITERAL - Zkompilujte číslo aktuálně na vrcholu zásobníku jako konstantu. Je to také slovo okamžitého provedení.
Příklad kódu, kde jsou použita tato slova:
\ Určitá velikost dat v kilobajtech 16 KONSTANTNÍ velikost \ Vytiskněte zprávu o převodu kilobajtů na bajty :zpráva(-) velikost . ." kilobajty jsou ekvivalentní " [ velikost 1024 * ] DOSLOVNĚ . "bajtů" ;Jedním z opakujících se témat Forthovy kontroverze je jeho místo mezi „klasickými“ imperativními jazyky. Čtvrté programy mají extrémně neobvyklý vzhled:
Tajemství řeči mistra Yody bylo odhaleno:
Programátor staré pevnosti byl jen on.
Záhada Yodovy řeči odkrytá je:
Yoda byl jen starým programátorem Forth. [patnáct]
Tyto vlastnosti určují výhody a nevýhody jazyka Forth:
Možná, co skutečně brzdí vývoj Fortu, je „těžké dědictví“, které vzešlo z nízkokapacitních strojů, pro které byl původně vytvořen. Norma ANSI FORTH 94 má například tyto vlastnosti:
Mnoho z těchto funkcí je způsobeno skutečností, že v době, kdy byl standard přijat, existovalo mnoho špatně kompatibilních systémů Forth, které byly založeny na dvou částečně odlišných standardech z roku 1979 a 1983.
Programovací jazyky | |
---|---|
|