From b28938050bfd04a493860a00c5c0498179f4228f Mon Sep 17 00:00:00 2001 From: JF Bastien Date: Thu, 30 Apr 2015 09:21:46 -0700 Subject: [PATCH] Update high-level goals, and add post-v1 features. --- EssentialPostV1Features.md | 38 ++++++++++++++++++++++++++++++++++---- HighLevelGoals.md | 31 +++++++++++++++++++++---------- 2 files changed, 55 insertions(+), 14 deletions(-) diff --git a/EssentialPostV1Features.md b/EssentialPostV1Features.md index f2f6b623..d8b8468e 100644 --- a/EssentialPostV1Features.md +++ b/EssentialPostV1Features.md @@ -1,21 +1,51 @@ # Essential Post-v.1 Features This is a list of essential features we *know* we need but were not part of the -Minimum Viable Product that is [v.1](V1.md). +Minimum Viable Product that is [v.1](V1.md). These will be developed following +the [high-level goals](HighLevelGoals.md), and prioritized based on developer +feedback. + *This is just a skeleton list to start a discussion* +## 64-bit integers +* TODO + ## Threads +* Atomics +* Futex or [synchronic][] +* Thread-local storage + + [synchronic]: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4195.pdf + +## Fixed-width SIMD * TODO -## Zero-cost Exception Handling +## Dynamic loading * TODO -## 64-bit integers +## Platform-independent Just-in-Time compilatione * TODO +* Potentially through dynamic loading. + +## Fine-grained memory management +* Shared memory +* `mmap`/`munmap`/`madvise` + +## Zero-cost Exception Handling +* Developer access to stack unwinding and inspection. -## Fixed-width SIMD a la SIMD.js +## Garbage collection * TODO ## Signature-restricted Proper Tail Calls * TODO + +## Irreducible control flow +* TODO + +## Extra math +The following features may not work the same on all platforms: +* Fused multiply-add. +* Reciprocal square-root approximate. +* 16-bit floating-point values. diff --git a/HighLevelGoals.md b/HighLevelGoals.md index cbbf806f..692cf0af 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](EssentialPostV1Features.md). +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