5

カスタムVMのさまざまな可能性を評価していますが、別の質問からLLVMを除外しました。私はまだ組み込み言語VMの評価に取り組んでいるので、今のところこれを自分でテスト/チェックすることはできません。LLVM/CLANGに関する次の情報を知りたいです。

  • Windowsでうまくサポートされていますか?またはSolaris?(クロスプラットフォームは私にとってプラスです)
  • Cのような言語で独自の/カスタムVMを作成したい場合、プロジェクトに何を含める必要がありますか?(LLVM / CLANGセクションまたはコンポーネントなど)
  • 明らかな理由(インタープリターを作成しない)のために、コンパイラーをVMから分離しておきます。必要なコンポーネントのサイズはどのくらいですか?それらに動的にリンクする代わりに、プログラム内でそれらを構築できますか?
  • JITを回避できますか?必ずしもネイティブコードに変換されないバイトコードVMが欲しいのですが。これは、プラットフォームでJITがサポートされていない場合に役立ちます(たとえば、wx / rwxメモリマッピングを許可しない制限付きメモリ権限を持つシステム)。

たとえば、clamavアンチウイルスは、LLVM / clangに裏打ちされたバイトコードを使用して、動的/ランタイム署名をサポートしていることを知っています。ただし、これを実装するための既存の機能や、そのようなものを実装するプロセスをガイドするチュートリアルまたはドキュメントがあるかどうかはわかりません。

ありがとう!:)

4

1 に答える 1

5

Clangは、C++を含むCのような言語のパーサーです。言語がCに十分似ている場合(つまり、Javaがそうでない場合)、LLVMIRの生成方法を知っているclangに言語のサポートを追加できます。

LLVMはJITを必要とせず、通常は静的にリンクされています。LLVMは、LLVMIRの最適化とコード生成を実行するライブラリを提供します。JITとは、ディスクではなくメモリにコードを生成することです。Clang + LLVMの通常の使用法は、GCCのドロップイン置換として、.oファイルへのコードを生成することです。

どれくらいの大きさになるかは、必要なものによって異なります。すべての最適化が必要ですか?すべてのターゲットが必要ですか(GCCとは異なり、LLVMは1つのバイナリに必要な数のバックエンドを使用して構築できます)。組み込みについて言及したので、1つの例は携帯電話でLLVMを使用するAndroidです:http://android-developers.blogspot.com/2011/02/introducing-renderscript.html

Windowsはかなりよくサポートされており、CMakeビルドシステムまたはmingw32を使用してMSVC++でLLVMをビルドできます。Solarisのサポートはより便利で、定期的にパッチを入手して修正していましたが、しばらくは何も見ていません。

最後に、http://llvm.org/docs/tutorialでチュートリアルを読むことをお勧めします。これは、JITted REPL言語の構築を記録しますが、静的にコンパイルされた言語の基本は同じです。llvm :: JITオブジェクトを使用する代わりに、Target.addPassesToEmitFileを呼び出して、書き込み先の出力ストリームを渡します。完全に機能する例については、llvm / tools / llc / llc.cppを参照してください(長いです。llcが行うすべてのオプションをサポートしたくない場合は、そのほんの一部しか必要ありません)。

于 2011-05-13T07:55:32.453 に答える