blob: 14e232d9c0438d71af4721511947081b2d5867c6 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# WebAssembly High-Level Goals
1. Define a [portable](Portability.md), size- and load-time-efficient
[binary format](MVP.md#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](https://en.wikipedia.org/wiki/Mobile_device) and
[IoT](https://en.wikipedia.org/wiki/Internet_of_Things).
2. Specify and implement incrementally:
* a [Minimum Viable Product (MVP)](MVP.md) for the standard with
roughly the same functionality as [asm.js](http://asmjs.org), primarily
aimed at [C/C++](CAndC++.md);
* an effective and efficient [polyfill](Polyfill.md) 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](PostMVP.md) which adds several more
essential features; and
* [additional features](FutureFeatures.md), specified iteratively and
prioritized by feedback and experience, including support for languages
other than C/C++.
3. Design to execute within and integrate well with the *existing*
[Web platform](Web.md):
* maintain the versionless, [feature-tested](FeatureTest.md) and
[backwards-compatible](BinaryEncoding.md#backwards-compatibility)
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.
4. Design to support [non-browser embeddings](NonWeb.md) as well.
5. Make a great platform:
* build a new LLVM backend for WebAssembly and an accompanying
clang port;
* promote other compilers and tools targeting WebAssembly; and
* enable other useful [tooling](Tooling.md).
|