Forth: Een Vreemde Programmeertaal. Here’s Why You Might Love It Anyway.

Openbaarmaking: Uw steun helpt de site draaiende te houden! Wij ontvangen een verwijzingsvergoeding voor sommige van de diensten die wij op deze pagina aanbevelen. Meer informatie

Forth is een ongewone taal. Het is in de eerste plaats een interpreter, en heeft een command-line interface, zodat het kan worden gebruikt in real-time. Maar het heeft ook de mogelijkheid om sets van code te nemen en deze te compileren. Het is dus een soort hybride.

Om die reden wordt Forth vaak gebruikt op hardware die geen traditioneel besturingssysteem heeft. Het wordt ook veel gebruikt om machines te besturen, en is gebruikt in de ruimtevaart – zelfs op Philae, de sonde die landde op komeet 67P/Churyumov-Gerasimenko.

Geschiedenis

Forth werd ontwikkeld door Charles Moore vanaf 1968, terwijl hij grafische programmering deed bij Mohasco Industries. Maar de eerste volledige Forth-implementatie kwam pas in 1971, toen Moore een standalone systeem maakte voor het besturen van de 11-meter telescoop van het Amerikaanse National Radio Astronomy Observatory (NRAO).

Eerdere versies van Forth hadden de aandacht getrokken van de programmeergemeenschap. Maar op dit punt, werd het erg populair in de astronomie gemeenschap. Dus richtte Moore in 1973 FORTH, Inc op met zijn NRAO collega’s Elizabeth Rather en Edward Conklin.

Het bedrijf portte het programma naar veel verschillende systemen. En FORTH, Inc is nog steeds een belangrijk bedrijf, dat Forth-gerelateerde producten levert aan mensen in het bedrijfsleven, de academische wereld en de overheid.

Overzicht van Forth

Er zijn een aantal unieke aspecten aan de Forth programmeertaal. We zullen de belangrijkste hier bespreken.

Forth Functies

Forth biedt vele unieke mogelijkheden:

  • Interactieve programmering
  • Creatie van gecompileerde uitbreidingen van de taal genaamd “woorden”
  • Stacks en Reverse Polish Notation
  • Directe verbinding tussen gebruiker en hardware.

Omgekeerde Poolse Notatie

Forth maakt wiskundige berekeningen met behulp van omgekeerde Poolse Notatie. Dit hangt af van het opslaan van getallen in een stack.

Bedenk de berekening: 2 + 3. In Forth zou dit worden gedaan door de 2 op de stapel te plaatsen, dan de 3 op de stapel te plaatsen, en ze dan op te tellen. Dit zou er ongeveer zo uitzien: 2 3 +.

Het lijkt een beetje vreemd, maar het is gemakkelijker voor de computer om te parsen, omdat dit de manier is waarop computers berekeningen uitvoeren. En als je er als codeur eenmaal aan gewend bent, wordt het heel natuurlijk.

Daarnaast is het niet nodig om haakjes te gebruiken. Kijk eens naar de volgende twee voorbeelden. (Let op: het backslash teken begint een commentaar.)

2 3 + 5 * This is the same as (2 + 3) * 52 3 5 * + This is the same as 2 + 3 * 5

In het eerste voorbeeld wordt 2 op de stack gezet, gevolgd door 3. Dus 2 is tweede in de stack en 3 is eerste. De “+” operator wordt toegepast op de eerste twee elementen van de stack. Dit verwijdert deze twee elementen van de stack, en laat 5 (2 + 3) boven op de stack staan.

Dan duwen we 5 op de stack. Dat zet een 5 op de eerste en tweede positie van de stapel. Tenslotte passen we de “*”-operator toe, waardoor 25 (5 * 5) boven op de stapel komt te staan.

In het tweede voorbeeld plaatsen we 2, 3 en 5 op de stapel, zodat 5 op de eerste positie staat, 3 op de tweede en 2 op de derde. Vervolgens passen we de “*”-operator toe op de bovenste twee elementen van de stapel (5 * 3), zodat 15 bovenaan de stapel wordt geplaatst.

Op dit punt staat 15 op de eerste positie en 2 op de tweede positie. Wanneer de + operator wordt toegepast, blijft 17 (15 + 2) boven op de stapel staan.

Voorbeeldprogramma

Het volgende programma is heel eenvoudig, maar het demonstreert veel van wat er in de taal gebeurt.

 : OUTMATH Output a mathematical calculation ." We will now calculate: (2 + 3) * 5" CR 2 3 + 5 * ." This equals: " . CR ; OUTMATH

Het eerste wat dit programma doet, is een functie met de naam OUTMATH definiëren. De volgende regels zijn deel van de functie tot en met de regel die eindigt met een puntkomma. De eerste regel drukt de tekst af, “We gaan nu berekenen: (2 + 3) * 5” en volgt met een carriage return.

De volgende regel voert de berekening uit die we hierboven hebben besproken, met als resultaat dat 25 boven op de stapel wordt geplaatst. De laatste regel van de functie geeft, “Dit is gelijk aan: “, gevolgd door de waarde bovenaan de stapel (weergegeven door “.”) en een carriage return.

Dan voeren we gewoon de functie uit. Dus als het programma loopt, geeft het weer:

We will now calculate: (2 + 3) * 5This equals: 25

Learning Forth

Voor de meeste programmeurs is dit een nieuwe manier van denken. Maar het is verrassend hoe natuurlijk het lijkt als je er eenmaal mee begint te werken. Hier zijn enkele tutorials en boeken die je met de taal aan de slag helpen.

Forth Tutorials

Er zijn veel online tutorials. Omdat Forth vreemd is voor niet-Forth programmeurs op hetzelfde moment dat het vanzelfsprekend is voor de huidige gebruikers, gaan veel van de tutorials voorbij aan dingen die verwarrend kunnen zijn voor beginners. Deze tutorials hebben dat probleem niet.

  • Easy Forth: dit korte Ebook is een uitstekende introductie. Het enige nadeel is dat er niet veel voorbeelden in staan. Bekijk daarom enkele van de voorbeelden hieronder.
  • A Beginner’s Guide to Forth: ook dit is een goede introductie. Het is een beetje technischer, maar heeft meer voorbeelden.
  • And So Forth…: dit is een zeer grondige inleiding tot Forth – bijna net zo goed als een boek.

Forth Books

Het is vaak gemakkelijker om een nieuwe taal te leren door een boek te krijgen dat je stap voor stap door het proces kan leiden. Er zijn veel goede boeken over Forth – vooral uit de jaren 1980, toen Forth echt van de grond kwam. Hier is een verzameling van de beste en belangrijkste.

  • Discover Forth: Learning and Programming the Forth Language (1982) door Thom Hogan: dit is een goede en beknopte inleiding tot de Forth taal.
  • Starting Forth: An Introduction to the Forth Language and Operating System for Beginners and Professionals (1982) door Leo Brodie: dit is een klassieker en een goede manier om Forth te leren. Het wordt niet meer gedrukt, maar tweedehands exemplaren zijn voor weinig geld te vinden. Het is ook gratis online beschikbaar. Gevorderde Forth programmeurs zouden Brodie’s recentere, Thinking Forth, eens kunnen bekijken.
  • Programming a Problem Oriented Language: Forth – How the Internals Work (2014) door Charles Moore: dit is een Kindle versie van het boek dat de schepper van Forth lang geleden schreef. Het geeft nog steeds scherpe inzichten in de taal, maar is niet de beste keuze om mee te beginnen.
  • Forth Programmer’s Handbook (2007) door Elizabeth Rather en Edward Conklin: dit is een meer geavanceerd boek over Forth door de andere twee Forth pioniers. Zie ook het boek van Rather, Forth Application Techniques (2006).

Other Resources

  • Forth Interest Group: deze site heeft allerlei interessante informatie waaronder oude historische documenten. Helaas zijn er ook veel gebroken links. Maar het is nog steeds de moeite van het bekijken waard.
  • Links to Forth Programs: dit is een geweldige verzameling van echte voorbeeldprogramma’s zoals een spreadsheet en een Sudoku puzzel oplosser.
  • Forth Google Group: dit is een zeer actieve groep van Forth gebruikers die vragen stellen en beantwoorden.
  • Forth Subreddit: dit is niet een verschrikkelijk actief forum, maar er zijn nog steeds goed geïnformeerde mensen op te vinden.

Forth Implementaties

Er zijn in de loop der jaren heel wat implementaties van Forth geweest. De Forth Interest Group heeft een lange Forth Compilers Page. Dus als je toevallig een PDP-11 in je garage hebt staan, dan kun je daar een Forth compiler voor krijgen! Maar voor modernere systemen zijn hier de meer gangbare opties.

bigFORTH

In het midden van de jaren ’80 ontwikkelden Dietrich Weineck, Georg Rehfeld, en Klaus Schleisiek volksFORTH voor 16-bit machines zoals de 8086 IBM PC en de 6502 Apple, Commodore, en Atari machines.

Ten slotte maakten ze een 32-bit versie voor de (16-bit bus) 68000-gebaseerde Atari ST. Hoewel volksFORTH vooruitgang boekte, ging het project zo goed als dood (hoewel het later opnieuw werd opgestart).

Bernd Paysan was echter voldoende geïnteresseerd in deze versie van volksFORTH (toen turboFORTH genoemd), dat hij het tot de basis van bigFORTH maakte.

De eerste versie werd uitgebracht voor de Atari ST in 1990. In 1995 werd bigFORTH geport naar de 386, en het jaar daarop was het beschikbaar voor Windows NT, OS/2, en Linux.

Graphical Interface

Op dat moment begon Paysan te werken aan MINOS. (Technisch gezien is het “MINOS”, maar gewoonlijk wordt er gewoon naar verwezen als “MINOS.”)

Het is een grafische interface voor bigFORTH. Het is misschien het gemakkelijkst om het te zien als “Visual bigFORTH” zoals Visual Basic, omdat dat min of meer is wat het is. Het werd in eerste instantie gemaakt voor het X-Windows systeem. Maar het was al snel ook beschikbaar voor Windows.

De ontwikkeling van zowel bigFORTH als MINOS lijkt te zijn gestopt rond 2010. Ze zijn echter allebei gemakkelijk verkrijgbaar en behoorlijk bruikbaar (bigFORTH is ANSI compliant). In feite is MINOS erg leuk om mee te spelen.

bigFORTH Resources

Als u bigFORTH wilt gebruiken of er zelfs voor wilt ontwikkelen, hebt u alle gereedschappen die u nodig hebt:

  • Broncode: dit is de code van de laatste officiële release op 22 maart 2010, Versie 2.4.
  • Debian Pakket: een gemakkelijk te installeren pakket voor elke Debian-gebaseerde Linux distributie (bv, Ubuntu, Mint). Het installeert in /usr/local/bin, en bevat MINOS, hoewel het xbigforth heet.
  • Windows Self-Installing Executable: hetzelfde als het Debian pakket, maar dan voor Windows. MINOS heet zelfs xbigforth.exe.
  • Documentatie (PDF): dit bijna 300 pagina’s tellende boek fungeert als een handleiding en referentie, geschreven door JL Bezemer. Een groot deel ervan gaat over generieke Forth en is waar “And So Forth…” uit is overgenomen.
  • Bernd Paysan’s Homepage: deze pagina heeft veel interessante Forth-gerelateerde informatie en voorbeelden. Van bijzonder belang is Paysan’s op Forth gebaseerde markup taal.
  • bigFORTH Repository: de ultieme bestemming voor al uw bigFORTH benodigdheden.

Gforth

Gforth is de GNU implementatie van Forth. Het heeft een voorname stamboom.

Het Gforth project werd in 1992 gestart door bigFORTH bedenker Bernd Paysan en Anton Ertl, met substantiële bijdragen van Jens Wilke.

Het was een combinatie van bigFORTH en het veel oudere fig-FORTH (zie hieronder). Maar de geschiedenis ervan is verdraaid, omdat bigFORTH voortkwam uit volksFORTH, dat was gebaseerd op fig-FORTH.

Omdat het een GNU project is, is er veel werk aan verricht sinds het begon. Het is nu volledig ANSI-compliant en heeft al zijn oorspronkelijke doelen bereikt. De meest recente versie is 0.7.3, met de laatste toevoeging (door Paysan) op 25 februari 2013.

In termen van vrije Forth implementaties, is Gforth de meest gebruikte. Een deel daarvan is gewoon omdat het onderdeel is van het GNU project en de beschikbaarheid ervan. Maar ook omdat het krachtig en snel is.

Gforth Bronnen

Gforth heeft alle bronnen die u nodig heeft om het te gebruiken zoals u dat wilt:

  • Broncode: deze pagina geeft de Gforth broncode vanaf versie 0.2.1 tot de huidige, 0.7.3.
  • Debian Pakketten: er zijn verschillende pakketten beschikbaar voor de Debian Linux distributie. Merk op dat afhankelijk van het pakket dat u kiest, u mogelijk eerst een of meer andere pakketten moet installeren.
  • Windows Self-Installing Executable: dit is een eerdere (0.7.0) versie van Gforth, maar een snelle manier om aan de slag te gaan.
  • Documentatie (PDF): dit 250 pagina’s tellende boek geldt voor versie 0.7.0 van Gforth. Het is ook beschikbaar in HTML formaat.
  • Gforth Repository: zo’n beetje alles met betrekking tot Gforth kan hier gevonden worden.

pbForth

pbForth lijkt niet meer ondersteund te worden, maar het is zo’n interessante implementatie van Forth dat het zeker de moeite waard is om te bekijken.

Zoals we besproken hebben, is Forth altijd geassocieerd geweest met hardware besturing. Dus het was helemaal niet verwonderlijk dat een Forth implementatie werd gemaakt voor de LEGO MINDSTORMS robotics kit – specifiek, de 16-bit RCX die uitkwam in 1998.

Het lijkt nooit te zijn bijgewerkt om te werken met de tweede generatie, NXT-serie, die uitkwam in 2006, noch de huidige MV3, die uitkwam in 2013.

Hoewel er geen officiële site is voor pbForth, is het nog steeds mogelijk om er over te leren en het zelfs te gebruiken. Er kan echter een steile leercurve zijn, omdat er niet zo veel informatie is. En het is duidelijk dat je een LEGO MINDSTORMS RCX nodig hebt (die zijn niet zo moeilijk tweedehands te vinden).

De NXT gebruikt een heel andere (en 32-bit) processor, dus pbForth zou er zeker niet mee werken. Maar toch, het kan leuk zijn. En als je er zin in hebt, zou je het kunnen porten naar tweede en derde generatie kits.

pbForth Resources

Wat er aan informatie op het gewone internet te vinden is, is over het algemeen summier en linkt altijd naar de pbForth Home Page, die al sinds minstens 2010 niet meer in bedrijf is. Het is alleen dankzij het Internet Archive dat veel hiervan beschikbaar is.

  • History of LEGO Robotics: hoewel het niet over pbForth gaat, geeft het een snel overzicht van LEGO MINDSTORMS producten.
  • Introduction to pbForth (PDF): deze 30 pagina’s tellende tutorial helpt u op weg met de taal.
  • phForth Bron Code: merk op dat pbForth is geschreven in assembleertaal en Tcl, dus u zult deze tools beschikbaar moeten hebben.
  • Windows GUI: dit bestand draait, hoewel het ingewikkelder kan zijn om het iets te laten doen. Als u pbForth voor Linux of Mac wilt gebruiken, zult u de broncode moeten gebruiken.
  • phForth Home Page Circa 2009: deze pagina bevat links naar nogal wat interessante informatie over pbForth, met name een half dozijn voorbeeldscripts.

Other Implementations

  • fig-FORTH: dit was een van de vroegste Forth-implementaties, gemaakt door de Forth Interest Group. Het is een 16-bit implementatie. Het is beschikbaar voor enkele prachtige oude computers zoals de Data General Eclipse en de Alpha Micro, maar ook voor op 8086 en 6502 gebaseerde computers. Het probleem is dat er geen uitvoerbare bestanden zijn – alleen assembleertaalcode. En in de meeste gevallen, alleen bitmap PDF bestanden van de code. Werkelijke code lijkt alleen beschikbaar te zijn voor 8088/8086, PDP-11, en 6800. (De 6800 is een 8-bit processor, dus blijkbaar was er een 8-bit versie van fig-FORTH.)
  • SP-Forth: dit is een gratis Forth-implementatie voor Windows en Linux.
  • 4tH: dit is een eenvoudig te gebruiken Forth-implementatie die beschikbaar is voor een groot aantal hardware (waaronder de Raspberry Pi), en goede documentatie bevat.
  • SwiftForth™: dit is de Forth compiler van het originele bedrijf dat Forth naar de wereld bracht. Het is een commercieel produkt, maar het is redelijk geprijsd.

Samenvatting

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.