パスワードを忘れた? アカウント作成
8010292 story
Firefox

6月末リリース予定のFirefox 22は一部のJavaScriptコードを高速に実行させる「asm.js」を搭載 55

ストーリー by hylom
進化する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ナイトリービルドでの動作をチェックできる。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2013年03月26日 8時34分 (#2350171)

    そうだ、型が一目見てわかるように変数名で
    わかるようにすればいいんだ。
    よし、まずは a% を整数型、a$ を文字列型にしよう!

    • by Anonymous Coward

      asm.jsはJavaScriptの下位互換性が売りなのに。互換性縛り無しならNaClのほうが早くてソースも見られない

      • by Anonymous Coward

        NaClのほうが遅いって書いてあった。NaClより早いってのがすごいな

        • by Anonymous Coward

          NaClはネイティブの3割ダウンくらいだったはずだけど。
          あと初回のコンパイル時間がかからないよ。

          • by Anonymous Coward

            コンパイルは無いけどコードをチェックしたりするんじゃないか?SDLの部分とか接ぎ変えしないと

  • by iwakuralain (33086) on 2013年03月26日 9時54分 (#2350215)

    いつ実行されたかもわかんなくなるくらい早くなる日がくるよ

    • by Anonymous Coward on 2013年03月26日 10時07分 (#2350225)

      3Dで の一番速いポリゴン描画は描画しないことという言葉を思い出す。

      親コメント
    • by Anonymous Coward

      そういうことは、無限ループを一瞬で抜けてから言ってもらおう

      • by miyuri (33181) on 2013年03月26日 11時13分 (#2350270) 日記

        ループを再帰に置き換えて、スタックを食い潰すように細工すればいいのかな。

        親コメント
        • by Takahiro_Chou (21972) on 2013年03月26日 19時07分 (#2350625) 日記

          せめて、「都市数1000000000のオーダーの巡回セールスマン問題の最適解を1秒以内に出す」程度で勘弁してあげようよ

          親コメント
        • by Anonymous Coward

          それでもある程度の時間はかかるだろう。

          #スタックのサイズを最小に制限すればいい…のか?

        • by Anonymous Coward

          再帰に置き換えたはずが末尾再帰でループに最適化されて以下略

        • by Anonymous Coward

          元々は、いにしえの某スーパーコンピュータのハードウェアの凄さに対する表現ですね。
          速いことは速いけれど、無限ループといった負荷を掛けると、そのうち勝手にプログラムが
          終了してしまうという、その程度の安定性。

          CPUの電源電圧を三倍くらいにすると、どんなループも一瞬で抜けてくるじゃないでしょうか。

          • by Anonymous Coward

            ETA10でしょ
            あれ結局まともに動いたの?

            • by Anonymous Coward

              まともに動く状態で使ったことある人がいないんですから、そんなこと分かる訳無いじゃないですか。

      • by ksiroi (24990) on 2013年03月26日 10時31分 (#2350240) 日記

        おっとハルヒ [google.co.jp]の悪口はそこまでだ

        // (:>^

        親コメント
    • by Anonymous Coward

      それはつまり、あらゆる暗号が一瞬で解読される日。
      おそろしい……!

  • まったく別ネタだけど

    http://togetter.com/li/464086 [togetter.com]
    のkikumacoセンセのコメント

    WHO報告についてGuardianの見出しは"Cancer risk 70% higher for females in Fukushima area, says WHO"で、間違ってはいないけど、事故前の甲状腺癌生涯リスク(女性)0.75%が70%増えて約1.2%になるという話

    を思いだした。

    比率と実際の数値、どちらかだけって大概それだけだと役に立たないというか、混乱のもと...

    # 「実行時間が約2倍程度の高速動作」とか書かないと、直前で速度といってるんだから、速度2倍に見えてしまうよ...

    --
    M-FalconSky (暑いか寒い)
  • by Anonymous Coward on 2013年03月26日 9時09分 (#2350186)

    asm.js対応コードはC#やJava、NaCl より高速に動く(ネイティブコードの2倍という)

    どうやってネイティブコードの倍高速にするのかと思ったが、リンク先を見た結果、「C#やJava、NaCl より高速」、「実行時間はネイティブコードの2倍」という意味らしいということがわかった。2倍ってのがなんなのかきちんと書いてほしい。

    • by Anonymous Coward

      それも違う
      http://gigazine.jp/img/2013/03/22/firefox-asmjs/snap2378.png [gigazine.jp]

      ・今はネイティブの2倍遅く、これはJavaやC#と同じくらい
      ・将来的にはもっと速くなる

      asm.jsのコードはAOTでコンパイルすることが念頭にあるようだ

    • by Anonymous Coward

      ネイティブコードの2倍かかる、とか言えばいいのにね

      • by Anonymous Coward

        2 times faster とかしょっちゅう見かける表現です
        >高速に動く (ネイティブコードの2倍)
        とか言われると、ネイティブコードより二倍速いものと受け取るしかない
        日本語では違う意味なのだ、とか言われるのかもしれないが。

        (最近、とくに、日本語の表現力の低さ、日本人の日本語の扱えなさに呆れ果ててます本当に)

        • by Anonymous Coward

          「実行時間がネイティブコードの2倍程度」
          とでもいう感じなのですかね。

          というか内容から判断してそうとしか読めなかったのでそう読んでいたんですが。
          勿論初めは「実行速度が2倍?」とも思ったんですがそんなわけないので
          1行目の解釈に落ち着きました。ま、ぱっと見どっちにも解釈できる悪文ですね。

        • by Anonymous Coward

          ×:日本語の表現力の低さ
          ◯:日本語の表現の曖昧さ

          分かりやすく書こうと思えば書ける。明確に表現しようと思えば出来る。
          単純に書き手の問題でしかない。

  • by Anonymous Coward on 2013年03月26日 8時30分 (#2350167)

    現在のFirefoxが19.0.2でしょ
    で、もはや3月も終わりで実質あと2ヶ月程度しかないのに3回もメジャーバージョンアップする気なの?

    # 20ちゃんや21ちゃんのこと… 時々でいいから、 思い出してあげてください

  • by Anonymous Coward on 2013年03月26日 11時21分 (#2350276)

    Silverlightとの比較なら、まだわかる。

    • by Anonymous Coward

      たぶんFirefox OSとの絡みもあってこう言う論調なんだと思いますよ

    • by Anonymous Coward

      asm.jsはシンタックスが面妖だがただのアセンブラや中間言語であるから
      アプリケーションフレームワークのsilverlightと比較するのは完全な無意味

      • by Anonymous Coward

        え? 聞いたことないけど、IEではC#をscriptとして使えますよ的ななにかじゃないの?(かつてのVBScriptみたいに)

  • by Anonymous Coward on 2013年03月26日 16時53分 (#2350505)

    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 倍か。

    • by Anonymous Coward

      Emscriptenちょっと触ってみました。
      GLUT+OpenGLES2.0で作った簡単なアプリがそのままビルド、実行できてしまうので、特にモバイルのネイティブアプリのソースを再利用しやすいなあと感じました。
      NaClは標準のファイル関係のAPIがまったく使えずPapperAPIを使用してファイル(HTML5のLocalStorage領域)にアクセスしなければならなかったのですが、
      EmscriptenはJavaScript側で用意をしてやればfopenやfstreamなどのC/C++標準ライブラリとかもそのまま使えました。
      両方ともちょっとしか触ってませんが、使いやすさはEmscriptenのほうがいい印象です。

      あとバッフ

  • by Anonymous Coward on 2013年03月27日 3時27分 (#2350854)

    正直変数の型を頭に明記してから使い始めるのではなく、
    値が発生するところの型を教えるという従来の逆の後ろから攻めるやり方には非常に興味をもった
    原理的には将来的に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の拡張と合致するのかということ
    ココら辺お互いに強く意識して実装して貰わないと
    もしミスマッチなことになってしまったら将来的にものすごく大変なことになりそうだし
    ミスマッチを避けるために機能の導入ができなくなるのも困る

    • by Anonymous Coward

      手書きはキツイから機械的にasm節に変換したいという願望と、
      でも構造からasmに合うように繊細に作らなければ効果が薄いという現実のジレンマ

      そのためのEmscriptenで静的型付け言語からの変換ですよ。
      今はCとC++しか使えませんが、C#やJavaからコンパイルできるようになれば置き換えを目指しているというのも納得いく。(その言語をそのまま使ってるので置き換えという言葉があってるかどうかは置いておいて)

      • by Anonymous Coward

        GUIのラッパも作れば完璧なのにね。普通のアプリを再コンパイルすれば動くみたいな。WineやwxWindowのコードを流用して作れないんだろうか?

        • by Anonymous Coward

          WikiにありますがQtは動いてますよ。
          ブラウザの中にウインドウがあるのは違和感ありますが…

typodupeerror

計算機科学者とは、壊れていないものを修理する人々のことである

読み込み中...