aboutsummaryrefslogtreecommitdiff
path: root/HighLevelGoals.md
blob: 9e7359d22e6360ef936b5d8b275ffe53fa947a95 (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
39
# 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);
    * [additional features :unicorn:][future general],
      initially focused on key features like [threads][future threads],
      [zero cost exceptions][future exceptions], and [SIMD][future simd],
      followed by additional features
      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 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 ([why LLVM first?](FAQ.md#which-compilers-can-i-use-to-build-webassembly-programs));
    * promote other compilers and tools targeting WebAssembly; and
    * enable other useful [tooling](Tooling.md).

[future general]: FutureFeatures.md
[future threads]: https://github.com/WebAssembly/design/issues/1073
[future simd]: https://github.com/WebAssembly/design/issues/1075
[future exceptions]: https://github.com/WebAssembly/design/issues/1078