Forth (programovací jazyk)

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání
Forth
Paradigma imperativní (procedurální), strukturovaný
Vznikl v 1969
Autor Charles H. Moore
Typová kontrola beztypovost
Ovlivnil jazyky PostScript, Joy

Forth je programovací jazyk, který se v dnešní době používá zejména ve vestavěných (embedded) systémech a real-time prostředích. Jazyk Forth vyvinul roku 1969 Charles H. Moore, který je jednou z významných osobností, jež se podílely na rozvoji výpočetní techniky.

Historie[editovat | editovat zdroj]

Kolem roku 1970 se objevuje označení FORTH (název je od slova FOURTH-čtvrtý, jazyk pro příští, čtvrtou generaci malých počítačů). Forth tedy nevznikl akademickým rozhodnutím, vytvářel ho jeden člověk, jedno desetiletí, jako pomůcku pro práci. První kompletní samostatnou aplikací Forthu je v roce 1971 řízení radioteleskopu pro NRAO. Další aplikace jsou v řízení antén, teleskopů, databáze, zpracování obrazu.

Tento člověk se jmenuje Charles „Chuck“ Moore a dodnes patří mezi zajímavé a současně velmi rozporuplné osobnosti, které se podílely na rozvoji výpočetní techniky, zejména vestavěných (embedded) řídících systémů a systémů běžících v reálném čase. Moore byl prý překvapen, když zjistil, že systém, který vyvinul pro své potřeby, používají i další lidé, kterým v jejich práci vyhovuje více než v té době komerčně prosazovaný Fortran.

Do značně heterogenního prostředí počítačů a operačních systémů sedmdesátých let přišel Moore se svým jazykem (či lépe řečeno celou vývojovou platformou) Forth. Vývojové prostředí Forthu obsahovalo interaktivní editor, interpret jazyka Forth a univerzální vazbu na assembler upravený na právě provozovaný systém. Toto prostředí umožňovalo spouštět souběžně více procesů a současně mohlo v systému nezávisle pracovat až 64 uživatelů, a to i na platformách, jejichž operační systém nebyl multiuživatelský a dokonce ani multitaskový.

Vlastnosti[editovat | editovat zdroj]

Forth je založen na použití dvojice zásobníků. První zásobník se nazývá zásobník operandů, druhý zásobník návratových adres. Prakticky všechny forthovské příkazy ovlivňují položky v jednom nebo obou zásobnících. Pro zápis příkazů i matematických operací je použita postfixová notace, někdy také nazývaná obrácená polská notace (anglicky Reverse Polish Notation). Při tomto způsobu zápisu se nejdříve uvádějí operandy a teprve za nimi následují operátory. Ve Forthu se místo označení operátor nebo funkce používá "slovo".

Příklady[editovat | editovat zdroj]

Jednoduchá aritmetika[editovat | editovat zdroj]

10 20 + ( toto je komentář )
10 20 * \ toto je jednořádkový komentář
10 20 - ( 10 způsobí vložení čísla 10 na vrchol zásobníku operandů a
        slovo - vezme dvě horní čísla ze zásobníku a vrátí na zásobník jejich součet )
10 20 + 30 * ( zpětné lomítko a závorky jsou také slova, takže musí být
            oddělena mezerou od okolních znaků )
5 4 3 2 1 * / + -

Vytvoření nového slova[editovat | editovat zdroj]

: print
  . \ slovo . vypíše hodnotu na vrcholu zásobníku
  cr \ slovo cr vypíše znak konce řádku
;

Použití nově definovaného slova[editovat | editovat zdroj]

10 print
1 2 + print
1 2 3 * - print

Základní slova pro práci se zásobníkem[editovat | editovat zdroj]

1 2 swap \ zásobník: 2 1
drop \ zásobník: 2
dup \ zásobník: 2 2
drop drop \ zásobník:
1 2 3 rot \ zásobník: 2 3 1
over \ zásobník: 2 3 3 1

Řídící struktury[editovat | editovat zdroj]

Podmínka[editovat | editovat zdroj]

10 20 > if
  20 .
else \ větev else je nepovinná
  10 .
then

Počítaná smyčka[editovat | editovat zdroj]

\ tento cyklus vypíše čísla od 1 do 10
10 1 do ( první argument slova do udává, kolikrát se bude cyklus opakovat
        druhý udává počáteční hodnotu počitadla )
    i . cr \ slovo i vloží na vrchol zásobníku hodnotu počitadla
loop

Cyklus while-do[editovat | editovat zdroj]

\ tento cyklus vypíše čísla od 1 do 10
0
begin
    dup 10 <
while
    1 +
    dup . cr
repeat
drop

Cyklus s podmínkou na konci[editovat | editovat zdroj]

\ vypočítá pomocí Euklidova algoritmu největší společný dělitel ze dvou čísel
: gcd
    begin
        swap over mod
        dup 0 = \ podmínka
    until \ opakuje se dokud je podmínka nepravdivá
    drop
;

Nekonečný cyklus[editovat | editovat zdroj]

\ tento cyklus vypíše čísla od 1 do 10
0
begin
    1 +
    dup . cr
    dup 10 > if
        abort \ slovo abort ukončí smyčku
    then
again

Externí odkazy[editovat | editovat zdroj]