C 言語で書かれたソフトウェアが Flash で動くようになるかもしれない

2008/07/06 9:35am

lucille development blog 経由。

Running C and Python Code on The Web によると、Adobe の Scott Petersen 氏が大変興味深いツールを開発中のようだ。このツールを使うと、C 言語で書かれたソフトウェアを Flash Player で実行できるようになる。また、このツールはオープンソースで公開されるとのこと。

LLVM, Tamarin

ソフトウェアを Flash Player で実行可能な形式に変換するためには、ソフトウェアのソースコードが必要になる。変換の手順は以下のとおり。

  1. C 言語で書かれたソースコードを llvm-gccLLVM のアセンブリにコンパイルする
  2. LLVM のアセンブリを ActionScript で実装した独自 VM 向けの命令群に変換する

ActionScript で実装された独自 VM は、Flash Player の Tamarin VM で実行される、というカラクリだ。

先進的な最適化を備えたバックエンドとして注目を集める LLVM プロジェクトだが、その成果物を、フロントエンドとして利用しているのが面白い(もちろん、LLVM アセンブリの段階でも、定数畳み込みデッドコード削除といった従来の最適化は施されているはずなので、フロントエンドとしてのみ利点があるわけではない)。

Quake, Nintendo

もっとも、命令単位の変換はそれほど難しいものでもないし、実用的なアプリケーションが動作するのかどうか、気になるところだ。そこで、コンパイラだけではなく、インフラも整備されている。

  1. POSIX API
  2. Flash のマルチメディア機能を操作するためのライブラリ
  3. ネイティブのバイト配列など、Tamarin VM への機能追加

結果として、さまざまな種類のソフトウェアが、実用的な速度で動作するらしい。

Mozilla で行われたデモでは、Quake や、C 言語で書かれたエミュレータでゼルダが動いていた、しかも、ゲームは操作でき BGM も再現されていた、というのでなかなかのインパクトだ(ただ、2. のライブラリを使うために、ソースコードを書き換える必要があるんじゃないの? という疑問は湧くが…)。

ゲームだけではない。デモでは同様に、Lua, Ruby, Perl, そして Python といった LL 言語の処理系が動作していた、という。改めて書くが、これらはすべて、Flash Player 上での出来事だ

Python, JavaScript, NestedVM

元記事ではこのあと、

といった話題に移っていく[1]

Adobe も LLVM を採用することを検討くらいはしているはずなので、これは LLVM 採用に向けた過渡的な実験の成果なのではないか、と個人的には思っている。

[1] なお、C 言語で書かれたソフトウェアを別言語の処理系で動かす、というテーマには NestedVM という先行事例がある。GCC の出力した MIPS コードを Java のバイトコードに変換することで、C や FORTRAN などで書かれたソフトウェアを Java VM で実行できるようにしている。