All of V8, JavaScriptCore, and SpiderMonkey have found themselves unable to honor the ECMAScript 2015 requirement that for (var x = 0 in []); is a SyntaxError (which is documented in Annex E 13.7).
a new binary syntax for low-level safe code, initially co-expressive with asm.js, but in the long run able to diverge from JS’s semantics, in order to best serve as common object-level format for multiple source-level programming languages.
The wasm AST is designed to be encoded in a size- and load-time-efficient binary format. WebAssembly aims to execute at native speed by taking advantage of common hardware capabilities available on a wide range of platforms.
WebAssembly is safe
WebAssembly describes a memory-safe, sandboxed execution environment that may even be implemented inside existing JavaScript virtual machines. When embedded in the web, WebAssembly will enforce the same-origin and permissions security policies of the browser.
WebAssembly is open and debuggable
WebAssembly is designed to be pretty-printed in a textual format for debugging, testing, experimenting, optimizing, learning, teaching, and writing programs by hand. The textual format will be used when viewing the source of wasm modules on the web.
WebAssembly is part of the open web platform
WebAssembly is designed to maintain the versionless, feature-tested, and backwards-compatible nature of the web. WebAssembly modules will be able to call into and out of the JavaScript context and access browser functionality through the same Web APIs accessible from JavaScript. WebAssembly also supports non-web embeddings.
High-Level Goals
Define a portable, size- and load-time-efficient binary format to serve as a compilation target which can be compiled to execute at native speed by taking advantage of common hardware capabilities available on a wide range of platforms, including mobile and IoT.
High-Level Goals
Specify and implement incrementally:
a Minimum Viable Product (MVP) for the standard with roughly the same functionality as asm.js, primarily aimed at C/C++;
an effective and efficient polyfill library for the MVP that translates WebAssembly code into JavaScript in the client so that WebAssembly MVP can run on existing browsers;
a follow-up to the MVP which adds several more essential features; and
additional features, specified iteratively and prioritized by feedback and experience, including support for languages other than C/C++.
High-Level Goals
Design to execute within and integrate well with the existing Web platform:
maintain the versionless, feature-tested and backwards-compatible evolution story of the Web;
execute in the same semantic universe as JavaScript;
allow synchronous calls to and from JavaScript;
enforce the same-origin and permissions security policies;
access browser functionality through the same Web APIs that are accessible to JavaScript; and
define a human-editable text format that is convertible to and from the binary format, supporting View Source functionality.
High-Level Goals
Design to support non-browser embeddings as well.
High-Level Goals
Make a great platform:
build a new LLVM backend for WebAssembly and an accompanying clang port;
promote other compilers and tools targeting WebAssembly;
enable other useful tooling.
MVP
Modules
Code in a module is specified in terms of an AST
Binary format
Text format
Compatibility with browsers as well as with other environments