web-dev-qa-db-ja.com

LLVMバイトコードをJavaバイトコードに変換できますか?

Google app engineはJava経由でバイトコードに変換できるすべてのプログラミング言語を実行できると聞いています。JVM。LLVMバイトコードを=に変換できるかどうか疑問に思いましたJava LLVMがGoogle App Engine JVMでサポートする言語を実行するのは興味深いので、バイトコード。

40
Ben Page

LLJVMインタープリター を使用して、LLVM IRバイトコードをJavaバイトコードに変換できるようになりました。

興味深い Disqusコメント (21/03/11)のGrzegorzから kraytracing.com があり、コードとともに、LLJVMのJava非モノリシックを出力するクラス出力ルーチンJava入力C/C++モジュールと数が一致するクラス。彼の手法は、過度に長い「複合」を回避するように思われることを示唆しています。 Java通常はLLJVMによって生成されるコンストラクターメソッドの引数シグネチャであり、彼は彼の変更と例へのリンクを提供しています。

LLJVMは数年前から活発に開発されているようには見えませんが、それでもGithubでホストされており、一部のドキュメントはGoogleCodeの以前のリポジトリにあります。

LLJVM @ Github
LLJVMドキュメント@ GoogleCode

また、LLVMを使用して出力する ' Proteuscc 'プロジェクトにも遭遇しましたJava Byte code(これは特にC/C++向けであることを示唆していますが、プロジェクトはLLVM中間表現(IR)を変更またはフィードできます。From http://proteuscc.sourceforge.net

次に、ProteusでJava実行可能ファイルを生成する一般的なプロセスを以下のように要約できます。

  1. 人間が読めるLLVM中間表現の表現(llファイル)を生成する
  2. このllファイルを引数としてプロテウスコンパイルシステムに渡します
  3. 上記は、ライブラリとして実行または使用できるJava jarファイルを生成します

buntuでLLVMとClangの最新バージョンをコンパイルするbashスクリプト を拡張しました Github Gist、here として見つけることができます。

[UPDATE 31/03/14]- [〜#〜] lljvm [〜#〜] はされているようですしばらく死んだが、ハワード・チュー( https://github.com/hyc )は [〜#〜] lljvm [〜#〜] と互換性があるように見えるLLVMの最新バージョン(3.3)。参照 GithubにあるハワードのLLJVM-LLVM3.3ブランチ、こちら

29
Big Rich

少なくとも、かなりの労力と実行時の抽象化(たとえば、特定のオペコードを実行するためのフォンノイマンマシンの半分を構築する)がなければ、できるとは思えません。 LLVMビットコードを使用すると、直接の生のコンストラクター不要のメモリ割り当てから完全にチェックされていないキャスト(変換ではなく実際のキャスト)まで、低レベルの安全ではない「やりたいことを実行できますが、混乱を解消する」機能をすべて利用できます。必要に応じて、i32bitcast%stuff *に変換できます。また、JVMはオブジェクトとメソッドに重点を置いていますが、LLVMの人たちは幸運にも、関数ポインターと構造体を持っています。

一方、 CはJavaバイトコード にコンパイルでき、 LLVMビットコードはJavascriptにコンパイルできる (多くの機能がありますが) 、たとえば、動的ロードやstdlib関数が不足している)ので、十分な努力を払えば可能になるはずです。

7
user395760

議論の終盤:Sulongは、JVM上でLLVM IRを実行します。 LLVM IRをJavaバイトコードに変換する代わりに、LLVM IRから実行可能ノード(Javaオブジェクト)を作成します。これらの実行可能ノードは、ASTインタープリターを形成します。 https://github.com/graalvm/sulong でプロジェクトをチェックアウトするか、 http://dl.acm.org/citation.cfm? id = 2998416 。免責事項:私はこのプロジェクトに取り組んでいます。

5
box

これを読んでください: http://vmkit.llvm.org/ 。それがあなたに役立つかどうかはわかりませんが、関連があるようです。

注:このプロジェクトはこれ以上メンテナンスされていません。

0
AlexR