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 aan te spreken vanuit een interactief systeem 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 snel aanroepen van procedures (woorden). Dit betekent dat programma's modulair kunnen worden zonder dat dit al te zeer 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 ten zeerste ten goede.
Een comfortabel Forth-systeem met interpreter, compiler, editor, assembler en multitasker neemt vaak zelfs 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 versies draaien ook onder MS-DOS, MS-Windows of UNIX systemen.
Forth is, zoals geldt voor elke respectabele programmeertaal, voor het grootste deel in Forth zelf gespecificeerd. Wat over blijft zijn eenvoudige elementen, zoals een optelling. Door de eenvoud waarmee deze zijn in te passen is het voor een ervaren Forther mogelijk in zeer korte tijd de taal over te zetten naar een nieuwe processor of een nieuwe hardware omgeving. 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 op 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 ook vaak in hardware gerealiseerd (NOVIX 4000, SC32, RTX2000, FRP1600, IX). Deze systemen overtreffen de prestaties van de huis-tuin-en-keuken 68030 en 80386 systemen, zeker voor Forth code. Bijvoorbeeld een 12 MHz RTX2000 haalt pieksnelheden van 60 miljoen Forth instructies per seconde, 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).
12 juni 2023