コンパイル言語を作りたい。現在、バックエンドを評価しています。これまでのところ、実行速度、コンパイル速度、および TCC と呼ばれる小さくて使いやすいコンパイラーを理由に C を検討しています。
ここでの中間言語としての使用についての議論を読んで、ガベージ コレクションと互換性を持たせ、例外を処理する方法を考えようとしています。これまでのところ、両方を解決できると思いますが、オーバーヘッドが大きくなります。
他の可能なバックエンドについての私の考えのいくつかを次に示します。
- アセンブリ: 移植性がなく、プログラムを作成するのが非常に面倒です。
- .NET: 本当に遅く感じます。起動に 5 秒、Ironpython と Boo で 1+2 を評価するのに 5 秒。大きなライブラリがないと実行できません。
- JVM: 少し遅く感じます。バイナリ ライブラリにはアクセスできません。大きなライブラリがないと実行できません。
- LLVM: Windows はサポートされていません。コンパイルされた実行可能ファイルのサイズは 16 mb 以上だと聞きました
- C--: 未発達に見えます。
- C++: おそらく。バンドルできる素敵な小さな無料のものを見つけることができません。
私の考えを変えたり、このリストに追加したい人はいますか?
編集
私は最近LLVMを試しています。プリコンパイルされたバイナリがあり、ネイティブ アセンブリにコンパイルできることがわかりました。
http://www.antlr.org/wiki/display/CS652/Generating+machine+executable+binaries+with+LLVM
手順は次のとおりです。
- LLVM アセンブリで llvm-as を実行すると、LLVM バイトコード ファイルが生成されます。
- LLVM バイトコード ファイルに対して llc を実行して、アセンブリ ファイルを生成します。
- アセンブリ ファイルに対してアセンブラを実行して、オブジェクト ファイルを生成します。(または、外部にインストールされた c コンパイラに依存していると思われる llvm-ld を実行します)
- gcc などで実行可能ファイルにコンパイルします。