私は現在、いくつかの興味深いプログラミング言語の研究に携わっています。これまでは、非常に強力なプログラマー生産性ベースの機能を使用して、次のJava7.0コンパイラーを拡張することに重点を置いてきました。この作業は、C#などの関連するプログラミング言語にも同様に適用できる必要があります。
私は現在、機能のC#ポートをプロトタイピングするためのオプションを検討しています。この作業の成果を可能な限り幅広い聴衆と共有できるように、オープンソースのオプションを希望します。したがって、Mono C#コンパイラが最も明白な出発点のようです。私は経験豊富なC#開発者なので、コードを書くことは問題ではありません。私は主に、保守可能でサポートされている方法でコンパイラーを拡張することに関心があります。この件に関するMonoFAQ(リンク)には、「MonoはすでにC#言語の新しいアイデアを試すための基盤として使用されています(MonoのC#コンパイラから派生したコンパイラが3つまたは4つあります)」と記載されています。残念ながら、これ以上のポインタはなく、これまでのところ、Google検索は何も見つかりませんでした。
誰かがこれに関する情報を持っているかどうか疑問に思います。mcs
//標準の拡張性モデルがありますgmcs
か?dmcs
具体的には、プログラムの抽象構文木でいくつかの興味深い変換を実行します。抽象構文ツリーの生成と型チェッカー、そしてコード生成の間に機能をコンパイラチェーンに挿入するための標準的なメカニズムはありますか?
これまで、コードにアドホックな拡張機能をいくつか(主にコードジェネレーターで)作成しましたが、特に拡張機能をGitトランクで最新の状態に保つつもりであることを考えると、これは保守可能なソリューションではないようです。可能な限りモノ。さらに、変更を加えるたびにコンパイラ全体を再コンパイルしなくても、拡張機能を更新できると便利です。コアコンパイラコードを直接ハックすることなく、//によってmcs
動的にロードできる単一の.NETアセンブリにすべてのAST操作をラップできるようにしたいと思います。gmcs
dmcs
Mono C#コンパイラを拡張することについての考えやポインタはありがたいことに受け取られます!
更新(2010年10月23日)
私の質問への回答に応えて、コンパイラーの単純な拡張性モデルを作成するために、Monoのブランチで作業を開始することにしました。非常に初期の段階ですが、ここではGitHubにあります。
http://github.com/rcook/mono-extensibility
そして主なコミットは次のとおりです:http://github.com/rcook/mono-extensibility/commit/a0456c852e48f6822e6bdad7b4d12a357ade0d01
このプロジェクトでのコラボレーションに興味のある方がいらっしゃいましたら、お知らせください。