Forth
Interaktive Softwareentwicklung

Meine dedizierte Forth-Seite http://forth-enthusiast.de (englisch)

Unter dem Begriff Keine Einschränkungen ist zu verstehen, dass der Compiler und das Laufzeitsystem in keiner Weise im Weg steht. Wenn es notwendig ist direkt auf den Return oder Datenstack zuzugreifen ist das problemlos möglich. Wenn einem String ein Datum addiert werden soll ist auch das problemlos möglich. Wer Code zur Laufzeit generieren will kann das nach belieben machen. Wenn das System einem davor aber schützen soll, so muss man auch das selber bauen.

Unter dem Begriff Problem lösen ist das Kunden-Problem zu verstehen, und nur dieses. Keine IT-Probleme (die sind meist selbst gemacht). Forth ist ein extrem schlankes, interaktives Softwareentwicklungssystem ohne Einschränkungen, ausser jener die von der Hardware vorgegeben sind oder selbst nachträglich eingebaut werden, wie z.B. Typisierung.

Da Forth so schlank ist, ist es mit geringem Aufwand möglich sein eigenes Forth Entwicklungssystem zu erstellen und / oder ein Forth System vollständig an seine eigenen Bedürfnisse anzupassen.

Obwohl Forth extrem einfach ist, ist es dessen Beschreibung nicht. Das liegt daran, dass man ohne einem echten zu lösenden Problem das System nur vage beschreiben kann. Auch ist das Vokabular das benötigt wird eher untypisch für Informatiker. Zunächst ist Forth nicht nur eine Programmiersprache. Bei der Programmiersprache in Forth, falls man davon überhaupt sprechen kann, handelt es sich um eine Proto-Programmiersprache. Sie ist zwar zunächst vollständig und kann alle lösbaren Aufgaben lösen, das ist aber nicht das eigentliche Ziel. Erst durch das konkrete Problem mutiert Forth zur 'für dieses Problem' spezifischen und optimalen Programmiersprache. Im Prinzip handelt es sich um die Entwicklung einer DSL, nur dass diese DSL sowohl für den Entwickler als auch den Fachbereich eine dominante Rolle einnimmt.

Wurde ein gutes oder sogar optimales DSL entwickelt ist die Entwicklung mit diesem neu geschaffenem Werkzeug extrem einfach, robust und schnell, denn es stehen nun keine technischen Hindernisse mehr im Weg.

Forth stellt ein virtuelles Block-Speicher System für die Persistenz zur Verfügung. Es hängt vom Problem und der Infrastruktur ab wie die Verwendung konkret aussieht. Randbedingungen sind, dass die Größe eines Blockes 1k beträgt und unter anderem Quellcode enthalten kann. Die Herkunft des Blockes, wie er gemapped wird und sonstige Eigenschaften, werden erst vom Projekt vorgegeben. Für die Implementierung ist der Unterschied wesentlich ob Forth auf JavaScript läuft und Block-Kommandos letztlich zu GET und PUT Requests führen. Auch wie das Mapping zwischen Block und Hauptspeicher erfolgt ist zunächst nicht definiert.
Ein nachgeschaltetes Mapping führt die Synchronisation zwischen dem Block-orientierten System und einer etwaigen SQL Datenbank durch.

: forth  stacks words blocks  ;

Forth ist eine interaktive Proto-Entwicklungs-Umgebung und darin sowohl sein eigenes Betriebssystem als auch IDE (Interpreter, Compiler, Debugger, Editor, ...).
Von Lisp sagt man es sei eine programmierbare Programmiersprache, Forth ist ein Proto-Programmiersystem, das sich erst mit dem zu lösendem Problem, zu einer Anwendung (DSL+Tools+OS+DB) instantiiert.

Forth ist von der Implementierungssprache völlig unabhängig. Das kann Maschinencode, Assembler, C, Java, JavaScript, Lisp, ... was auch immer sein. Forth funktioniert immer und überall. Forth ist extrem schlank (eine vollständige Forth-IDE kann in 4-9k Speicher passen). Forth läuft entweder direkt auf der Hardware (z.B. Arduino) oder auf einem Host-Betriebssystem (Linux, MacOSX, Windows, Android, ...) und enthält in der Regel: Multitasking, Multiuser, Editor, Interpreter, Compiler, Debugger, Profiler, Filesystem. Da Forth einen Interpreter (REPL - Read Eval Print Loop) vorhält, kann zur Laufzeit Code editiert, kompiliert, ausprobiert, debugged, entwickelt sowie Prozesse (Tasks) gestartet und gestoppt werden.

Forth ist minimal und genau das macht es zu einem idealen Gerüst zum Problemlösen. Andere Programmiersprachen kommen mit schwergewichtigen Frameworks und Bibliotheken die hundert tausende Zeilen von Code beinhalten. Sie versuchen das universale Problem zu lösen, nur keiner hat das universale Problem. Und das zu lösende Problem ist sehr wahrscheinlich nicht enthalten.

Ich musste unlängst GDV Dateien parsen. Das sind Textdateien mit einer konstanten Satzlänge von 256 Bytes. Ich musste es doch selbst programmieren, die Java Bibliotheken konnten mir nicht helfen. Ich habe es auch in C implementiert, auch dort musste ich es selbst programmieren, der C-Code war aber deutlich geringer als der Java Code. In Forth wäre dieses Programm noch einmal deutlich kleiner als die C Lösung.

Was unterscheidet nun Forth von z.B. C++ oder Java ?

4ide Mein eigenes kleines Forth-ähnliches System.
gforth Das GNU-Forth System (64 Bit). ANSI konform, frei und portabel.
Forth Inc Hier wurde Forth erfunden. Hervorragende Forth Systeme für den Embedded und Hosted Bereich (bieten aber kein 64 Bit System an). Kostenlose Community Edition für Windows, Linux und Mac.
Forth 2012 Standard forth-2012.pdf (2.5M)