Eigenschappen van Forth

Forth bestaat net zoals de spreektaal uit "woorden". De woordenschat van Forth kan naar believen uitgebreid worden. Het bijzondere hieraan is dat de door de gebruiker gemaakte woorden dezelfde status hebben als de standaard set. Door combinatie van de standaard woorden met je eigen woorden kun je commando's en datastructuren maken die speciaal zijn toegesneden op het probleem dat je wilt aanpakken.

Een essentiële eigenschap van Forth die hierbij goed van pas komt, is dat het een interactieve taal is. Compileren en linken is niet nodig, dat gebeurt incrementeel (stukje bij beetje). Ieder nieuw woord is direct uitvoerbaar en de programmeur kan het testen zonder er een raamwerk omheen te moeten schrijven (wat weer extra compileren, linken en ontluizen zou betekenen).

Omdat Forth het toestaat de hardware direct aan te spreken is het een ideale taal voor zogenaamd "rapid prototyping". In plaats van top-down werkt men dan liever bottom-up, om zeer snel een inzicht in de te verwachten problemen te krijgen en vertrouwd te raken met de beperkingen van de hardware.

Behalve de mogelijkheid om af te dalen naar het niveau van de bits en de bytes heeft Forth de voordelen van een hogere programmeertaal: onafhankelijk kunnen werken van de toevallig aanwezige processor en de beschikking hebben over abstracte datastructuren. Daarbij is op te merken dat Forth is geoptimaliseerd voor het zeer snel aanroepen van procedures (woorden). Dit betekent dat programma's extreem modulair kunnen worden zonder dat dit ten koste gaat van de snelheid. De gemiddelde Forth procedure kan dan ook zeer kort zijn. Dit komt de overzichtelijkheid en de mogelijkheid tot hergebruik natuurlijk enorm ten goede.

Een comfortabel Forth-systeem met interpreter, compiler, editor, assembler en multitasker neemt meestal minder dan 20 kB ruimte in beslag. Vanwege deze compactheid is het een geliefd assembler alternatief voor single-board computers (trefwoord: "embedded control"). Forth is in staat zelf de taken van een operating system waar te nemen, maar vanzelfsprekend draait het ook onder MS-DOS, Windows of UNIX systemen.

Forth is voor een zeer groot deel in Forth zelf geschreven. Hierdoor is het voor een ervaren Forther mogelijk in zeer korte tijd de taal over te zetten naar een nieuwe processor. Een andere hardware omgeving is dan natuurlijk al helemaal triviaal. Voor bijna iedere micro-, mini- en mainframe computer bestaat er wel een implementatie, van 8031 tot VAX tot IBM 370. Vaak is Forth de eerste taal die voor een nieuwe processor beschikbaar komt.

Vanwege de compacte bouw is Forth ook voor een serieuze amateur nog volledig te overzien. De efficiënte, stack-georiënteerde architectuur wordt steeds vaker in hardware gerealiseerd (NOVIX 4000, SC32, RTX2000, FRP1600, IX). Deze systemen overtreffen de prestaties van de huis-tuin-en-keuken 68030 en 80386 systemen met straatlengten. Bijvoorbeeld een 12 MHz RTX2000 haalt pieksnelheden van 60 MIPS, met naar verhouding zeer weinig hardware.

Hoe eenvoudig Forth er in de praktijk uit kan zien toont het volgende voorbeeld van een LED (lampjes) sturing. Er zijn 16 ledjes op aangesloten. Het woord LIGHT stuurt een bitpatroon naar de uitvoer (hier het BAMBOE printje).

: LIGHT ( n -- ) TO BAMBOE ; \ BAMBOE is
                             \ hardwareafhankelijk

  100 VALUE delay            \ Vertragingstijd

: SLOW 500 TO delay ;        \ Grote vertraging
: FAST 100 TO delay ;        \ Kleine vertraging
: COUNTS ( -- )              \ Test alle lampjes
  0 0 DO I LIGHT delay MS LOOP ; 

: LAMP ( lampnr  -- )
  1 SWAP LSHIFT ( nr -- bitadres )
  CREATE ,           \ Geef het bitadres een naam
  DOES> ( -- bitadres )
  @ ;

\ Geef enkele ledjes een naam
  0 LAMP power  1 LAMP record
  2 LAMP calls  3 LAMP answer
  4 LAMP memo   6 LAMP test

  0 VALUE lamps      \ Voor de uitgangstoestand

: ON ( bitadres -- )       \ Zet een ledje aan
  lamps OR
  DUP TO lamps LIGHT ;
: OFF ( bitadres -- )      \ Zet een ledje uit
  INVERT lamps AND
  DUP TO lamps LIGHT ;
: TOGGLE ( bitadres -- )   \ Verander het niveau
  lamps XOR                \ van een ledje.
  DUP TO lamps LIGHT ;

We hebben de lampjes namen gegeven die voor zouden kunnen komen op een telefonisch antwoordapparaat. We hadden het allemaal nog veel fraaier kunnen maken, maar het gaat hier om een eenvoudig voorbeeld.

Als het is ingeladen, verschijnt na slow counts of fast counts de uitvoer van een 8 bits teller op de LED's. power on zet ledje #0 (genaamd POWER) aan en power off zet hem weer uit. power toggle schakelt LEDje #0 om, van aan naar uit en andersom.

Het compileren van deze code voor een 8051 SBC of iets dergelijks zal, met behulp van een standaard communicatie-programma zoals bijvoorbeeld PROCOM, niet meer dan een halve seconde in beslag nemen. Tekst kan ook rechtstreeks ingetypt worden, wat vooral voor het ontluizen erg gemakkelijk is.

Charles Moore heeft Forth eind 60-er jaren ontwikkeld, voor toepassingen bij lineaire deeltjesversnellers en later radiotelescopen (Kitt Peak).

Ook vandaag de dag wordt Forth op deze gebieden nog toegepast (ruimtesondes, Space-Shuttle).