Skip to content

Commit

Permalink
Merge pull request ewasm#2 from WebAssembly/high-level-goals-2
Browse files Browse the repository at this point in the history
Update high-level goals, and add post-v1 features.
  • Loading branch information
jfbastien committed Apr 30, 2015
2 parents 16687d3 + b289380 commit 878f114
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 14 deletions.
38 changes: 34 additions & 4 deletions EssentialPostV1Features.md
Original file line number Diff line number Diff line change
@@ -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.
31 changes: 21 additions & 10 deletions HighLevelGoals.md
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 878f114

Please sign in to comment.