Ich bin zur Zeit an einer interessanten Programmiersprachenforschung beteiligt, die sich bis jetzt auf die Erweiterung des kommenden Java 7.0 Compilers mit einigen sehr leistungsfähigen Programmer-produktivitätsbasierten Funktionen konzentrierte. Die Arbeit sollte gleichermaßen auf verwandte Programmiersprachen wie C# anwendbar sein.Erweitern des Mono C# -Compilers: Gibt es Dokumentation oder Präzedenzfälle?
Ich bin derzeit dabei, die Optionen für das Prototyping eines C# -Ports der Funktionalität auszuloten. Ich würde Open-Source-Optionen bevorzugen, damit die Früchte dieser Arbeit mit einem möglichst breiten Publikum geteilt werden können. Daher scheint der Mono C# -Compiler der offensichtlichste Ausgangspunkt zu sein. Ich bin ein erfahrener C# -Entwickler, also ist das Schreiben des Codes nicht das Problem. Ich bin hauptsächlich besorgt darüber, den Compiler in einer wartbaren und unterstützten Weise zu erweitern. In den Mono-FAQ zum Thema (link) heißt es: "Mono wurde bereits als Grundlage für das Ausprobieren neuer Ideen für die C# -Sprache verwendet (es gibt drei oder vier Compiler, die von Monos C# -Compiler abgeleitet sind)." Leider gibt es keine weiteren Hinweise und die Google-Suche hat bis jetzt noch nichts gebracht.
Ich frage mich, ob jemand da draußen irgendwelche Informationen dazu hat. Haben mcs
/gmcs
/dmcs
ein Standard-Erweiterbarkeitsmodell? Insbesondere werde ich einige interessante Transformationen im abstrakten Syntaxbaum eines Programms durchführen. Gibt es einen Standardmechanismus zum Einfügen von Funktionen in die Compiler-Kette zwischen der Generierung von abstrakten Syntaxbäumen und dem Typ-Checker und der anschließenden Code-Generierung?
Bis jetzt habe ich einige Ad-hoc-Erweiterungen für den Code geschrieben (hauptsächlich im Code-Generator), aber das scheint keine wartbare Lösung zu sein, vor allem, wenn ich meine Erweiterungen auf dem neuesten Stand halten will der Git Stamm von Mono so viel wie möglich. Außerdem wäre es schön, Updates für meine Erweiterungen vornehmen zu können, ohne den Compiler bei jeder Änderung neu kompilieren zu müssen. Ich möchte in der Lage sein, alle meine AST-Manipulationen in eine einzelne .NET-Assembly zu verpacken, die von mcs
/ dynamisch geladen werden kann, ohne direkt den Kern-Compiler-Code hacken zu müssen.
Alle Gedanken oder Hinweise zur Erweiterung des Mono C# -Compilers würden dankbar empfangen werden!
UPDATES (23 Oktober 2010)
Als Antwort auf die Antworten auf meine Frage, habe ich beschlossen, dass ich auf einem Zweig der Mono arbeiten, um beginnen würde, eine einfache Erweiterungsmodell für den Compiler zu erstellen. Es ist in einem sehr frühen Stadium, aber hier ist es bei GitHub:
http://github.com/rcook/mono-extensibility
Und die Haupt begehen: http://github.com/rcook/mono-extensibility/commit/a0456c852e48f6822e6bdad7b4d12a357ade0d01
Wenn jemand in der Zusammenarbeit an diesem Projekt interessiert wäre, lassen Sie es mich wissen!
Schauen Sie sich alternativ auch [Boo] (http://boo.codehaus.org/) an. Compiler-Erweiterbarkeit ist Teil des "Pakets". –