
6月末リリース予定のFirefox 22は一部のJavaScriptコードを高速に実行させる「asm.js」を搭載 55
ストーリー by hylom
進化するJavaScript 部門より
進化するJavaScript 部門より
あるAnonymous Coward 曰く、
6月末にリリースが予定されているFirefox 22では、新たなJavaScriptエンジン「OdinMonkey」が搭載される(マイナビニュース)。OdinMonkeyには特定のJavaScriptコードの実行速度を向上させる「asm.js」という技術が採用されるとのことで、C#やJava、Native Client(NaCl)の置き換えを目指しているという(GIGAZINEの記事、Togetterまとめ、Mozilla開発者のブログ)。
asm.jsは既存のJavaScriptコードをそのまま高速化するものでは無く、C/C++といった静的型付けを採用する言語をLLVMを使用してJavaScriptへ変換したコード、またはasm.jsの高速化を意識して特別に書いたJavaScriptコードのみをを高速化するものだ。仕組みは単純で、JavaScriptにおいて変数の型を固定化して高速化しようというアプローチである。
NaClはChrome上でしか動かない。それに対しasm.jsのコードは100%下位互換性のあるJavaScriptなので、asm.js非対応のWebブラウザでも動作する(ただしその場合実行速度は遅くなる)。asm.jsに対応しているFirefox 22では、asm.js対応コードはC#やJava、NaCl より高速に動く(ネイティブコードの2倍という)とのことで、zlibやbulletなどを使ったベンチマーク結果が公開されている。
なお、「Emscripten」をダウンロードし、C/C++コードを "-O2 -s ASM_JS=1"でコンパイルすることでFirefox 22ナイトリービルドでの動作をチェックできる。
ピコーン!余計なこと閃いた! (スコア:5, おもしろおかしい)
そうだ、型が一目見てわかるように変数名で
わかるようにすればいいんだ。
よし、まずは a% を整数型、a$ を文字列型にしよう!
Re: (スコア:0)
asm.jsはJavaScriptの下位互換性が売りなのに。互換性縛り無しならNaClのほうが早くてソースも見られない
Re: (スコア:0)
NaClのほうが遅いって書いてあった。NaClより早いってのがすごいな
Re: (スコア:0)
NaClはネイティブの3割ダウンくらいだったはずだけど。
あと初回のコンパイル時間がかからないよ。
Re: (スコア:0)
コンパイルは無いけどコードをチェックしたりするんじゃないか?SDLの部分とか接ぎ変えしないと
そのうち (スコア:2)
いつ実行されたかもわかんなくなるくらい早くなる日がくるよ
Re:そのうち (スコア:1)
3Dで の一番速いポリゴン描画は描画しないことという言葉を思い出す。
Re: (スコア:0)
そういうことは、無限ループを一瞬で抜けてから言ってもらおう
Re:そのうち (スコア:3)
ループを再帰に置き換えて、スタックを食い潰すように細工すればいいのかな。
Re:そのうち (スコア:2)
せめて、「都市数1000000000のオーダーの巡回セールスマン問題の最適解を1秒以内に出す」程度で勘弁してあげようよ
Re: (スコア:0)
それでもある程度の時間はかかるだろう。
#スタックのサイズを最小に制限すればいい…のか?
Re: (スコア:0)
再帰に置き換えたはずが末尾再帰でループに最適化されて以下略
Re: (スコア:0)
元々は、いにしえの某スーパーコンピュータのハードウェアの凄さに対する表現ですね。
速いことは速いけれど、無限ループといった負荷を掛けると、そのうち勝手にプログラムが
終了してしまうという、その程度の安定性。
CPUの電源電圧を三倍くらいにすると、どんなループも一瞬で抜けてくるじゃないでしょうか。
Re: (スコア:0)
ETA10でしょ
あれ結局まともに動いたの?
Re: (スコア:0)
まともに動く状態で使ったことある人がいないんですから、そんなこと分かる訳無いじゃないですか。
Re:そのうち (スコア:1)
おっとハルヒ [google.co.jp]の悪口はそこまでだ
// (:>^
Re: (スコア:0)
それはつまり、あらゆる暗号が一瞬で解読される日。
おそろしい……!
比較の数字はベースも (スコア:2)
まったく別ネタだけど
http://togetter.com/li/464086 [togetter.com]
のkikumacoセンセのコメント
を思いだした。
比率と実際の数値、どちらかだけって大概それだけだと役に立たないというか、混乱のもと...
# 「実行時間が約2倍程度の高速動作」とか書かないと、直前で速度といってるんだから、速度2倍に見えてしまうよ...
M-FalconSky (暑いか寒い)
ネイティブコードの2倍 (スコア:1)
どうやってネイティブコードの倍高速にするのかと思ったが、リンク先を見た結果、「C#やJava、NaCl より高速」、「実行時間はネイティブコードの2倍」という意味らしいということがわかった。2倍ってのがなんなのかきちんと書いてほしい。
Re: (スコア:0)
それも違う
http://gigazine.jp/img/2013/03/22/firefox-asmjs/snap2378.png [gigazine.jp]
・今はネイティブの2倍遅く、これはJavaやC#と同じくらい
・将来的にはもっと速くなる
asm.jsのコードはAOTでコンパイルすることが念頭にあるようだ
Re: (スコア:0)
ネイティブコードの2倍かかる、とか言えばいいのにね
Re: (スコア:0)
2 times faster とかしょっちゅう見かける表現です
>高速に動く (ネイティブコードの2倍)
とか言われると、ネイティブコードより二倍速いものと受け取るしかない
日本語では違う意味なのだ、とか言われるのかもしれないが。
(最近、とくに、日本語の表現力の低さ、日本人の日本語の扱えなさに呆れ果ててます本当に)
Re: (スコア:0)
「実行時間がネイティブコードの2倍程度」
とでもいう感じなのですかね。
というか内容から判断してそうとしか読めなかったのでそう読んでいたんですが。
勿論初めは「実行速度が2倍?」とも思ったんですがそんなわけないので
1行目の解釈に落ち着きました。ま、ぱっと見どっちにも解釈できる悪文ですね。
Re: (スコア:0)
×:日本語の表現力の低さ
◯:日本語の表現の曖昧さ
分かりやすく書こうと思えば書ける。明確に表現しようと思えば出来る。
単純に書き手の問題でしかない。
Re: (スコア:0)
>ネイティブより早くなるはずないじゃん。
Java は Cより速いという話、昔はちょいちょい見かけたなぁ。
実行時最適化するから云々…まったくのウソじゃないにしてもねぇ。
Re: (スコア:0)
ありましたね
似たようなのでTAOのElate OSもそういう売り文句で売ってたけど消えたなぁ
まあ過剰なセールストークはかえって印象が悪くなるという事で
Re: (スコア:0)
いや、わかりにくいだろ。
「ネイティブコード実行時の2分の1程度まで高速化されるという」程度までは補足すべきだと思うが、少なくとも「ネイティブコードの2倍」よりは意味がわかりやすい。
Re:ネイティブコードの2倍 (スコア:1)
何から見て何が何の2分の1程度なのか2倍なのか書いてない時点で意味がわからんわ。
Re: (スコア:0)
俺も誤読した。
けど JIT で結局はバイナリに代わるのだから、どんな動作環境でも動かなきゃいけない汎用バイナリより早く動いてもおかしくない。
いいんじゃないの?誤読して「じゃぁ俺も作ってみよう」って思い違いがソフトウェアを進化させる原因につながるかも。
過去に何回かあったしね。
Re: (スコア:0)
さすがに、ここまであからさまな無理筋にトライすると砕け散っちゃうと思うんだが。
Re: (スコア:0)
一般技術者なら通じます
Re: (スコア:0)
まともな技術者ならこんな書き方しません。
Re: (スコア:0)
JavaScriptがネイティブの2倍の速度で動くって読めちゃう低脳だからゴネてるんでしょ?
22て… (スコア:0)
現在のFirefoxが19.0.2でしょ
で、もはや3月も終わりで実質あと2ヶ月程度しかないのに3回もメジャーバージョンアップする気なの?
# 20ちゃんや21ちゃんのこと… 時々でいいから、 思い出してあげてください
あっという間に3桁行きそうなリリーススケジュール (スコア:3)
http://mozilla-remix.seesaa.net/article/310832274.html [seesaa.net]
4月2日に20、5月14日に21、そして6月25日に22だそうです
Re:22て… (スコア:1)
6週おきのリリースだから…あれ?
だ、大丈夫。3月32日が来るから…。
Re:22て… (スコア:1)
これで俺も納期守れるヤッター!
Firefoxユーザーの本音 (スコア:1)
高速化とかどうでもいいから、しょっちゅうメジャーアップデートするのお願いだからやめてくれ・・・、アドオンとか使い勝手とか・・・(略)
Re: (スコア:0)
だいたい現Stable(19)に対して
+1(20): β / RC 安定化テスト中
+2(21): Aurora 実装がすすんだ新機能の前評判を品質はさておきで聞いてる状態
+3(22): α以前 新機能実装中/計画中
くらいのフェイズかなあなどと思っております。
C#と比較する意味が分からない。 (スコア:0)
Silverlightとの比較なら、まだわかる。
Re: (スコア:0)
たぶんFirefox OSとの絡みもあってこう言う論調なんだと思いますよ
Re: (スコア:0)
asm.jsはシンタックスが面妖だがただのアセンブラや中間言語であるから
アプリケーションフレームワークのsilverlightと比較するのは完全な無意味
Re: (スコア:0)
え? 聞いたことないけど、IEではC#をscriptとして使えますよ的ななにかじゃないの?(かつてのVBScriptみたいに)
NaCl より速い? (スコア:0)
NaCl より速いっていうソースがみつからない。
NaCl について言及がない:
http://gigazine.net/news/20130322-firefox-asmjs/ [gigazine.net]
https://blog.mozilla.org/luke/2013/03/21/asm-js-in-firefox-nightly/ [mozilla.org]
http://kripken.github.com/mloc_emscripten_talk/#/40 [github.com]
http://news.mynavi.jp/news/2013/03/25/057/ [mynavi.jp]
http://togetter.com/li/473420 [togetter.com]
NaCl についての言及がある:
http://www.2ality.com/2013/02/asm-js.html [2ality.com] → 『NaCl より実装が楽』
このあたり [debian.org]を見ると、Java で C++ の 2.3 倍、C#(Mono) は 2.2 倍で走ってるから、『2倍』といっても大差はないようにも見える。現行の JavaScript(V8) でさえ 4.2 倍か。
Re: (スコア:0)
Emscriptenちょっと触ってみました。
GLUT+OpenGLES2.0で作った簡単なアプリがそのままビルド、実行できてしまうので、特にモバイルのネイティブアプリのソースを再利用しやすいなあと感じました。
NaClは標準のファイル関係のAPIがまったく使えずPapperAPIを使用してファイル(HTML5のLocalStorage領域)にアクセスしなければならなかったのですが、
EmscriptenはJavaScript側で用意をしてやればfopenやfstreamなどのC/C++標準ライブラリとかもそのまま使えました。
両方ともちょっとしか触ってませんが、使いやすさはEmscriptenのほうがいい印象です。
あとバッフ
Re: (スコア:0)
https://twitter.com/pornelski/status/302549255950852097 [twitter.com]
試してみた (スコア:0)
正直変数の型を頭に明記してから使い始めるのではなく、
値が発生するところの型を教えるという従来の逆の後ろから攻めるやり方には非常に興味をもった
原理的には将来的にCよりも効率的にCの速度まで達することは可能とおもわれる
で、試してみたんだけど正直がっかりだった
他の人も言ってるけど四則演算とかマイクロベンチ的な部分は既存のJITでも既にネイティブにかなり近いので効果なかった
あと、1箇所も落とさずにasm節でコードを書くのは楽しいけど思ったより大変だった
オマケにasm節で書くと互換性はあるが非対応な既存のV8とかのJITを妨害して速度が60倍低下してビビった
多分asmの味噌は四則演算とかを効率的に扱うことではなくて、
TypedArrayやGC制御を使ったC言語のメモリアクセス的な作業の高速化を可能にすることだと思う
要所にちょこちょこっと使って演算を大幅高速化というより、
ライブラリ単位でasm節というだけではなく構造から気をつけて作らないと効果は薄いと思われる
手書きはキツイから機械的にasm節に変換したいという願望と、
でも構造からasmに合うように繊細に作らなければ効果が薄いという現実のジレンマ
更に現状はデバッグもしにくいからまだまだ使えいけど、アプローチはいいと思う
物理演算やゲームや3Dのサポートライブラリには格別だと思われる
そういう巨大なフレームワークでは確かにNativeClientと同等になりうる
あと気になるのは同じようにFFに近々導入されそうなJS並列処理節のParallel.jsや
他の'use *'やES.nextの拡張と合致するのかということ
ココら辺お互いに強く意識して実装して貰わないと
もしミスマッチなことになってしまったら将来的にものすごく大変なことになりそうだし
ミスマッチを避けるために機能の導入ができなくなるのも困る
Re: (スコア:0)
手書きはキツイから機械的にasm節に変換したいという願望と、
でも構造からasmに合うように繊細に作らなければ効果が薄いという現実のジレンマ
そのためのEmscriptenで静的型付け言語からの変換ですよ。
今はCとC++しか使えませんが、C#やJavaからコンパイルできるようになれば置き換えを目指しているというのも納得いく。(その言語をそのまま使ってるので置き換えという言葉があってるかどうかは置いておいて)
Re: (スコア:0)
GUIのラッパも作れば完璧なのにね。普通のアプリを再コンパイルすれば動くみたいな。WineやwxWindowのコードを流用して作れないんだろうか?
Re: (スコア:0)
WikiにありますがQtは動いてますよ。
ブラウザの中にウインドウがあるのは違和感ありますが…