Forth: A Weird Programming Language. Here’s Why You Might Love It Anyway.

Afsløring: Din støtte er med til at holde dette site kørende! Vi tjener et henvisningsgebyr for nogle af de tjenester, vi anbefaler på denne side. Få mere at vide

Forth er et usædvanligt sprog. Det er primært en fortolker og har en kommandolinjeinterface, så det kan bruges i realtid. Men det har også mulighed for at tage sæt af kode og kompilere det. Så det er noget af en hybrid.

På grund af dette bruges Forth almindeligvis på hardware, der ikke har et traditionelt styresystem. Det er også meget udbredt til at styre maskiner og er blevet brugt i rumforskning – selv på Philae, sonden, der landede på komet 67P/Churyumov-Gerasimenko.

Historie

Forth blev udviklet af Charles Moore fra 1968, mens han lavede grafikprogrammering hos Mohasco Industries. Men den første komplette Forth-implementering kom først i 1971, da Moore skabte et selvstændigt system til styring af 11-meter-teleskopet på det amerikanske National Radio Astronomy Observatory (NRAO).

Førre versioner af Forth havde vakt opmærksomhed i programmeringsmiljøet. Men på dette tidspunkt blev det meget populært i astronomisamfundet. Så i 1973 grundlagde Moore FORTH, Inc. sammen med sine NRAO-kolleger Elizabeth Rather og Edward Conklin.

Selskabet porterede programmet til mange forskellige systemer. Og FORTH, Inc er fortsat et vigtigt firma, der leverer Forth-relaterede produkter til folk i erhvervslivet, den akademiske verden og regeringen.

Overblik over Forth

Der er en række unikke aspekter ved programmeringssproget Forth. Vi vil diskutere de vigtigste her.

Forth-funktioner

Forth tilbyder mange unikke funktioner:

  • Interaktiv programmering
  • Skabelse af kompilerede udvidelser af sproget kaldet “ord”
  • Stacks og omvendt polsk notation
  • Direkte forbindelse mellem bruger og hardware.

Reverse polsk notation

Forth udfører matematiske beregninger ved hjælp af omvendt polsk notation. Dette afhænger af lagring af tal i en stak.

Tænk på beregningen: 2 + 3. I Forth ville dette blive udført ved at placere 2 på stakken, derefter placere 3 på stakken og derefter addere dem. Det ville se nogenlunde sådan her ud: 2 3 +.

Det virker lidt underligt, men det er nemmere for computeren at analysere, fordi det er den måde, som computere faktisk foretager beregninger på. Og når man først har vænnet sig til det som koder, bliver det helt naturligt.

Dertil kommer, at der ikke er behov for parenteser. Overvej følgende to eksempler. (Bemærk: Backslash-tegnet starter en kommentar.)

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

I det første eksempel skubbes 2 på stakken efterfulgt af 3. 2 er altså nummer to i stakken, og 3 er nummer et. Operatoren “+” anvendes på de to første elementer i stakken. Dette fjerner disse to elementer fra stakken og efterlader 5 (2 + 3) på toppen af stakken.

Derpå skubber vi 5 på stakken. Det sætter en 5 på stakkens første og anden position. Endelig anvender vi operatoren “*”, hvilket resulterer i, at 25 (5 * 5) placeres øverst på stakken.

I det andet eksempel placerer vi 2, 3 og 5 på stakken, så 5 er i den første position, 3 i den anden og 2 i den tredje. Derefter anvender vi operatoren “*” på de to øverste elementer i stakken (5 * 3), hvilket resulterer i, at 15 placeres øverst på stakken.

På dette tidspunkt er 15 i første position, og 2 er i anden position. Når operatoren + anvendes, efterlades 17 (15 + 2) øverst på stakken.

Eksempelprogram

Det følgende program er meget simpelt, men det demonstrerer meget af det, der foregår i sproget.

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

Den første ting, dette program gør, er at definere en funktion ved navn OUTMATH. De efterfølgende linjer er en del af funktionen op til og med den linje, der slutter med et semikolon. Den første linje udskriver teksten: “Vi vil nu beregne: (2 + 3) * 5” og efterfølger den med en vogn retur.

Den næste linje udfører den beregning, som vi diskuterede ovenfor, hvilket resulterer i, at 25 bliver placeret øverst på stakken. Den sidste linje i funktionen udsender: “Dette er lig med: ” efterfulgt af værdien på toppen af stakken (repræsenteret ved “.”) og en vogn retur.

Dernæst kører vi blot funktionen. Så når programmet kører, udsender det:

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

Learning Forth

For de fleste programmører er dette en ny måde at tænke på. Men det er overraskende, hvor naturligt det virker, når man først begynder at arbejde med det. Her er nogle tutorials og bøger, der får dig til at arbejde med sproget.

Forth Tutorials

Der findes masser af online tutorials. Fordi Forth er fremmed for ikke-Forth-programmører på samme tid, som det er en selvfølge for nuværende brugere, er der mange af tutorials, der fortier ting, som kan være forvirrende for begyndere. Disse tutorials har ikke dette problem.

  • Easy Forth: Denne korte E-bog er en glimrende introduktion. Dens eneste ulempe er, at den ikke er stor på eksempler. Så tjek nogle af eksemplerne nedenfor.
  • A Beginner’s Guide to Forth: Dette er en anden god introduktion. Den er lidt mere teknisk, men har flere eksempler.
  • And So Forth…: Dette er en meget grundig introduktion til Forth – næsten lige så god som en bog.

Forth Books

Det er ofte nemmere at lære et nyt sprog ved at få en bog, der kan føre dig trin for trin gennem processen. Der findes en masse gode bøger om Forth – især fra 1980’erne, hvor Forth for alvor tog fart. Her er en samling af de bedste og vigtigste.

  • Discover Forth: Learning and Programming the Forth Language (1982) af Thom Hogan: Dette er en god og kortfattet introduktion til Forth-sproget.
  • Starting Forth: An Introduction to the Forth Language and Operating System for Beginners and Professionals (1982) af Leo Brodie: Dette er en klassiker og en god måde at lære Forth på. Den er udgået, men brugte eksemplarer er ikke svære at finde for få penge. Den findes også gratis online. Avancerede Forth-programmører vil måske læse Brodie’s nyere, Thinking Forth.
  • Programming a Problem Oriented Language: Forth – How the Internals Work (2014) af Charles Moore: Dette er en Kindle-version af den bog, som Forths ophavsmand skrev for længe siden. Den giver stadig et skarpt indblik i sproget, men er ikke det bedste valg at starte med.
  • Forth Programmer’s Handbook (2007) af Elizabeth Rather og Edward Conklin: Dette er en mere avanceret bog om Forth af de to andre Forth-pionerer. Se også Rather’s bog, Forth Application Techniques (2006).

Other Resources

  • Forth Interest Group: Dette websted har alle mulige interessante oplysninger, herunder gamle historiske dokumenter. Desværre har det også en masse ødelagte links. Men den er stadig værd at tjekke ud.
  • Links to Forth Programs: Dette er en stor samling af rigtige eksempelprogrammer som f.eks. et regneark og en Sudoku-puslespil-løser.
  • Forth Google Group: Dette er en meget aktiv gruppe af Forth-brugere, der stiller og besvarer spørgsmål.
  • Forth Subreddit: Dette er ikke et forfærdelig aktivt forum, men der er stadig kyndige folk på det.

Forth-implementeringer

Der har været en masse implementeringer af Forth i årenes løb. Forth Interest Group har en lang Forth Compilers Page. Så hvis du tilfældigvis har en PDP-11 stående rundt omkring i din garage, kan du få en Forth-compiler til den! Men til mere moderne systemer er her de mere almindelige muligheder.

bigFORTH

I midten af 1980’erne udviklede Dietrich Weineck, Georg Rehfeld og Klaus Schleisiek volksFORTH til 16-bit maskiner som 8086 IBM PC’en og 6502 Apple-, Commodore- og Atari-maskinerne.

Eventuelt skabte de en 32-bit version til den (16-bit bus) 68000-baserede Atari ST, der er baseret på 68000. Selv om volksFORTH gjorde fremskridt, døde projektet stort set (selv om det senere blev genstartet).

Bernd Paysan var imidlertid tilstrækkelig interesseret i denne version af volksFORTH (dengang kaldet turboFORTH) til, at han gjorde den til grundlaget for bigFORTH.

Den første version blev udgivet til Atari ST i 1990. I 1995 var bigFORTH blevet porteret til 386’eren, og året efter var den tilgængelig på Windows NT, OS/2 og Linux.

Grafisk grænseflade

På dette tidspunkt begyndte Paysan at arbejde på MINOS. (Teknisk set er det “MINOS”, men det omtales normalt blot som “MINOS”.)

Det er en grafisk grænseflade til bigFORTH. Det er måske nemmest at tænke på det som “Visual bigFORTH” ligesom Visual Basic, for det er mere eller mindre, hvad det er. Det blev først skabt til X-Windows-systemet. Men det var snart også tilgængeligt til Windows.

Det ser ud til, at udviklingen af både bigFORTH og MINOS er stoppet omkring 2010. De er dog begge let tilgængelige og ganske nyttige (bigFORTH er ANSI-kompatibel). Faktisk er MINOS meget sjov at lege med.

bigFORTH Resources

Hvis du vil bruge bigFORTH eller endda udvikle til det, har du alle de værktøjer, du har brug for:

  • Kildekode: Dette er koden fra den sidste officielle udgivelse den 22. marts 2010, version 2.4.
  • Debian-pakke: en let installeret pakke til enhver Debian-baseret Linux-distribution (f.eks. Ubuntu, Mint). Den installeres i /usr/local/bin og indeholder MINOS, selv om den hedder xbigforth.
  • Windows Self-Installing Executable: det samme som Debian-pakken, men til Windows. MINOS hedder endda xbigforth.exe.
  • Dokumentation (PDF): Denne næsten 300 siders bog fungerer som en vejledning og reference, skrevet af JL Bezemer. En stor del af den handler om generisk Forth og er det, som “And So Forth…” er hentet fra.
  • Bernd Paysans hjemmeside: Denne side indeholder en masse interessante Forth-relaterede oplysninger og eksempler. Af særlig interesse er Paysans Forth-baserede markup-sprog.
  • bigFORTH Repository: den ultimative destination for alle dine bigFORTH-behov.

Gforth

Gforth er GNU-implementeringen af Forth. Den har en fornem stamtavle.

Gforth-projektet blev startet i 1992 af bigFORTH-skaberen Bernd Paysan og Anton Ertl, med væsentlige bidrag fra Jens Wilke.

Det var en kombination af bigFORTH og den meget ældre fig-FORTH (se nedenfor). Men historien om det er forvredet, da bigFORTH kom fra volksFORTH, som var baseret på fig-FORTH.

Da det er et GNU-projekt, er der blevet arbejdet meget på det, siden det startede. Det er nu fuldstændig ANSI-kompatibelt og har nået alle sine oprindelige mål. Den seneste version er 0.7.3, med det sidste indlæg (af Paysan) den 25. februar 2013.

Med hensyn til frie Forth-implementeringer er Gforth den mest anvendte. En del af det skyldes bare, at det er en del af GNU-projektet og dets tilgængelighed. Men det er også fordi den er kraftfuld og hurtig.

Gforth-ressourcer

Gforth har alle de ressourcer, du har brug for til at bruge den til det, du har brug for:

  • Kildekode: Denne side indeholder Gforth-kildekoden fra version 0.2.1 til den aktuelle, 0.7.3.
  • Debian-pakker: Der er forskellige pakker tilgængelige til Debian Linux-distributionen. Bemærk, at afhængigt af hvilken pakke du vælger, kan det være nødvendigt at installere en eller flere andre pakker først.
  • Windows Self-Installing Executable: Dette er en tidligere (0.7.0) version af Gforth, men en hurtig måde at komme i gang på.
  • Documentation (PDF): Denne bog på 250 sider gælder for version 0.7.0 af Gforth. Den er også tilgængelig i HTML-format.
  • Gforth Repository: Stort set alt relateret til Gforth kan findes her.

pbForth

pbForth synes ikke længere at blive understøttet, men det er en så interessant implementering af Forth, at det er værd at tjekke ud.

Som vi har diskuteret, har Forth altid været forbundet med styring af hardware. Så det var slet ikke overraskende, at der blev lavet en Forth-implementering til LEGO MINDSTORMS-robotternes sæt – nærmere bestemt 16-bit RCX, der udkom i 1998.

Det ser ud til aldrig at være blevet opdateret til at fungere med anden generation, NXT-serien, der udkom i 2006, og heller ikke den nuværende MV3, der udkom i 2013.

Selv om der ikke er noget officielt websted for pbForth, er det stadig muligt at lære om det og endda bruge det. Der kan dog være en stejl indlæringskurve, fordi der ikke er så mange oplysninger. Og det er klart, at du skal bruge en LEGO MINDSTORMS RCX (de er ikke så svære at finde brugt).

NXT’en bruger en helt anden (og 32-bit) processor, så pbForth ville helt sikkert ikke fungere med den. Alligevel kunne det være sjovt. Og hvis du har mod på det, kunne du muligvis portere det til anden og tredje generations kits.

pbForth Resources

Den information, der findes på det normale internet, er generelt kortfattet og linker altid til pbForth-hjemmesiden, som ikke har været i drift siden mindst 2010. Det er kun takket være Internet Archive, at meget af dette er tilgængeligt.

  • History of LEGO Robotics: Selv om den ikke handler om pbForth, giver den en hurtig oversigt over LEGO MINDSTORMS produkter.
  • Introduction to pbForth (PDF): Denne 30 siders vejledning vil få dig i gang med sproget.
  • phForth-kildekode: Bemærk, at pbForth er skrevet i assembler-sprog og Tcl, så du skal have disse værktøjer til rådighed.
  • Windows GUI: Denne fil kører, selv om det kan være mere kompliceret at få den til at gøre noget. Hvis du vil have pbForth til Linux eller Mac, skal du bruge kildekoden.
  • phForth Home Page Circa 2009: Denne side indeholder links til en hel del interessante oplysninger om pbForth, især et halvt dusin eksempelscripts.

Other Implementations

  • fig-FORTH: Dette var en af de tidligste Forth-implementationer, skabt af Forth Interest Group. Det er en 16-bit implementering. Den er tilgængelig til nogle vidunderlige gamle computere som Data General Eclipse og Alpha Micro, samt 8086- og 6502-baserede computere. Problemet er, at der ikke er nogen eksekverbare filer – kun assemblagesprogkode. Og i de fleste tilfælde kun bitmap PDF-filer af koden. Egentlig kode synes kun at være tilgængelig for 8088/8086, PDP-11 og 6800. (6800 er en 8-bit processor, så tilsyneladende var der en 8-bit version af fig-FORTH.)
  • SP-Forth: Dette er en gratis Forth-implementering til Windows og Linux.
  • 4tH: Dette er en brugervenlig Forth-implementering, der er tilgængelig til en lang række hardware (herunder Raspberry Pi), og som indeholder god dokumentation.
  • SwiftForth™: dette er Forth-compileren fra det oprindelige firma, der bragte Forth til verden. Det er et kommercielt produkt, men det er rimeligt prissat.

Summary

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.