Fusion3 と HTML5 と Emscripten


久しぶりに Clickteam Fusion3 developer blog を読んでみました。


最新記事 Fusion 3’s Backbone(Posted on: February 14, 2017) に C++ と HTML5 についての記述を発見。

Fusion3 と HTML5 と Emscripten

参考(Wikipedia):Emscripten

Emscripten_logo

Emscripten は source-to-source compiler とか transcompiler(transpiler)と呼ばれる、つまりコンパイラの一種ですが、クロスコンパイラとは違います。

クロスコンパイラはマルチプラットフォーム対応など、異なった OS 間で動作する別々の専用バイナリを作成するためのもの。

トランスコンパイラ(Transcomplier) はテキストで書かれた特定言語のソースコードを使って別言語のソースコードへ変換するためのものです。人間の言語で言うと日本語で書かれたテキストをヒエログリフへ変換してくれるみたいな?、つまり従来は高級言語から低級言語へ変換という流れとか需要に応えていたものらしい。

Fusion3(C++) と JavaScript の関係性

Fusion3 自体は基本コンセプトとして C++ アプリケーションのビルドとソースコード出力が中核、例えば競合する他社 Scirra / Construct2・C3 のようにブラウザ動作するアプリケーション開発とは無縁のように思えます。

しかし上述されたトランスコンパイラ「 Emscripten 」が C++ ソースコードを JavaScript へ変換……ではなくて、厳密に言うと Emscripten は LLVM によって生成された LLVM-IR(中間言語) から JavaScript のソースコードを生成できます。

LLVM については将来の F3 ユーザ的には「そんなもんがあるんやな」程度の認識でよいけれど、Emscripten は LLVM-IR を介さず直接 C++ ソースを変換できる機能は無いから、念の為 LLVM にも言及してあります。

C++(テキストのソースコード) → LLVM → LLVM-IR (中間言語の生成) → Emscripten(トランスコンパイル) → JavaScript ソースコード生成

手順がな、めんどくさいんや。しかし現代の技術は中間言語を挟むけれど C++ ソースコードから JavaScript というスクリプト言語のソースコードへ変換という、高級言語から高級言語へのトランスコンパイルも可能にしているってわけです。

ゲームエンジンへの移植とか実績

F3 に導入されたとして実際にそれが使い物になるかどうかはもちろんいまのところ不明だけど、Emscripten 自体はすでに数多くの採用実績が他であります。

UnityUnreal EngineGodot といった知名度の高い 3D のゲームエンジン、2D だと Cocos2D-X 、 Oxygine 2D C++ Game Framework 、Box2D Physics(Box2D をベースとした LiquidFun、LiquidFun は GameMaker:Studio でも利用されている) 、そして RPG Maker (日本だと RPG ツクールシリーズの 2000 と 2003)のゲームを HTML5 へ変換してくれる easyRPG Player HTML5 port 、その他アプリケーションフレームワークには Qt も含まれる。

このように商業/フリーを問わず LLVM + Emscripten はさまざまな開発環境で利用されています。

F3 が C++ ソースコードに拘る、そのメリットは?

C/C++ で作られ専用バイナリへとビルドされたアプリのメリットは、ハードウェアの性能を効率・効果的に利用できるネイティブ動作にあります。

対する JavaScript はスクリプト言語であり、さまざまな環境で動くけれどメモリ管理などが弱く、ハードウェア性能をフル活用するネイティブ動作アプリより HTML5 アプリの動作は総じて重くなります。

JavaScript の普及と進化は目を見張るものがあり、将来的にあらゆる弱点を克服するため様々な取り組みが現在活発に行われています。Emscripten が生成する JavaScript ソースは、asm.js という高速な処理実行を目指して作られたサブセットを利用しますが、しかし高速処理を目指してもその目標自体がネイティブの半分程度なので、限界はある。

すると PC と比較すれば貧弱なハードウェア処理能力しか持たないモバイル機器では快適な動作が難しいのが HTML5 アプリです。

結局モバイルでは iOS や Android もそれぞれネイティブ動作するアプリが重宝されるようになったため、C/C++ を利用した開発というのはクロスプラットフォーム対策なんだねってことが分かります。

コンパイラ基盤環境が進化してライセンスもゆるい GPL で利用できフロントエンドが作りやすいメリットがある LLVM 利用すれば C/C++ が一層お得に!な流れを利用した製品が F3 のコンセプトと言えます。

総括

学習コストが高い C/C++ の難しい部分をなるべく F3 ユーザに見せないようにしつつ、最終的な出力は C++ で、コンパイラは LLVM 使って、HTML5 は Emscripten 使ってと、C++ ソースコードを出力できるということを強みとしたオーサリングツールへ生まれ変わることを目標にして開発されているのが F3 って感じです。


Leave a comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です