簡體   English   中英

asm.js和WebAssembly有什么區別?

[英]What is the difference between asm.js and WebAssembly?

我最近一直在閱讀有關asm.js和WebAssembly的內容:

http://ejohn.org/blog/asmjs-javascript-compile-target/

https://brendaneich.com/2015/06/from-asm-js-to-webassembly/

我仍然對一些事情感到困惑:

  1. asm.js代碼是否可以及時編譯並運行? 編譯成什么?
  2. 除了asm.js為文本和wasm(Web程序集)為二進制以外,兩者之間有什么區別?
  3. 這對於在瀏覽器中運行的其他腳本語言意味着什么? 以python為例,它將是
    • python代碼編譯為wasm? 要么
    • python解釋器(Cpython)編譯成wasm並解釋python?

asm.js是帶有“高度優化”指令的JS子集。 基本上,您可以聲明類型(int,float),並且js引擎(在瀏覽器中也可以在node.js中)將更快地執行指令。 如果與WebGL一起使用,您的應用程序會進行大量的計算或圖形處理,則將具有很多好處。

Web程序集是JS的二進制格式,所有JS不僅是asm.js。 它不是字節碼,而是解析器計算的AST的二進制編碼。 它有2大好處:

  • JS引擎可以跳過解析步驟
  • 它比JS原始源代碼緊湊得多

我們已經可以為非JS的瀏覽器編寫代碼:EMSCripten可以在JS代碼中編譯c ++代碼。 其他反編譯器已經可以將您的代碼編譯為JS。 使用asm.js進行數學運算時,代碼可以更快地運行。 使用Web匯編,代碼將更加緊湊,瀏覽器將能夠更快地處理它(因為它將能夠跳過解析)。 您將不需要像DirectX,JavaApplets,Flash或Silverlight這樣的新插件來加載,因為所有插件都將在JS沙箱中運行。

asm.js代碼是否可以及時編譯並運行? 編譯成什么?

asm.js是常規的javascript代碼,通常會被JS解釋器編譯為字節碼。 但是,具有asm支持的解釋器應該進行提前編譯,並且由於靜態類型的原因,可能會生成更有效的代碼表示形式。 有關詳細信息,請參見http://asmjs.org/

asm和wasm之間有什么區別(文本和二進制除外)?

暫時沒有。 wasm應該是向后兼容的,可以編譯為asm (它也可以像普通JS一樣執行)。 但是,隨着對它的支持的增加,將來可能會擴展它以提供更多功能

這對於在瀏覽器中運行的其他腳本語言意味着什么?

相反,后者仍然需要解釋Python。 假設有一個支持它的編譯器(鏈),那么不需要解釋器的腳本語言當然可以直接編譯為(w)asm。

asm.js代碼是否可以及時編譯並運行? 編譯成什么?

不同的瀏覽器以不同的方式編譯asm.js代碼。 截至2015年8月:

  • Firefox將asm.js編譯為機器代碼(並為以后的相同asm.js加載而緩存機器代碼)[ 1 ]。
  • 在Windows 10中,作為實驗性標志,Edge還將進行asm.js的提前驗證和編譯[ 2 ]。
  • Chrome會在asm.js的開頭特別識別“ use asm”指令,以便更急切地分析和分析代碼並調整編譯啟發式方法。
  • Safari沒有對asm.js進行特殊處理。

除了asm.js為文本和wasm(Web程序集)為二進制以外,兩者之間有什么區別?

asm.js只是JavaScript,因此必須嚴格按照JavaScript規范運行。 作為一種新標准,WebAssembly能夠解決JavaScript行為不理想的一些極端情況(從性能或編譯角度來看)[ 3 ]。 將來[ 4 ],WebAssembly將能夠添加原本很難用JavaScript表達的功能。

這對於在瀏覽器中運行的其他腳本語言意味着什么? 以python為例,它將是

  • python代碼編譯為wasm? 要么
  • python解釋器(Cpython)編譯成wasm並解釋python?

如您所說,在v.1中,在瀏覽器中運行Python的最簡單方法是將Python解釋器編譯為wasm。 這意味着,例如,Python GC正在wasm代碼中運行並手動管理wasm線性內存。 已經有一個實驗項目將asm.js后端添加到PyPy [ 5 ](對於wasm也可以工作)。 當前,它遇到了asm.js的局限性,可以通過wasm的動態鏈接未來功能來解決。 更進一步,wasm尋求同時提供GC集成JIT編譯支持 ,這將使與Web平台的集成更加高效自然。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM