Obecnie jestem zaangażowany w interesujące badania języka programowania, które do tej pory koncentrowały się na rozszerzaniu nadchodzącego kompilatora Java 7.0 z kilkoma bardzo potężnymi funkcjami opartymi na programatorze. Praca powinna mieć również zastosowanie do powiązanych języków programowania, takich jak C#.Rozszerzanie kompilatora Mono C#: czy istnieje jakakolwiek dokumentacja lub precedens?
Obecnie wybieram opcje prototypowania portu C# funkcjonalności. Wolałbym opcje open-source, aby owoce tej pracy mogły być udostępniane jak najszerszej publiczności. Tak więc kompilator Mono C# wydaje się najbardziej oczywistym punktem wyjścia. Jestem doświadczonym programistą C#, więc pisanie kodu nie jest problemem. Głównie martwię się o rozszerzenie kompilatora w sposób obsługiwany i obsługiwany. W Mono FAQ na ten temat (link) stwierdza się, że "Mono został już użyty jako podstawa do wypróbowania nowych pomysłów na język C# (istnieją trzy lub cztery kompilatory pochodzące z kompilatora C# Mono)". Niestety, nie ma żadnych dodatkowych wskazówek, a jak dotąd wyszukiwarki Google niczego nie zmieniły.
Zastanawiam się, czy ktoś tam ma jakieś informacje na ten temat. Czy model mcs
/gmcs
/dmcs
ma standardowy model rozszerzalności? Dokładniej, przeprowadzę interesujące transformacje na abstrakcyjnym drzewie składni programu. Czy istnieje standardowy mechanizm wstawiania funkcjonalności do łańcucha kompilatora między generowaniem abstrakcyjnego drzewa składni a sprawdzaniem typu, a następnie generowaniem kodu?
Do tej pory napisałem kilka rozszerzeń ad-hoc do kodu (głównie w generatorze kodu), ale to nie wydaje się być rozwiązaniem możliwym do utrzymania, zwłaszcza, że zamierzam aktualizować moje rozszerzenia o bagażnik Git Mono jak najwięcej. Ponadto byłoby miło móc aktualizować moje rozszerzenia bez konieczności ponownej kompilacji całego kompilatora za każdym razem, gdy dokonuję zmiany. Chciałbym móc zawrzeć wszystkie moje manipulacje AST w jednym zestawie .NET, który mógłby być dynamicznie ładowany przez mcs
/gmcs
/dmcs
bez konieczności włamywania się bezpośrednio do głównego kodu kompilatora.
Wszelkie myśli i wskazówki dotyczące rozszerzania kompilatora Mono C# zostałyby przyjęte z wdzięcznością!
aktualizacji (23 października 2010)
W odpowiedzi na odpowiedzi na moje pytanie, postanowiłem, że chciałbym zacząć pracę na oddziale Mono w celu stworzenia prostego modelu rozciągliwości dla kompilatora. To w jej bardzo wczesnym stadium, ale tutaj jest na GitHub:
http://github.com/rcook/mono-extensibility
A głównym popełnić to: http://github.com/rcook/mono-extensibility/commit/a0456c852e48f6822e6bdad7b4d12a357ade0d01
Jeśli ktoś byłby zainteresowany współpracą przy tym projekcie, proszę dać mi znać!
Alternatywnie, spójrz na [Boo] (http://boo.codehaus.org/). Rozszerzalność kompilatora jest częścią "pakietu". –