|
|
|
Cornu: Forth
Vorab erwähnen wir hier der Vollständigkeit halber, daß der größte Teil des von uns entwickelten Programmcodes mittels automatischer Tools (AutoSAR, ASCET, etc.) generiert wurde, direkt gefolgt von C und C++.
Wir verwenden und schätzen C und C++, aber eben auch exotische Programmiersprachen wie Ruby und Forth.
Wir halten Forth für so besonders und so interessant, daß wir an dieser Stelle über Forth berichten.
Forth ist eine so gering verbreitete Programmiersprache, daß hier erst ein paar einführende Worte notwendig sind:
Forth entstand etwa zeitgleich mit C
Die Sprache enthält Interpreter und Compiler
Die Sprache basiert nicht auf einem rekursiven Parser, sondern benutzt UPN
In den typischen Distributionen stehen Interpreter und Compiler zur Laufzeit eines Programmes zur Verfügung und können z.B. zur Realisierung anwendungsspezifischer Sprachen genutzt werden
Es gibt keine Stackframes. Stattdessen liegen Returnadressen, Exceptions und Schleifenindizes auf dem sogenannten Returnstack. Funktionsargumente und Rückgabewerte liegen auf dem Datenstack.
Lokale Variable sind möglich, werden aber meist nicht verwendet
Es gibt keine Datentypen im Sinne von C – und erst recht keine Typprüfungen
Die Sprache ist prinzipiell für Multitasking ausgelegt, viele Distributionen haben zumindest einen Round-Robin-Multitasker
Forth ist eine der wenigen Programmiersprachen, die von einer Einzelperson implementiert werden können, deshalb gibt es sehr viele Forth-Implementierungen.
Forth kann relativ leicht um moderne Konzepte wie OO erweitert werden, deshalb gibt es eine große Vielfalt an OO-Paketen für Forth, viele allerdings ohne Klassenbibliothek.
Viele seriöse Entwickler halten Forth für eine unseriöse Programmiersprache, mit der die Entwicklung „richtiger“ Programme undenkbar sei, weil es z.B. keine Typprüfungen gibt o.ä.
Wenn man aber Forth nicht als den Hammer betrachtet, der alle Probleme zu Nägeln macht, dann erkennt man den Nutzen der speziellen Fähigkeiten von Forth:
Weil Interpreter und Compiler jederzeit zur Verfügung stehen,
ist Metaprogrammierung möglich
steht ein hochklassiger, intelligenter Präprozessor zur Verfügung, nämlich Forth selbst
sind DSLs (anwendungsspezifishe Sprachen) sehr einfach umsetzbar
können Funktionen während der Entwicklung separat getestet werden, ohne daß eine „main()“-Funktion notwendig ist.
Weil es kein Stackframing gibt, ist der Overhead für Funktionsaufrufe gering und es lohnt sich, Programme in kurze, gut testbare Funktionen zur zerlegen
Weil der Parser nicht rekursiv ist, kann er sehr schnell sein, was für große Eingabedateien wie z.B. CAN-Traces wichtig sein kann.
Jetzt werden seriöse Entwickler üblicherweise fragen, was man denn nun eigentlich mit Forth programmieren kann. Hier folgen einige Dinge, die der Autor dieser Webseite programmiert und produktiv für Kunden eingesetzt hat.
Objektorientierte Erweiterung zu Forth. Diese Erweiterung erlaubt es, Objekte im Speicher auch verteilt zu platzieren, z.B. Zähler im RAM und Konstanten im EEPROM.
Testmethode für Modultests von Softwarekomponenten, die in C programmiert sind. Dabei werden diese Komponenten z.B. in Microsoft Visual Studio als DLL übersetzt. Anschließend wird diese DLL in ein geeignetes Forth geladen, so daß die zu testenden C-Funktionen als Forth-Worte beretistehen. Der Tester verwendet dann die Forth-Kommandozeile als interaktive Shell, über die er diese C-Funktionen aufrufen und mit Parametern versehen kann. Die Methode ist gleichzeitig spielerisch und hochproduktiv. Ein besonders wertvolles Merkmal ist die herausragend gute Debugmöglichkeit auf C-Ebene. Ein weiteres ist die mögliche Persistenz von Daten über Tests hinweg.
Webmotor ist eine Software, die eine interne DSL (domain specific language) interpretiert, um den Navigationsbaum einer Webseite mit vorhandenen Dokumenten so zu verbinden, daß eine in sich vollständige Navigation ohne Javascript oder serverseitige Skripte entsteht. Die so erzeugten Seiten reagieren extrem schnell und haben sehr geringen Anforderungen an Bandbreite und Serverleistung.
Diese Software erzeugt ein GANTT-Chart aus einem mittels interner DSL dargestellten Projektplanung. Im Gegensatz zu anderen einfachen Projekt-Tools ist hier die Datenhaltung von der Applikation getrennt, ein Fehler der Applikation beschädigt die abgelegten Daten nicht. Die Daten liegen in lesbarem Klartext vor und können gut versioniert werden.
Ein kleines Tool zur Erzeugung eines speziellen Sweeps zwecks Messung von Lautsprcherfrequenzgängen im Raum und FFT-Analyse dieses Sweeps. Der Sweep kann einmalig auf CD gebrannt werden und ersetzt so den Signalgenerator. Aufgrund der FFT ist ein synchroner Start von Wiedergabe und Auswertung nicht erforderlich.
Wir haben einen Analysator für CAN-Traces im ASC-Format entwickelt, dessen DSL aus den Namen der CAN-Signale besteht. Aufgrund des einfachen und effizienten Parsers von Forth kann dieser Analysator sehr große Traces in sehr kurzer Zeit nach Ereignissen durchsuchen und auf Merkmale prüfen.