Als ob es in der heutigen Zeit nicht genug neue Technologie gibt. Nein, wenn dann schon richtig. So kam es letzte Woche, dass ich über ein Problem auf Arbeit (Syntaxprüfung einer eigenen Markup-Sprache) wieder einmal auf den Compilerbau gestoßen bin. Nicht gerade so, als wäre es sowieso gerade modern, sich mit Domain Specific Languages (DSLs) zu beschäftigen (siehe M. Fowler). Oren Eini hat es mit Boo vorgemacht. Microsoft geht dem Ganzen mit M - Codename "OSLO" - hier auch nach.
Es war einmal
... vor langer, langer Zeit - das müßte so ca. 3 Jahre her sein - hatte ich mich kurz damit befasst, einen Parser für den internationalen ICD10 im Gesundheitswesen zu bauen. Über einen schlecht funktionieren Prototypen hinweg kam ich allerdings nicht, da mir das Fachwissen damals unergründlich und zu komplex war. Boost.Spirit hieß das Werkzeug meiner Wahl, das mit den möglichen Operatorüberladungen der C++ Syntax eine interne DSL für die EBNF (Extended Backus Naur Form) geschaffen hatte. Wie ich damals lernte, eine gute Basis um einen Parser zu bauen. Spirit ist im übrigen ein LL-Parser Framework, dazu aber später vielleicht mehr.
So will ich mich nun in nächster Zeit etwas genauer mit Compilern und vor allem ihrem Bau beschäftigen und den Blog als Notizablage verwenden.
Recherche
Bevor es also mit Grundlagen und allem was dazu gehört losgeht, musste ich erst einmal Recherche betreiben. Das war Anfangs sehr unstrukturiert um überhaupt erst einmal drauf zu kommen, was ich alles brauche. Wie aber jeder weiß: wer den richtigen Startpunkt findet kommt schnell weiter. An dieser Stelle auch nochmal herzlichen Dank an die Antworten aus der ALTNETDE Mailingliste.
Ist denn heut schon Weihnachten? Nein! Aber Niklaus, Niklaus Wirth, Schweizer Informatiker und Vater der EBNF. Und so bin ich kreisend um diesen Namen über Grundlagen zu weiterführenden Themen und Tools gestoßen. Hier eine unsortierte Auflistung.
So ist das eben, wenn man nicht studiert hat. Irgendwann holt es einen dann doch ein. Umso mehr freue ich mich ausgehend von diesem Standpunkt mich weiter in die Materie einzuarbeiten. Mein Ziel ist natürlich das Erstellen und Experimentieren einer eigenen Sprache. Als Zielsprache, mit dem ich dann den Compiler (oder auch Interpreter) dann schreibe bin ich mir noch nicht ganz schlüssig. Auf der einen Seite würde ich mich gerne dem Thema C++0x (TR1) von C++ etwas widmen wollen um hier wieder up to date zu sein, auf der anderen Seite interessiert mich Python sehr, da ich damit schon früher Erfahrung gesammelt habe. Nicht zuletzt, weil es auch auf .NET sehr gut läuft und mit NET 4.0 und der DLR Einzug in den Mainstream hällt. Und wiederum stehe ich dann mit C# da mit dem ich ja die letzten 3-4 Jahre gearbeitet habe und dessen Vor- und Nachteile bereits gut kenne.
Fazit
Wie hätte das einst Susi nach vollmundiger Ankündigung durch Rudi erotisch in Micro gehaucht : "Lieber Rainer, jetzt musst du dich entscheiden: Ist es Kandidat Eins ..."
Dieser Entscheidung werde ich mich erst später stellen. Im Moment kann ich mir auch vorstellen einen Core in C++ zu bauen, der dann über die marshall Klasse auf die .NET Plattform geleitet um mich dort im Sprach-Plattform-Mekka mit C#, IronPython und Konsorten weiter auszutoben. Quasi ein Inter-Plattform-Compiler. Mal sehen, wie weit hier Vision von später tatsächlich vorhandenem oder fehlendem Enthusiasmus differiert. Wenn ich aus meiner Erfahrung lernen darf wird sich an der Spitze meiner Informationsammlung das Interesse stark einstellen, da nur noch langsam ein Fortschritt zu verzeichnen sein wird. So wird sich dann in der Rezession das vorhaben in Luft auflösen und ich werde mich neuen, interessanten Schriften und Lehren widmen. Ich hoffe dennoch für mich und meine Blogleser interessante Informationen zusammen zu stellen, auf die ich in meinem weiteren Arbeitsleben später zurückgreifen darf.