主要ブラウザで実行可能なバイナリ形式「WebAssembly」の開発がスタート。Chrome、WebKit、Firefox、Microsoft Edge、LLVM、Unityらがサポートを相次いで表明
WebAssemblyのプロジェクトは、オープンソースとしてGitHubで開発中のコードが公開され、W3Cに「WebAssembly Community Group」が設立されました。
GitHubで公開されている「WebAssembly High-Level Goals」によると、WebAssemblyが目指しているのは、どのWebブラウザでも実行可能なポータブルで、かつロード時間が小さくて済むコンパイル済みのバイナリフォーマットで、汎用的なハードウェアの能力を活用したネイティブスピードで実行でき、しかもモバイルやIoTを含む幅広いプラットフォームをサポートするもの。
要するに、プログラミング言語をコンパイルし、どのWebブラウザでも高速に実行できるバイナリフォーマットを開発する、というのがWebAssemblyが目指すものです。最初のWebAssemblyの実装ではC/C++言語をコンパイルすることを想定しています。
このプロジェクトにはマイクロソフトがブログで参加を表明しFirefoxもブログで参加を表明、Chromeの開発担当者もツイッターでプロジェクトへの参加をつぶやき、WebKitはBugzillaに開発タスクが登録されました。また、LLVMもWebAssemlyへの対応を前向きに検討しています。
ゲームエンジンのUnityの開発者も次のようにWebAssemblyへの対応をブログで示しています。
We plan to switch Unity WebGL to output WebAssembly bytecode once the feature becomes available in browser releases.
Unity WebGLも、ブラウザで利用可能になったらアウトプットをWebAssemblyバイトコードに切り替える計画だ。
なぜWebAssemblyは作られるのか?
なぜこのような、Webをターゲットにした新しい実行系の開発が始まったのでしょうか? WebAssemblyのFAQなどを含む複数のドキュメントから、次のような理由が読み取れます。
1つは、モバイルやIoTといったネットワーク回線やマシンパワーが比較的小さいデバイスにおいても効率よく実行できるように、圧縮しやすくパースも高速かつ軽量で済むフォーマットが望まれていたこと。
もう1つは、すでに存在する低レベル言語としてのasm.jsは拡張が難しく、ネイティブスピードを実現するという要求には、新しいものを作った方がよいだろうと考えられたことです。
WebAssemblyの登場は、JavaScriptの終わりの始まりなのでしょうか? そうではない、とWebAssemblyプロジェクトは説明しています。FAQには、「Is WebAssembly trying to replace JavaScript?」の項目があります。その答えの一部を下記に引用しましょう。
No! WebAssembly is designed to be a complement to, not replacement of, JavaScript (JS). While WebAssembly will, over time, allow many languages to be compiled to the Web, JS has an incredible amount of momentum and will remain the single, privileged (as described above) dynamic language of the Web.
いいえ、WebAssemblyはJavaScriptを置き換えるのではなく、補完するように設計されています。長期的にはWebAssemblyは多くの言語をコンパイルしてWebで実行できるようになるでしょう。それでもJavaScriptは信じられない勢いで普及し、単一で、Webにおけるダイナミック言語の確固たる地位にありつづけるでしょう。
そしてWebAssemblyではJavaScriptとWebAssemblyを組み合わせたさまざまなユースケースを想定しています。
まずはasm.jsと同等程度の機能から
WebAssemblyでは、まずはプロジェクトの有効性を検証するためのMVP(Minimal Viable Product)として、C/C++言語をコンパイルでき、現在Webブラウザでアセンブラ的な機能を備えているasm.jsとほぼ同様の機能を備えたプロトタイプが公開されています。
また、生成されたWebAssemblyをJavaScriptに変換することでWebAssemblyを現在のどのWebブラウザでも実行可能にする「Polyfill to JavaScript」もMVPとして公開されています。
参考
あわせて読みたい
富士通がオープンソースに貢献したらこうなった。第26回 PaaS勉強会
≪前の記事
IBM、「Spark as a Service」を発表。Apache Sparkへのコミットで3500人の研究者やエンジニアを投入