長所/短所:
CLR:
- プロ:CLR環境はすぐに利用できます。バインドするものがたくさん
- con:CLRにバインド(;-); 一部のシステムをターゲットにすることは困難または不可能です(組み込み、メインフレームなど。非MSシステムではCLR実装の成熟度が低い可能性があります)
LLVM:
- プロ:MSから独立しています。
- 短所:一部のシステムをターゲットにするには、LLVM(?)の移植が必要になる場合があります。DOT-net、Javaなどへのインターフェースは面倒かもしれません(おそらくFFIが必要です)
ターゲット言語としてのC:
- プロ:ほぼすべてのターゲットが可能です。簡単なコード生成
- con:ランタイムライブラリとしていくつかのVMのものを実装する必要があります(GC、dynload、dynコンパイルなど)。Cでは難しいことがいくつかあります(継続、バックトラッキング、スタックトレース、例外)。Cで効率的かつ移植可能にするのが難しいものもあります(GC、動的タイプ、スタックレイアウト依存性)。
ターゲットとしてのJavaByteCode:
- プロ:おそらく最大のターゲットプラットフォームのセット(携帯電話や組み込みのものでさえ)。周りの多くの既存のツール。既存のライブラリとの簡単なインターフェース
- 短所:実装が難しい、または効率的に実装するのが難しいもの(動的タイプ、継続、バックトラック)
上記のすべてから、JavaByteCodeをターゲットにするのがおそらくあなたにとって最善だと思います。
編集:実際にはコメントへの回答ですが、300文字では十分ではありません。
JByteCode iffy-同意します(Smalltalkerであるため、JBytecodeは私には制限が多すぎます)。
VMに関しては、純粋な低速バイトコードインタープリターからハイエンドの洗練されたJITting VM(IBM)まで、JVMとして得られるパフォーマンスの範囲は比較的広いと思います。MSが遅かれ早かれすべてのイノベーションを盗んで統合し、動的変換を高速化する手法が公開されているため、CLR VMが追いつくと思います(たとえば、セルフペーパーを読んでください)。LLVMの進行はおそらく少し遅くなりますが、誰が知っていますか。Cを使用すると、より優れたコンパイラを無料で利用できますが、動的再翻訳などをCをターゲットとして実装するのは困難です。私自身のシステムでは、プリコンパイルされたコードと動的にコンパイルされたコードを組み合わせて使用しています(1つのメモリスペースに低速のバイトコードインタープリター、JITter、およびプリコンパイルされた静的Cコードがすべて含まれています)。