ASM.jsとは何ですか?また、それはすべての人にとって何を意味しますか?


27

ASM.jsと呼ばれるこのプロジェクトについて不平を聞き始めています。現在、彼らのウェブサイトはひどく混乱しています。以下は、Webでの調査でわかったことです。

  • これは、高度に最適化できるJavaScriptのサブセットです。言語のより動的な部分を避けるためだと思います。
  • ASM.jsにコンパイルされたコードのパフォーマンスは、Cの約半分の速度で実行されます(光ではありません)。
  • その意図は、コンパイラーがターゲット言語ASM.jsを作成することです。
  • FirefoxはASM.js最適化が組み込まれた状態で出荷されます。
  • MozillaとUnrealのチームが移植されたウェブにアンリアル・エンジンをそれにしてのビルドでランニングのFirefox、ネイティブに近いスピードで。

これが実際に何であるか、または有用性または究極の目的に関する具体的な情報はウェブ上にないようです。それ以外の場合はサーバー側のコードベースをコンパイルし、ブラウザにネイティブに近い速度で実行させることができますか?開発者にとっての影響は何ですか?

回答:


21

あなたはすでにそれ何であるかを説明しました。使用法は、すべてのブラウザで機能する低レベル言語であり、ほとんどのブラウザで非常に高速で、一部のブラウザでは非常に高速であることです。これを作成することは、他のプログラミング言語で行うことと同じくらい自由です。

Mozillaが最も熱心に使用しているユースケースは次のとおりです。Emscriptenを介して、LLVMバックエンド(最も顕著なのはCおよびC ++)を持つ言語をJavaScriptにコンパイルする方法はすでにあります。asm.jsは、Emscriptenが既に発行しているものに非常に近いため、Emscriptenコード(今日のJavaScript JITコンパイラーでは既に非常に高速です)がさらに高速になり、既存のコードベースをWebに移植するという目標がさらに高まります。繰り返しますが、これを正確に使用するのはあなたの決断です。ゲームの移植は1つのユースケースです(Mozillaは明らかに積極的に関与しています)が、CやC ++で書かれたものは無数にあり、その多くは誰かのWebサイトに役立つかもしれません。実行可能性についての保証なしで、私は飛び回っているのを見ました(そして、私自身の工夫のいくつか):

  • 汎用アルゴリズム(zlib、libjpeg、openssl、FFT実装など)を移植して、新しいWeb標準を作成したり、個別のブラウザに依存して実装したりすることなく、JavaScript / Webサイトの機能を強化します。
  • JavaScript以外の言語がブラウザーで実行できるように、インタープリターを移植します。オーバーヘッドが少なく、移植作業が最小限です。
  • より多くのコンパイラ、特にJavaScriptにうまくマッピングせず、その機能とオーバーヘッドのほとんどを必要としないコンパイラのバックエンドとしてasm.jsを使用します。例としては、メモリ割り当てのない高速な数値処理用に設計された言語があります。
  • asm.jsを使用して JavaScriptでJITを作成ます。ActionScriptなどの任意の言語を実装できます。
  • 同様に、既存のJITコンパイラを移植してブラウザで実行します(JSのオーバーヘッドが事実上ゼロのインタプリタの移植を参照)。これはおそらく、PyPyと同様に、JITコンパイラーが自動的に生成される場合にのみ実行可能です。

2
別の良い説明があります:ejohn.org/blog/asmjs-javascript-compile-target
Jarrod Nettles

1
ここだコンセプトの証明 asm.js.にJITを移植するためには、これはユニークなセールスポイントであり、ほとんどの新しいプラットフォームはJITに対応していません。
東武14年

asm.jsがJITコンパイルをサポートする方法についての説明はどこかにありますか?それに関する情報を見つけることができないようです。セキュリティへの影響をどのように処理するかに最も関心があります。
ローマンスターコフ14

@romkynsブラウザによるasm.jsのマシンコードへの JITコンパイル、または(JavaScriptプログラムによる)asm.js への JITコンパイル?前者については、少なくともFirefoxでは、pure-JS JITコンパイラーのマシンコード生成機能が再利用されます。asm.jsはJSの呼び出し、算術の実行、およびインデックス範囲内チェックでヒープ配列の読み取り/書き込みのみを行うことができるため、セキュリティはJS実行のセキュリティとほぼ同等です。後者の場合、asm.jsソースコードを生成し、ブラウザーに実行させるだけで、前述した以外の追加のセキュリティへの影響はありません。

(私は後者を意味しました)もちろんああ。どういうわけか、JITコンパイラがネイティブマシンコードを出力することを想像しました。説明をありがとう!
ローマンスターコフ14

4

ASM.jsが、プロローグディレクティブで始まるヒープとJavaScriptモジュールのセットと呼ばれる大きなバイナリArrayBufferであると想像してください"use asm";。アセンブリ言語と同様に、生のバイナリデータに対して高速で低レベルの操作を実行します。これらのモジュールは手で書くか、EmscriptenのようなスクリプトでLLVMコードからコンパイルする方が良いでしょう。Mozilla OdinMonkeyエンジンのおかげでパフォーマンスは向上する可能性がありますが、最新のECMAScriptインタープリターのほとんどと下位互換性があります。

ASM.jsがゲームに限定されるものではなく、あなたもQtは同様に、お使いのブラウザでアプリ全体で実行することができますこれらの

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.