Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

asm.js 与 WebAssembly #195

Open
teazean opened this issue Dec 21, 2017 · 2 comments
Open

asm.js 与 WebAssembly #195

teazean opened this issue Dec 21, 2017 · 2 comments

Comments

@teazean
Copy link
Owner

teazean commented Dec 21, 2017

asm.js 是 2012 年提出的一个『javascript 子集』的标准,允许其他语言进行转换 asm.js 格式,用来做 low-level-assemble-like 的运算。

2016 年新提出 WebAssembly 的标准,其实是一种能在 js 引擎中直接运行的二进制格式(具体的 format 待研究),允许其语言也编译成 WebAssembly 的格式,WebAssembly 也提供可阅读的文本格式。

asm.js 和 WebAssembly 虽然标准不同,但是很多都是想通的,也有工具使得他们可以相互转换的。

Web 平台可以分为两部分:mdn

  1. 运行页面代码的虚拟机。

    A virtual machine (VM) that runs the Web app’s code, e.g. the JavaScript code that powers your apps.

  2. 控制浏览器、设备等的接口。

    A set of Web APIs that the Web app can call to control web browser/device functionality and make things happen (DOM, CSSOM, WebGL, IndexedDB, Web Audio API, etc.).

asm.js 和 WebAssembly 都是运行在 VM 的代码,是无法调用任何 Web API 的,但 asm.js/WebAssembly 都提供了与 js 互相注入、调用的方式,可以 js 中完成对 Web API 的调用。

@teazean teazean added the todo label Dec 21, 2017
@teazean
Copy link
Owner Author

teazean commented May 8, 2018

asm.js 高效的原因:

  1. asm.js 只提供『32位带符号整数』和『64位带符号浮点数』,省去了类型检查。
  2. asm.js 没有垃圾回收机制,所有内存操作都由程序员自己控制。asm.js 通过 TypedArray 直接读写内存。

其他资料:

@teazean teazean changed the title asm.js研究 asm.js 与 WebAssembly May 8, 2018
@teazean
Copy link
Owner Author

teazean commented May 8, 2018

emscripten 编译器 与 asm.js

http://kripken.github.io/emscripten-site/docs/introducing_emscripten/about_emscripten.html
image

  1. emscripten 是一个开源的 llvm 到 javascript 的编译器。
  2. emscripten 提供了许多能在 c/c++ 里面使用的能力,并且能够转成 asm.js。doc

    Code Portability and Limitations
    Emscripten Runtime Environment
    Connecting C++ and JavaScript
    Files and File Systems
    Multimedia and Graphics
    Audio
    Debugging
    Pthreads support
    Porting SIMD code
    Asyncify
    Emterpreter
    Building Projects

  3. emscripten 提供了一些库用于 asm.js 与 javascript 相互注入、调用。doc

demos

@teazean teazean removed the todo label May 8, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant