Japan
このブログでは、Google から開発者のみなさま向けの情報をいち早くお届けします。
V8 で WebAssembly を試験運用開始
2016年3月24日木曜日
[この記事は WebAssembly カウボーイ、Seth Thompson による V8 JavaScript Engine の記事 "
Experimental support for WebAssembly in V8
" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]
WebAssembly の包括的な概要と、将来コミュニティでどのようにコラボレートされるかについては、Mozilla Hacks ブログの記事「
A WebAssembly Milestone(WebAssembly のマイルストーン)
」を参照してください。
Google、Mozilla、Microsoft、Apple そして
W3C の WebAssembly コミュニティ グループ
は 2015 年 6 月以降、ウェブのための新しいランタイムおよびコンパイル ターゲットである WebAssembly の
設計
、
仕様決定
、実装
[1]
[2]
[3]
[4]
に精力的に取り組んできました。
WebAssembly
は、コンパクトなバイナリ形式でエンコードされるように設計された、低レベルでポータブルなバイトコードであり、メモリに影響を及ぼさないサンドボックス環境内でネイティブ コードとほぼ同じ速度で処理されます。これまで築いてきたテクノロジーの進化を体現するものとして、WebAssembly はウェブ プラットフォームと密接に統合されるだけでなく、ネットワーク経由のダウンロード速度を向上させ、JavaScript の低レベルのサブセットである
asm.js
よりも速くインスタンス化することができます。
3 月 15 日より、V8 JavaScript エンジンと Chromium プロジェクトで WebAssembly が利用できるように、試験運用機能として実験的にサポートが開始されました。V8 で WebAssembly を試すには、バージョン 5.1.117 以降の
d8
を起動し、コマンドラインで
--expose_wasm
フラグを指定してください。または、Google Chrome Canary 51.0.2677.0 以降を起動し、
chrome://flags#enable-webassembly
と入力することで WebAssembly 実験機能をオンにする方法もあります。ブラウザを再起動すると、WebAssembly モジュールを生成して実行する API を公開する JavaScript コンテキストから、新規の
Wasm
オブジェクトが利用できるようになります。
Mozilla および Microsoft の協力により、互換性のある WebAssembly が 2 種類実装され、
Firefox Nightly
および
Microsoft Edge
の非公開ビルドでそれぞれ動作します(下記に示したビデオのキャプチャ画像を参照してください)。
WebAssembly プロジェクトのウェブサイトでは、3D ゲームで使われるランタイムの
デモ
が公開されています。WebAssembly をサポートするブラウザでは、デモページは WebGL やそれ以外のウェブ プラットフォームの API を利用する wasm モジュールを読み込んで起動し、対戦型ゲームをレンダリングします。それ以外のブラウザでは、同じゲームの asm.js バージョンにフォールバックして動作します。
https://webassembly.github.io/demo/
V8 の WebAssembly 実装は内部的に、既存の JavaScript 仮想マシン(VM)のインフラ、特に
TurboFan コンパイラー
をできるだけ再利用するように設計されています。WebAssembly デコーダは特殊な設計となっていて、型チェック、ローカル変数のインデックス、関数の参照、戻り値、同一パス内の制御フローの構造でモジュールを検証します。その後、デコーダは TurboFan のグラフを作成しますが、このグラフはさまざまな最適化パスで処理され、最終的には、最適化された JavaScript と asm.js 向けのマシンコードを生成する同一のバックエンドによって、マシンコードに変換されます。今後の数か月で、チームはコンパイラーのチューニング、並行処理、コンパイル方法の改良など、V8 実装の起動時間の改善に集中して取り組む予定です。
当面のところ 2 つの変更が計画されていますが、これが実現すると、デベロッパーの操作が大幅に改善されるでしょう。WebAssembly は、一般的なテキストで表現されるため、デベロッパーは WebAssembly バイナリのソースを他のウェブ スクリプトやリソースと同じ方法で参照することができます。また、現在プレースホルダーとして使われている
Wasm
オブジェクトの設計が一新されるので、JavaScript から WebAssembly モジュールを生成したり参照したりするための、より強力で慣用的なメソッドやプロパティを提供できるようになります。
V8 および WebAssembly チームは、安定したランタイムのリリースを目指して、前出のブラウザ ベンダーとの協力関係を今後も継続し、コミュニティを拡大させていきます。また、私たちは、
将来の
WebAssembly の機能(
マルチスレッド
、
動的リンク作成
、
ガベージ コレクションとファーストクラス DOM との統合
など)の開発計画も立てており、また
WebAssembly の LLVM バックエンド
および
Emscripten
から C、C++、およびそれ以外の言語をコンパイルするためのツールチェーンも引き続き開発していきます。今後も設計や実装プロセスの改善を続けていきますので、時々確認してくだされば幸いです。
Posted by
Yoshifumi Yamaguchi - Developer Relations Team
コメントを投稿
ラベル
#hack4jp
3
Addy Osmani
1
ADK
2
AdMob
1
ALPN
1
AMP
2
Analytics
4
Andorid
6
Android
133
Android Auto
1
Android Design Support Library
1
Android Developer Story
1
Android N
1
Android Studio
10
Android Support Library
3
Android TV
7
Android Wear
20
androidmarket
3
AngularJS
2
API
20
APIExpert
45
app engine
21
App Indexing
4
App Invites
5
AppCompat
2
Apps Script
6
aprilfool
3
ArtTech
1
Audio
1
Auth Code
1
Authentication
2
AuthSub
2
Autotrack
1
Beacons
5
BigQuery
6
BLE
4
Blink
1
blogger
1
Brillo
1
Brotli
1
Calendar
1
Cardboard
2
Career
1
Case Study
1
chrome
47
Chrome Custom Tab
1
chrome extension
2
Chrome for Android
1
Chrome for iOS
1
Chromecast
6
chromewebstore
5
Chromium
4
ClientLogin
3
Cloud
8
CocoaPods
1
codejam
5
codelab
2
compute engine
3
Dart
2
DataCenter
1
Deep Learning
1
Demo Party
1
Design Sprint
3
DesignBytes
1
DevArt
3
DevBytes
6
Developer
14
Developer Console
2
Developer Preview
1
Developer Relations
2
DevFest
6
DevFestX
3
devtools
3
DirectShare
1
Doodle
1
DoubleClick
4
Doze モード
1
drive
2
EarlGrey
1
Easter Egg
1
ECMAScript 2015
1
Eddystone
2
egypt
1
English
2
ES6
1
Firebase
3
font
2
game
12
GDD11JP
56
GDD2010JP
23
GDE
2
GDG
9
Geo
17
Gingerbread
1
GLIDE
5
Gmail
1
Go
1
golang
4
goo.gl
1
Google
5
Google Apps
1
Google Cast
6
Google Cloud Messaging
8
Google Cloud Platform
4
Google Developer Experts
2
Google Developers Academy
1
Google Developers live
5
Google Developers Summit
1
Google Drive
2
Google Fit
2
Google for Work
1
Google Maps
22
Google Play
22
Google Play Game Services
5
Google Play Services
17
Google Plus
14
Google Search
3
Google Sign-In
7
Google+
1
Googleapps
10
GoogleGames
1
GoogleI/O
19
GoogleLabs
1
GoogleTV
1
gRPC
2
GTUG
5
GWT
2
hack4jp
2
hackathon
5
HTML5
17
HTML5Rocks
1
HTTP/2
3
HTTPS
2
ID Token
1
Identity
8
Identity Toolkit
1
Ignite
4
IME
10
intern
2
iOS
5
IoT
1
IPv6
1
JavaScript
3
K-12
1
Knowledge Graph
1
l10n
8
Lollipop
10
Machine Learning
1
Marshmallow
10
Material
1
Material Design
17
MDL
1
MIDI
1
Mobile
6
Mobile Bootcamp
4
Mobile Vision
3
mod_pagespeed
1
monetize
3
Mozc
14
Music
1
NativeDriver
2
Nearby
3
Nexus
1
Nexus S
1
NFC
1
NPAPI
2
NPN
1
oauth
5
OpenGL
3
OpenID
3
OpenID Connect
2
OpenSocial
1
opensource
11
Payment
1
People API
1
Performance
5
PersonFinder
1
Physical Web
2
Place Picker
1
Player Analytics
3
Policy
1
Polymer
6
Progressive Web Apps
2
project hosting
1
Promise
1
Promo code
1
Protocol Buffers
1
publicdata
1
QUIC
1
RAIL
1
Remote Display API
1
Runtime Permission
1
Sample Code
2
schema.org
1
security
7
Service Worker
3
sketchup
1
SmartLock for Passwords
4
social
4
SPDY
3
speak2tweet
1
startup
3
streetview
3
Study Jams
3
techtalk
12
TensorFlow
1
test
2
ToS
1
Transliteration
1
Twitter
1
Udacity
13
Unity
2
UX
1
V8
2
VP9
1
Vulkan
1
Watch Face
2
wave
2
Weave
1
Web
1
Web Animations
1
Web Components
4
Web Manifest
1
WebAssembly
1
WebMusic
3
WTM
2
YouTube
14
YouTube API
1
インタビュー
1
コードサンプル
1
プライバシー
1
言論の自由
1
節電
3
東日本大震災
9
日本語入力
40
ブログ アーカイブ
2016
3
2
1
2015
12
11
10
9
8
7
6
5
4
3
2
2014
12
11
10
9
8
7
6
5
4
3
2
1
2013
12
11
10
9
8
7
6
5
4
3
2
1
2012
12
11
10
9
8
7
6
5
4
3
2
1
2011
12
11
10
9
8
7
6
5
4
3
2
1
2010
12
11
Feed
Follow @googledevjp
"プロダクトに関するご意見は
プロダクトフォーラム
にお願いします"