**Forth** on tietokoneiden ohjelmointikieli ja interaktiivinen ohjelmointiympäristö, jonka kehitti alun perin Charles H. Moore 1970-luvun alkupuolella.

Forth on rakenteeltaan hyvin yksinkertainen pinokeskeinen kieli, joka on ollut suosittu etenkin laitteistoresursseiltaan vaatimattomissa ja tehokasta ohjelmointia vaativissa sulautetuissa järjestelmissä. On valmistettu jopa mikroprosessoreita, jotka suorittavat Forth-tavukoodia konekielenään.

Historia
--------

Moore kehitti kielen vastajulkaistulla IBM 1130-minitietokoneella. Moore käytti Fortrania ensimmäisen Forthin toteutukseen.

Kieli on vaikuttanut RPL-kieleen, jonka Hewlett-Packard kehitti laskimiinsa 1980-luvulla.

Esimerkkejä
-----------

### Yhteenlasku

```
 5 7 + .

```

Sanat *5* ja *7* lisäävät asianomaiset luvut datapinoon. Sana *+* laskee yhteen datapinon kaksi päällimmäistä lukua ja jättää jäljelle summan eli tässä tapauksessa luvun 12. Sana *.* tulostaa pinon päällimmäisen luvun.

Pino on hyvin keskeisessä osassa Forth-ohjelmoinnissa, ja jopa ohjausrakenteet on toteutettu pinokeskeisesti. Tästä syystä Forth-ohjelmakoodin hahmottaminen vaatii jonkin verran harjoittelua.

### Aliohjelma

```
 : FLOOR5 ( n -- n' )   DUP 5 < IF DROP 5 ELSE 1 - THEN ;

```

Tämä ohjelmakoodi määrittelee uuden sanan eli aliohjelman nimeltä FLOOR5, joka ottaa syötteenä yhden alkion (n) pinon päältä ja jättää tulosteenaan pinon päälle yhden alkion (n').

Aliohjelma itse vertaa syötteenään saamaansa lukua lukuun 5. Jos luku on pienempi kuin 5, niin palautetaan 5, muutoin vähennetään siitä 1 ja palautetaan erotus. Ohjelman suoritus etenee seuraavasti:

*DUP*-sana tuplaa pinon päällimmäisen alkion. Jos pinon huipulla on esimerkiksi 8, on DUP-sanan suorituksen jälkeen huipulla kaksi 8:aa (8 8).

*<*-sana vertailee pinon kahta päällimmäistä lukua (esimerkissä 8 ja 5) toisiinsa ja jättää niiden tilalle totuusarvon, joka ilmaisee, onko ensimmäinen luku pienempi kuin toinen.

*IF*-sana jatkaa suoritusta pinon päällimmäisenä olevan totuusarvon mukaan. Jos arvo on tosi, suoritetaan koodi IF- ja ELSE-sanojen välistä, muussa tapauksessa ELSE- ja THEN-sanojen välistä.

*DROP*-sana poistaa pinon päällimmäisen alkion. Tässä tapauksessa sitä tarvitaan, jotta päällimmäisen alkion voisi korvata luvulla 5.

Sanat *1 -* vähentävät pinon päällimmäisenä olevasta luvusta (eli syötteestä) luvun 1.

Sana *;* lopettaa sanan määrittelyn, joka alkoi sanoilla *FLOOR5 (n -- n' )*.

### Hello World

Kuuluisa Hello World -ohjelma toteutettaisiin Forthilla seuraavasti:

```
  : HELLO ( -- )   ." Hello World!" ; HELLO

```

Lähteet
-------

1. 1 2 3  Naomi Hamilton: The A-Z of Programming Languages: Forth  27.6.2008. Computerworld.  Arkistoitu 11.6.2019. Viitattu 27.5.2019. (englanniksi)
2. ↑  RPL *hpmuseum.org*. Viitattu 20.6.2022. (englanniksi)

Aiheesta muualla
----------------

* Forth Interest Group (englanniksi)
* The evolution of Forth doi:10.1145/155360.155369 (englanniksi)

|  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * n
* k
* m
Yleisimmät ohjelmointikielet |
| --- |
|  |
| Tuotantokäytössä | 
* Ada
* APL
* Assembly
* AWK
* C
* C++
* C#
* COBOL
* Dart
* Delphi
* Eiffel
* Erlang
* Forth
* Fortran
* Go
* Java
* JavaScript
* Kotlin
* Lisp
* Lua
* Objective-C
* Pascal
* Perl
* PHP
* PostScript
* Python
* R
* Ruby
* Rust
* Smalltalk
* Swift
* Tcl
* TypeScript
* Visual Basic

 |
|  |
| Akateemiset | 
* CLU
* Haskell
* Logo
* ML
* OCaml
* Prolog
* Scheme

 |
|  |
| Historialliset | 
* ALGOL
* BASIC
* Modula-3
* MUMPS
* Plankalkül
* PL/I
* Simula

 |
|  |
| Luettelo yleisimmistä ohjelmointikielistä |

 |

|  |  |  |
| --- | --- | --- |
| 

|  |  |
| --- | --- |
| Auktoriteettitunnisteet: Kansalliset Muokkaa Wikidatassa | 
* Saksa
* Israel
* Yhdysvallat

 |

 |