diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..b25c15b8 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*~ diff --git a/HighLevelGoals.md b/HighLevelGoals.md index cbbf806f..dc0d543e 100644 --- a/HighLevelGoals.md +++ b/HighLevelGoals.md @@ -1,16 +1,27 @@ # WebAssembly High-Level Goals -1. Define a portable, size- and load-time-efficient binary format to serve as a web compilation target. -2. Define a human-editable text format that is isomorphic and convertible to/from the binary format. -3. Design v.1 to allow an effective (load-time and performance) [polyfill](https://github.com/WebAssembly/polyfill) via client-side compilation to [asm.js](http://asmjs.org). -4. Design v.1 as a Minimum Viable Product: basically what you can do with [asm.js](http://asmjs.org). -5. Design to integrate well with the existing web platform: +1. Define a portable, size- and load-time-efficient binary format to serve as a + web compilation target which can be compiled to execute at native speed and + take full advantage of a CPU's capabilities. +2. Define a human-editable text format that is isomorphic and convertible + to/from the binary format. +3. Design to serve as a compilation target for a growing set of source languages + over time, starting with C/C++. +4. Design to maintain the versionless, feature-testing and backwards-compatible + evolution story of the web; engines should not need multiple, versioned + decoders. +5. Design and implement incrementally: the initial version will be a Minimum + Viable Product by being an effective [polyfill][] via client-side compilation + to [asm.js][], with a feature set similar to [asm.js][]'s current + features. Subsequent versions will be more [featureful][]. +6. Design to integrate well with the existing web platform: * execute in the same semantic universe as JavaScript; * allow synchronous calls to and from JavaScript; - * enforce the same-origin security policy; and - * access browser functionality through the same Web APIs that are accessible to JavaScript. -6. Design to maintain the versionless, feature-testing and backwards-compatible evolution story - of the web; engines should not need multiple, versioned decoders. + * enforce the same-origin and permissions security policies; and + * access browser functionality through the same Web APIs that are accessible + to JavaScript. 7. Design to allow execution in non-browser environments. - + [polyfill]: https://github.com/WebAssembly/polyfill + [asm.js]: http://asmjs.org + [featureful]: https://github.com/WebAssembly/spec/blob/master/UpcomingFeatures.md diff --git a/UpcomingFeatures.md b/UpcomingFeatures.md new file mode 100644 index 00000000..4590f9fd --- /dev/null +++ b/UpcomingFeatures.md @@ -0,0 +1,22 @@ +# Upcoming Features + +Subsequent versions will expose further features which expand upon the +[high-level goals][], prioritized based on developer feedback, such as: + +* Concurrency and parallelism through threads and SIMD. +* Dynamic loading. +* Platform-independent Just-in-Time compilation, potentially through dynamic + loading. +* Finer-grained control on memory management. +* Zero-cost exception handling. +* Stack unwinding. +* Garbage collection. +* Signal handling. +* Proper tail-calls. +* Irreducible control flow. +* Extra math which may not work the same on all platforms: + - Fused multiply-add. + - Reciprocal square-root approximate. + - 16-bit floating-point values. + +[high-level goals]: https://github.com/WebAssembly/spec/blob/master/HighLevelGoals.md