2011-08-03 20 views
2

LLVM実装のバックエンドをARMからCまたはC++の何かに変更することが可能かどうか疑問に思っていましたか?現在Adobeは、iOSアプリケーションを作成するためのLLVMのActionscript3フロントエンド(私は現在見つけることができません - クローズドソースですか?)を使用しています。他のバックエンドのオプションがないのはなぜだろうか?もちろん、このルートには制限があり、実行時に外部swfファイルをロードすることはありませんが(ただ一つに過ぎません)、iOSアプリケーションはこの偉業を本当にうまく管理しているようです。私はAS3のLLVMフロントエンド語るこのpdfが、コードがあるか、どのように調査する場所に無いガイダンスを見つけたActionscript3 to LLVM to?

...

私はちょうどそれはAdobeが不足しているとどのように不思議に思っていることを逃したチャンスだと思いますそのような偉業を成し遂げるのはずっと大変なことでしょうか?

ご注意:、私は一度ことを

答えて

2

私はあなたが考える方法を好むダウンあえて:私はhaXeの瞬間;-)

で非常によくC++への出力[haXeのノートを更新編集]することができます知っています同じことをどのように達成するかについて本当に勉強しました。 (iOSの固有の)錬金術ツールチェーンがどのように機能するかについての詳細は、この回答を参照してください:

Adobe Air ios packager

は、基本的には正しいが、AdobeはオープンソースではないActionScriptコンパイラの内部バージョンを使用しています。しかし、危険に晒されたい場合(lol)、いつでもiphone用の古いパッケージャまたは新しいAIR 2.7 SDKをダウンロードし、ADT.jarからASCのバージョンを抽出することができます。今やSDKに含まれているLLVM dll(および古いPFI)とインターフェースする新しいLLVM関連のクラスがたくさんあることに気付くでしょう。これはフロントエンドです。これらのLLVM Javaクラスは、コンパイル時のバイトコードをインターセプトし、LLVMライブラリから渡してARMにエクスポートします。今では、独自のLLVMライブラリをコンパイルして既存のLLVMライブラリを置き換えて、LLVMでサポートされているもの(あなたはC/CPPバックエンドがあると思います)にあなたのLLVM libの出力ターゲットを設定するだけです。私が言ったように、LLVMコンパイルされたライブラリにはフロントエンドが組み込まれていないことから、フロントエンドはJavaで書かれており、基本的にAVMバイトコードをLLVM IRに変換し、 LLVM libに転送します。あなたがこれを行うことができれば、私は本当にこれに興味があるので、ここにいると私に知らせてください。私は自分でそれを追求する時間がない。

+0

私が時間を得るなら、私はそれを見ることができるかどうかを見ます。むしろ大きな仕事のようですが、多分実行可能です! – simonrichardson

+0

AOTCompilerクラスを見ても、クラスが別のターゲットを受け入れる準備ができているように見えます。引数-Xsdkを "air-arm"以外の別の項目で渡すと、adt .jar ...もっと実験します。 – simonrichardson

+0

このようにAS3は基本的にC++と同等の性能を発揮します。これは、コンパイル時にC++に完全に変換されるためです。 –

1

このフロー(AS3/SWF - >他のターゲット)は、私がさらに知りたいと思う魅力的なトピックです。基本的には、Flash Player以外でFlashベースのコンテンツを取得するにはどうすればいいですか?理想的にはStage3Dをサポートします。

JavaScript + webgl(別名、HTML5テクノロジ)が目立つターゲットの1つです。ここで

は、私の知るいくつかのリソースです:

私はEmscripten/asm.jsは、上記のあなたの議論以降に導入されたと信じています。主にC/C++をJavaScript(see slide)に移植するための、LLVM to JavaScriptコンパイラです。 emscripten経由のlist of apps portedへのJSは印象的です - ScummVMからDoomからLinuxまで! AIRコンパイラ(adt.jar)は、ある時点でLLVMを生成します。おそらく、AIRアプリケーションをLLVM/emscriptenを介してJSに移植することも可能です。

Renaun Erickson posted JavaSciprtに移植されたstarlingの例と、(残念ながら現在はdefunt)Randori Frameworkを使用しているwebglについて。しかし、git reposはまだすべて存在しており、his demoはChromeでうまく動作します(iOS 8.1、webglサポート、hmmのiPadではありません)。

上記のJangarooは、 、2)subset of AS3を実装し、3)Stage3D(GPUアクセラレーション)について言及していないようです。

OpenFLは、C/C++やHTML5/webglなど、AIRよりも多くのターゲットをサポートしているため、言及する価値がありますが、AS3からHaxeへのソース変換が必要です(関連はありますが、 )OpenFL経由のHTML5にはstarling demoがあります(とrelated thread)。

これはおそらく答えよりもウィキ/ディスカッションのほうが多いですが、私たちの情報収集が良いワークフローに変わってこの質問に答えてくれることを願っています。