【最新】WebAssemblyが熱い

  • 284
    いいね
  • 5
    コメント
この記事は最終更新日から1年以上が経過しています。

"Today's Big News"

来る2015年6月17日、JavaScriptの生みの親でもある超有名人のBrendan Eichが以下の記事を発表しました。海外では結構この話題がもちきりみたいです。そういえば最近のRebuild.fmでもこの話題が出ていましたね。

(注)
訳は意訳です。原文との乖離があれば教えてください。

Today's Big News

It’s by now a cliché that JS has become the assembly language of the Web. Rather, JS is one syntax for a portable and safe machine language, let’s say. Today I’m pleased to announce that cross-browser work has begun on WebAssembly, a new intermediate representation for safe code on the Web.

『JavaScriptがWebのアセンブリ言語だってのはもう使い古された決まり文句みたいなもんだよね。まあ、言うなら、JSはポータブルで安全性の高いマシン語のための文法だってね。でも今日、僕はWebAssemblyというクロスブラウザのプロジェクトが開始されたことをご報告します。WebAssemblyは、Webにおける安全性の高い、新しい中間表現になりうるんだよ。』 - Brendan Eich

...ようするにどういうことか?
Dr. Axel Rauschmayerの記事の冒頭を紹介します。

WebAssembly (short: wasm) is a new binary format for the web, created by Google, Microsoft, Mozilla and others. It will be used for performance critical code and to compile languages other than JavaScript (especially C/C++) to the web platform. It can be seen as a next step for asm.js

WebAssembly(略称:wasm)とは、Google, Microsoft, Mozillaやほかのプレイヤーによって作られている、Webのための新しいバイナリ―のフォーマットです。JavaScriptとは違った方法、たとえばCやC++などで、重大なコードパフォーマンスや言語のコンパイルのために使われます。asm.jsの次のステップになるのです。 - Dr. Axel Rauschmayer

つまり、 中間表現をスキップして高速化するための規格をブラウザベンダ間で一致団結してプロジェクト動かしてます みたいな感じですかね。

無題.png

【What】WebAssemblyとは何か

What: WebAssembly, “wasm” for short, .wasm filename suffix, a new binary syntax for low-level safe code, initially co-expressive with asm.js, but in the long run able to diverge from JS’s semantics, in order to best serve as common object-level format for multiple source-level programming languages.

WebAssemblyはJSの代替品、ということではありません。どちらかというと、JavaScriptを高速化・エンハンスするためのエンジンです。LLVMのバックエンドとしてWebAssemblyをはく、といったようなイメージですので、何かしらあたらいい言語が登場するということではないです。

webassembly
(WebAssembly: a binary format for the web)

【Why】なぜWebAssemblyか

Why: asm.js is great, but once engines optimize for it, the parser becomes the hot spot — very hot on mobile devices. Transport compression is required and saves bandwidth, but decompression before parsing hurts. A secondary consideration: JS has a few awkward corners even in its asm.js subset. Finally, once browsers support the WebAssembly syntax natively, JS and wasm can diverge, without introducing unsafe or inappropriate features into JS just for use by compilers sourcing a few radically different programming languages.

(なお、この「早い」ということに関しては、ロードタイムを早くはするが実行時間を早くするわけではありません。詳細はWebAssembly: a binary format for the webより。)

Rebuild.fmで森田さんもおっしゃっていましたが、「JavaScriptがイケてないからオレオレな言語を書こうとして始まったGoogleのDartプロジェクトがありますが、こっちはどちらかというと、JavaScriptはいい、いいけどもっと早くなるよね、ということで進められているプロジェクト」という印象です。

今後の展開

Firefoxはasm.jsをもともと持っていました。各ブラウザが、WebAssemblyに準ずる動きを勝手にやってきていました。それが、このたび一致団結して、Webの新しいステップにつながりうる大きなムーブメントが動き出すか?ということですね。標準化の動きに大きな一歩を踏み出したからこその「Today's Big News」なのでしょう。

これがすぐ取り組まれるかというと、そうでもないかと思います。しばらく時間はかかるとは思いますし、これが今のフロントエンドエンジニアやSPAアーキテクト、JS書くすべての人に影響を与えはしないとは思います。ですが、知っておいて、かつ情報をキャッチしておいて損はないかと思います。

今後の展開に関しては、Dr. Axel Rauschmayerはこう言っています。

The initial focus is for WebAssembly to be a compilation target for C/C++. Longer term, more features supporting other languages will be added, including the ability to create garbage-collected data (currently, asm.js creates and manages its own heap).

とりあえず、asm.jsの次のステップを目指しています、C/C++をコンパイルのターゲットとしてまずは書いています、という段階みたいですね。

自分はJavaScriptのコミッターでもないし、MDNの記事を訳したことぐらいしかない人間ですので、これが本当にボールを握るようなトレンドになるのか、それとも実は知っている人は知っている事実だったのかとか、わからない部分も多々ありますので、ぜひ情報提供お待ちしております(笑)

また、とりあえずざっくり情報集めて共有しましたので、正確な情報やより詳細な情報が集まり次第また適宜共有していきます。

読むべき記事

From ASM.JS to WebAssembly

事件の(?)発端ともなった、そのBrendan Eich自身のブログ記事です。

GitHub Repos

GitHubにて公開されている、WebAssemblyのFAQページです。

WebAssembly

もっと詳細をしりたいとき

WebAssembly: a binary format for the web

Dr. Axel Rauschmayerが、Brendan Eichのブログでの発表の翌日に書いた記事です。

WEBASSEMBLY COMMUNITY GROUP

W3CのWebAssemply Community Groupです。

What is WebAssembly? ~ The Dawn of a New Era ~ by Medium

今回のWebAssemblyについて、周辺知識から説明してくれている、比較的わかりやすい記事です。