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

Offenlegung: Ihre Unterstützung hilft uns, diese Seite am Laufen zu halten! Wir erhalten eine Vermittlungsgebühr für einige der Dienste, die wir auf dieser Seite empfehlen. Mehr erfahren

Forth ist eine ungewöhnliche Sprache. Sie ist in erster Linie ein Interpreter und verfügt über eine Befehlszeilenschnittstelle, so dass sie in Echtzeit verwendet werden kann. Sie ist aber auch in der Lage, Codesätze zu übernehmen und zu kompilieren. Es ist also so etwas wie ein Hybrid.

Aus diesem Grund wird Forth häufig auf Hardware verwendet, die kein traditionelles Betriebssystem hat. Es ist auch weit verbreitet, um Maschinen zu steuern, und wurde in der Weltraumforschung eingesetzt – sogar auf Philae, der Sonde, die auf dem Kometen 67P/Churyumov-Gerasimenko gelandet ist.

Geschichte

Forth wurde von Charles Moore ab 1968 entwickelt, während er bei Mohasco Industries Grafikprogrammierung betrieb. Die erste vollständige Forth-Implementierung erfolgte jedoch erst 1971, als Moore ein eigenständiges System zur Steuerung des 11-Meter-Teleskops des Nationalen Radioastronomie-Observatoriums der USA (NRAO) entwickelte.

Frühere Versionen von Forth hatten die Aufmerksamkeit der Programmiergemeinde auf sich gezogen. Aber zu diesem Zeitpunkt wurde es in der Astronomiegemeinde sehr populär. Deshalb gründete Moore 1973 zusammen mit seinen NRAO-Kollegen Elizabeth Rather und Edward Conklin FORTH, Inc.

Das Unternehmen portierte das Programm auf viele verschiedene Systeme. FORTH, Inc. ist auch heute noch ein wichtiges Unternehmen, das Forth-bezogene Produkte für Unternehmen, Hochschulen und Behörden anbietet.

Übersicht über Forth

Die Programmiersprache Forth weist eine Reihe einzigartiger Aspekte auf. Wir werden hier die wichtigsten besprechen.

Forth Eigenschaften

Forth bietet viele einzigartige Eigenschaften:

  • Interaktive Programmierung
  • Erstellung von kompilierten Erweiterungen der Sprache, genannt „Wörter“
  • Stapel und umgekehrte polnische Notation
  • Direkte Verbindung zwischen Benutzer und Hardware.

Umgekehrte polnische Notation

Forth führt mathematische Berechnungen unter Verwendung der umgekehrten polnischen Notation durch. Dies hängt von der Speicherung von Zahlen in einem Stapel ab.

Betrachten Sie die Berechnung: 2 + 3. In Forth würde dies geschehen, indem man die 2 auf den Stapel legt, dann die 3 auf den Stapel legt und sie dann addiert. Dies würde etwa so aussehen: 2 3 +.

Es sieht ein wenig seltsam aus, aber es ist einfacher für den Computer zu analysieren, weil dies die Art und Weise ist, wie Computer tatsächlich Berechnungen durchführen. Und wenn man sich als Programmierer erst einmal daran gewöhnt hat, wird es ganz natürlich.

Außerdem sind Klammern nicht erforderlich. Betrachten Sie die folgenden zwei Beispiele. (Hinweis: Das Backslash-Zeichen leitet einen Kommentar ein.)

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

Im ersten Beispiel wird 2 auf den Stapel geschoben, gefolgt von 3. 2 steht also an zweiter Stelle auf dem Stapel und 3 an erster Stelle. Der Operator „+“ wird auf die ersten beiden Elemente des Stapels angewendet. Dadurch werden diese beiden Elemente vom Stapel entfernt, und es bleibt 5 (2 + 3) oben auf dem Stapel.

Dann schieben wir 5 auf den Stapel. Das bringt eine 5 an die erste und zweite Stelle des Stapels. Schließlich wenden wir den „*“-Operator an, was dazu führt, dass 25 (5 * 5) oben auf dem Stapel liegt.

Im zweiten Beispiel legen wir 2, 3 und 5 auf den Stapel, so dass 5 an der ersten Position liegt, 3 an der zweiten und 2 an der dritten. Dann wenden wir den „*“-Operator auf die beiden obersten Elemente des Stapels an (5 * 3), was dazu führt, dass 15 oben auf dem Stapel liegt.

Zu diesem Zeitpunkt befindet sich 15 an der ersten Position und 2 an der zweiten Position. Wenn der +-Operator angewendet wird, bleibt 17 (15 + 2) oben auf dem Stapel.

Beispielprogramm

Das folgende Programm ist sehr einfach, aber es demonstriert viel von dem, was in der Sprache vor sich geht.

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

Das erste, was dieses Programm tut, ist eine Funktion namens OUTMATH zu definieren. Die darauf folgenden Zeilen sind Teil der Funktion bis zu der Zeile, die mit einem Semikolon endet. Die erste Zeile gibt den Text aus: „Wir werden jetzt berechnen: (2 + 3) * 5“ und schließt mit einem Zeilenumbruch ab.

Die nächste Zeile führt die oben beschriebene Berechnung durch, so dass 25 oben auf dem Stapel liegt. Die letzte Zeile der Funktion gibt aus: „This equals: „, gefolgt von dem Wert oben auf dem Stapel (dargestellt durch „.“) und einem Zeilenumbruch.

Dann führen wir die Funktion einfach aus. Wenn das Programm also läuft, gibt es aus:

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

Forth lernen

Für die meisten Programmierer ist das eine neue Denkweise. Aber es ist erstaunlich, wie natürlich es einem vorkommt, sobald man anfängt, damit zu arbeiten. Hier sind einige Tutorien und Bücher, die Ihnen helfen werden, mit der Sprache zu arbeiten.

Forth-Tutorien

Es gibt viele Online-Tutorien. Da Forth für Nicht-Forth-Programmierer fremd ist, während es für bisherige Benutzer selbstverständlich ist, beschönigen viele der Tutorials Dinge, die für Anfänger verwirrend sein können. Diese Tutorials haben dieses Problem nicht.

  • Easy Forth: dieses kurze Ebook ist eine ausgezeichnete Einführung. Der einzige Nachteil ist, dass es nicht viele Beispiele enthält. Schauen Sie sich also einige der Beispiele unten an.
  • A Beginner’s Guide to Forth: Dies ist eine weitere gute Einführung. Es ist etwas technischer, hat aber mehr Beispiele.
  • And So Forth…: dies ist eine sehr gründliche Einführung in Forth – fast so gut wie ein Buch.

Forth Books

Es ist oft einfacher, eine neue Sprache zu lernen, wenn man ein Buch hat, das einen Schritt für Schritt durch den Prozess führt. Es gibt eine Menge guter Bücher über Forth – vor allem aus den 1980er Jahren, als Forth so richtig durchstartete. Hier ist eine Sammlung der besten und wichtigsten Bücher.

  • Discover Forth: Learning and Programming the Forth Language (1982) von Thom Hogan: Dies ist eine gute und prägnante Einführung in die Sprache Forth.
  • Starting Forth: An Introduction to the Forth Language and Operating System for Beginners and Professionals (1982) von Leo Brodie: Dies ist ein Klassiker und ein guter Weg, um Forth zu lernen. Es ist vergriffen, aber gebrauchte Exemplare sind nicht schwer für wenig Geld zu finden. Es ist auch kostenlos online verfügbar. Fortgeschrittene Forth-Programmierer sollten sich vielleicht Brodies neueres Buch Thinking Forth ansehen.
  • Programming a Problem Oriented Language: Forth – How the Internals Work (2014) von Charles Moore: Dies ist eine Kindle-Version des Buches, das der Schöpfer von Forth vor langer Zeit geschrieben hat. Es bietet immer noch einen guten Einblick in die Sprache, ist aber nicht die beste Wahl für den Anfang.
  • Forth Programmer’s Handbook (2007) von Elizabeth Rather und Edward Conklin: Dies ist ein fortgeschritteneres Buch über Forth von den beiden anderen Forth-Pionieren. Siehe auch Rather’s Buch, Forth Application Techniques (2006).

Sonstige Ressourcen

  • Forth Interest Group: diese Seite hat alle Arten von interessanten Informationen einschließlich alter historischer Dokumente. Leider hat sie auch eine Menge kaputter Links. Aber es lohnt sich trotzdem, einen Blick darauf zu werfen.
  • Links zu Forth-Programmen: dies ist eine großartige Sammlung von echten Beispielprogrammen wie einer Tabellenkalkulation und einem Sudoku-Rätsellöser.
  • Forth Google Group: dies ist eine sehr aktive Gruppe von Forth-Nutzern, die Fragen stellen und beantworten.
  • Forth Subreddit: dies ist kein besonders aktives Forum, aber es gibt immer noch sachkundige Leute.

Forth-Implementierungen

Es gab im Laufe der Jahre eine Menge Implementierungen von Forth. Die Forth Interest Group hat eine lange Forth Compilers Page. Wenn Sie also zufällig eine PDP-11 in Ihrer Garage herumstehen haben, können Sie einen Forth-Compiler dafür bekommen! Aber für modernere Systeme sind hier die gängigeren Optionen.

bigFORTH

Mitte der 1980er Jahre entwickelten Dietrich Weineck, Georg Rehfeld und Klaus Schleisiek volksFORTH für 16-Bit-Maschinen wie den 8086er IBM PC und die 6502er Apple-, Commodore- und Atari-Maschinen.

Schließlich erstellten sie eine 32-Bit-Version für den (16-Bit-Bus) 68000-basierten Atari ST. Obwohl volksFORTH Fortschritte machte, wurde das Projekt so gut wie eingestellt (obwohl es später wieder aufgenommen wurde).

Bernd Paysan war jedoch an dieser Version von volksFORTH (damals turboFORTH genannt) so interessiert, dass er sie zur Grundlage von bigFORTH machte.

Die erste Version wurde 1990 für den Atari ST veröffentlicht. Bis 1995 wurde bigFORTH auf den 386er portiert, und im folgenden Jahr war es auf Windows NT, OS/2 und Linux verfügbar.

Grafische Schnittstelle

Zu diesem Zeitpunkt begann Paysan mit der Arbeit an MINOS. (Technisch gesehen ist es „MINOS“, aber normalerweise wird es einfach als „MINOS“ bezeichnet.)

Es ist eine grafische Schnittstelle für bigFORTH. Es ist vielleicht am einfachsten, es als „Visual bigFORTH“ wie Visual Basic zu betrachten, denn das ist es mehr oder weniger auch. Es wurde zunächst für das X-Windows-System entwickelt. Aber bald war es auch für Windows verfügbar.

Die Entwicklung von bigFORTH und MINOS scheint um 2010 herum eingestellt worden zu sein. Sie sind jedoch beide leicht verfügbar und recht nützlich (bigFORTH ist ANSI-konform). Tatsächlich macht es viel Spaß, mit MINOS zu spielen.

bigFORTH-Ressourcen

Wenn Sie bigFORTH benutzen oder sogar dafür entwickeln wollen, haben Sie alle Werkzeuge, die Sie brauchen:

  • Quellcode: dies ist der Code der letzten offiziellen Veröffentlichung vom 22. März 2010, Version 2.4.
  • Debian-Paket: ein einfach zu installierendes Paket für jede Debian-basierte Linux-Distribution (z.B. Ubuntu, Mint). Es wird in /usr/local/bin installiert und enthält MINOS, obwohl es xbigforth heißt.
  • Windows Self-Installing Executable: das gleiche wie das Debian-Paket, aber für Windows. MINOS heißt sogar xbigforth.exe.
  • Dokumentation (PDF): Dieses fast 300-seitige Buch dient als Tutorial und Referenz, geschrieben von JL Bezemer. Vieles davon handelt von generischem Forth und ist das, was „And So Forth…“ entnommen ist.
  • Bernd Paysan’s Homepage: diese Seite hat eine Menge interessanter Forth-bezogener Informationen und Beispiele. Besonders erwähnenswert ist Paysans Forth-basierte Auszeichnungssprache.
  • bigFORTH Repository: das ultimative Ziel für alle Ihre bigFORTH-Bedürfnisse.

Gforth

Gforth ist die GNU-Implementierung von Forth. Es hat einen bedeutenden Stammbaum.

Das Gforth-Projekt wurde 1992 von den bigFORTH-Erfindern Bernd Paysan und Anton Ertl gestartet, mit wesentlichen Beiträgen von Jens Wilke.

Es war eine Kombination aus bigFORTH und dem viel älteren fig-FORTH (siehe unten). Aber die Geschichte ist verdreht, da bigFORTH aus volksFORTH hervorging, das auf fig-FORTH basierte.

Da es ein GNU-Projekt ist, wurde seit dem Start viel daran gearbeitet. Es ist jetzt vollständig ANSI-konform und hat alle seine ursprünglichen Ziele erreicht. Die aktuellste Version ist 0.7.3, der letzte Eintrag (von Paysan) stammt vom 25. Februar 2013.

Unter den freien Forth-Implementierungen ist Gforth die am häufigsten verwendete. Das liegt zum Teil einfach daran, dass es Teil des GNU-Projekts ist und verfügbar ist. Aber es liegt auch daran, dass es mächtig und schnell ist.

Gforth Ressourcen

Gforth hat alle Ressourcen, die Sie brauchen, um es zu benutzen, was auch immer Sie brauchen:

  • Quellcode: diese Seite bietet den Gforth Quellcode von Version 0.2.1 bis zur aktuellen, 0.7.3.
  • Debian Pakete: es gibt verschiedene Pakete für die Debian Linux Distribution. Beachten Sie, dass Sie je nach gewähltem Paket möglicherweise zuerst ein oder mehrere andere Pakete installieren müssen.
  • Windows Self-Installing Executable: dies ist eine frühere (0.7.0) Version von Gforth, aber ein schneller Weg, um loszulegen.
  • Dokumentation (PDF): dieses 250-seitige Buch gilt für Version 0.7.0 von Gforth. Es ist auch im HTML-Format verfügbar.
  • Gforth Repository: so ziemlich alles, was mit Gforth zu tun hat, kann hier gefunden werden.

pbForth

pbForth scheint nicht mehr unterstützt zu werden, aber es ist eine so interessante Implementierung von Forth, dass es sich lohnt, einen Blick darauf zu werfen.

Wie wir besprochen haben, wurde Forth schon immer mit Hardware-Steuerung in Verbindung gebracht. Daher war es nicht überraschend, dass eine Forth-Implementierung für den LEGO MINDSTORMS-Roboterbausatz entwickelt wurde – genauer gesagt für den 16-Bit-RCX, der 1998 auf den Markt kam.

Es scheint, dass sie nie aktualisiert wurde, um mit der zweiten Generation der NXT-Serie zu funktionieren, die 2006 auf den Markt kam, und auch nicht mit dem aktuellen MV3, der 2013 auf den Markt kam.

Obwohl es keine offizielle Website für pbForth gibt, ist es dennoch möglich, etwas darüber zu erfahren und es sogar zu benutzen. Allerdings könnte es eine steile Lernkurve geben, weil es nicht so viele Informationen gibt. Und natürlich braucht man einen LEGO MINDSTORMS RCX (gebraucht sind sie nicht schwer zu finden).

Der NXT verwendet einen völlig anderen (und 32-Bit) Prozessor, so dass pbForth damit sicher nicht funktionieren würde. Trotzdem könnte es Spaß machen. Und wenn Sie Lust haben, könnten Sie es auch auf Bausätze der zweiten und dritten Generation portieren.

pbForth Ressourcen

Was an Informationen im normalen Internet verfügbar ist, ist im Allgemeinen knapp und verweist immer auf die pbForth-Homepage, die seit mindestens 2010 nicht mehr in Betrieb ist. Nur dank des Internet Archive ist vieles davon verfügbar.

  • History of LEGO Robotics: obwohl es nicht um pbForth geht, bietet es einen schnellen Überblick über LEGO MINDSTORMS Produkte.
  • Introduction to pbForth (PDF): dieses 30-seitige Tutorial bietet einen Einstieg in die Sprache.
  • phForth Source Code: Beachten Sie, dass pbForth in Assembler und Tcl geschrieben ist, so dass Sie diese Werkzeuge zur Verfügung haben müssen.
  • Windows GUI: Diese Datei läuft, obwohl es etwas komplizierter sein kann, sie zum Laufen zu bringen. Wenn Sie pbForth für Linux oder Mac wollen, müssen Sie den Quellcode verwenden.
  • phForth Home Page Circa 2009: diese Seite bietet Links zu einer Menge interessanter Informationen über pbForth, vor allem ein halbes Dutzend Beispielskripte.

Andere Implementierungen

  • fig-FORTH: dies war eine der frühesten Forth-Implementierungen, erstellt von der Forth Interest Group. Es handelt sich um eine 16-Bit-Implementierung. Sie ist für einige wunderbare alte Computer wie den Data General Eclipse und den Alpha Micro, sowie für 8086- und 6502-basierte Computer verfügbar. Das Problem ist, dass es keine ausführbaren Dateien gibt – nur Assemblercode. Und in den meisten Fällen auch nur Bitmap-PDF-Dateien des Codes. Aktueller Code scheint nur für 8088/8086, PDP-11 und 6800 verfügbar zu sein. (Der 6800 ist ein 8-Bit-Prozessor, also gab es anscheinend eine 8-Bit-Version von fig-FORTH.)
  • SP-Forth: dies ist eine freie Forth-Implementierung für Windows und Linux.
  • 4tH: dies ist eine einfach zu verwendende Forth-Implementierung, die für eine große Bandbreite an Hardware (einschließlich des Raspberry Pi) verfügbar ist und eine gute Dokumentation enthält.
  • SwiftForth™: Dies ist der Forth-Compiler der ursprünglichen Firma, die Forth in die Welt gebracht hat. Es ist ein kommerzielles Produkt, aber es ist preisgünstig.

Zusammenfassung

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.