Google、Microsoft、Mozilla、および WebKitプロジェクトのエンジニアらは今日(米国時間6/17)、ウェブ用アプリケーションをコンパイルするための新しいバイナリーフォーマット、WebAssemblyを共同開発したことを発表した。
ウェブは標準を糧に成長を果たし、そのプログラミング言語は、良くも悪くも、JavaScriptだ。数年来、デベロッパーがJavaScriptの限界をある程度回避できるようにと、他の言語からJavaScriptにコードを変換するコンパイラーを開発する取組みが数多くなされてきた。あるプロジェクトは言語に新たな機能を追加し(例えばMicrosoftのTypeScript)、あるいはJavaScriptをスピードアップした(Mozillaのasm.jsプロジェクト)。今、そうしたプロジェクトの多くが、WebAssemblyという形で団結しようとしている。
新フォーマットの狙いは、プログラマーがブラウザー用のコード(現在はC/C++が対象、他言語も続く予定)をコンパイルし、JavaScriptエンジンの中で動作できるようにすることだ。コード全体の構文解析(モバイルでは特に時間がかかる)が必要なくなり、WebAssemblyははるかに速くデコードすることかできる。
デベロッパーに単一のコンパイルターゲットを提供し、それが全ブラウザーで実装されたWeb標準となる、というのがWebAssemlyの考え方だ。
通常、JavaScriptファイルはサーバーからダウンロードされる単純なテキストファイルで、それをブラウザー内のJavaScriptエンジンが構文解析し実行する。WebAssemblyチームがバイナリー形式の採用を決めた理由は、標準のJavaScriptテキストファイル以上に圧縮が可能であり、エンジンがasm.jsコードを構文解析するよりバイナリー形式をデコードする方が圧倒的に速い(現在のプロトタイプで最大23倍)からだ。
Mozillaのasm.jsは、ウェブにネイティブ並みのスピードをもたらすことを長年目標としてきた。ブラウザーでネイティブコードを走らせるGoogleNative Clientプロジェクトも同様の目標を掲げていたが牽引力は比較的小さかった。WebAssemblyは、各プロジェクトの良いところをブラウザーにもたらすことができるかもしれない。
第一ステップとして、WebAssemblyチームはasm.jsとほぼ同じ機能を提供することを目指している(そしてデベロッパーは現在asm.jsコードのコンパイルに使用しているのと同じEmscriptenツールをWebAssemblyでも使うことができる)。
この初期段階に、チームはpolyfill libraryと呼ばれる、WebAssemblyコードをJavaScriptに変換してどんなブラウザーでも動くようにするツールも公開する計画だ ― WebAssemblyをサポートしていないブラウザーでも動くように(これはどう見ても少々不合理だが、全ブラウザーがこのコードをネイティブに動かせるようになれば不要になる)。また長期的には、その他のツール(コンパイラー、デバッガー等)も開発し、他の言語(Rust、Go、C#等)のサポートも追加する予定だ。
JavaScriptの発明者(かつ短期間Mozilla CEOだった)Brendan Eichが今日指摘したように、主要なブラウザーが新フォーマットをネイティブにサポートした時点で、JavaScriptとWebAssemblyは再び分化できるようになる。
そしてチームは、プロジェクトの狙いはJavaScriptを置き換えることではなく、もっと多くの言語をウェブ用にコンパイルできるようにすることだと念を押す。実際、JavaScriptとWebAssemblyが共存し、アプリケーションの一部がWebAssemblyモジュールを使い(アニメーション、ビジュアル化、圧縮等)、ユーザーインターフェースの殆どはJavaScriptで書かれたままという状態は十分考えられる。
主要ブラウザーのベンダーが全員揃ってこのようなプロジェクトで協力することは珍しいので、今後数ヵ月、数年先が大いに注目される。
[原文へ]
(翻訳:Nob Takahashi / facebook)