From eb5cc04a09b55e3e02df39f2e9e32d67c95ac038 Mon Sep 17 00:00:00 2001 From: JF Bastien Date: Wed, 29 Apr 2015 16:48:32 -0700 Subject: [PATCH 1/5] Edit high level goals based on recent discussions. --- HighLevelGoals.md | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/HighLevelGoals.md b/HighLevelGoals.md index cbbf806f..5a750cc9 100644 --- a/HighLevelGoals.md +++ b/HighLevelGoals.md @@ -1,16 +1,33 @@ # 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. +2. Expose a format which can be compiled to execute at native speed and take + full advantage of a CPU's capabilities. +3. Define a human-editable text format that is isomorphic and convertible + to/from the binary format. +4. Support compiling various programming languages to the WebAssembly format. +5. Design to maintain the versionless, feature-testing and backwards-compatible + evolution story of the web; engines should not need multiple, versioned + decoders. +6. Design and implement incrementally: + * v.1 will allow an effective (load-time and performance) [polyfill][] via + client-side compilation to [asm.js][]. It will be a Minimum Viable + Product: basically what you can do with [asm.js][]. + * Subsequent versions will expose further features, prioritized based on + developer feedback, such as: + - Concurrency and parallelism through threads and SIMD. + - Dynamic loading. + - Finer-grained control on memory managment. + - Zero-cost exception handling. + - Garbage collection. +7. 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. -7. Design to allow execution in non-browser environments. - + * enforce the same-origin and permissions security policies; and + * access browser functionality through the same Web APIs that are accessible + to JavaScript. +8. Design to allow execution in non-browser environments. + [polyfill]: https://github.com/WebAssembly/polyfill + [asm.js]: http://asmjs.org From 6ddd71c04d9ca950edc5eb73445f03b5763bbe31 Mon Sep 17 00:00:00 2001 From: JF Bastien Date: Wed, 29 Apr 2015 17:06:30 -0700 Subject: [PATCH 2/5] Only fitting that my manager would find a typo in the work 'management'. --- HighLevelGoals.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HighLevelGoals.md b/HighLevelGoals.md index 5a750cc9..18ecab3e 100644 --- a/HighLevelGoals.md +++ b/HighLevelGoals.md @@ -18,7 +18,7 @@ developer feedback, such as: - Concurrency and parallelism through threads and SIMD. - Dynamic loading. - - Finer-grained control on memory managment. + - Finer-grained control on memory management. - Zero-cost exception handling. - Garbage collection. 7. Design to integrate well with the existing web platform: From c539673e4ed7ba8dcb751f42ba6c55983792ac59 Mon Sep 17 00:00:00 2001 From: JF Bastien Date: Wed, 29 Apr 2015 20:07:32 -0700 Subject: [PATCH 3/5] Fold speed into the first point. --- HighLevelGoals.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/HighLevelGoals.md b/HighLevelGoals.md index 18ecab3e..bc363815 100644 --- a/HighLevelGoals.md +++ b/HighLevelGoals.md @@ -1,16 +1,15 @@ # WebAssembly High-Level Goals 1. Define a portable, size- and load-time-efficient binary format to serve as a - web compilation target. -2. Expose a format which can be compiled to execute at native speed and take - full advantage of a CPU's capabilities. -3. Define a human-editable text format that is isomorphic and convertible + 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. -4. Support compiling various programming languages to the WebAssembly format. -5. Design to maintain the versionless, feature-testing and backwards-compatible +3. Support compiling various programming languages to the WebAssembly format. +4. Design to maintain the versionless, feature-testing and backwards-compatible evolution story of the web; engines should not need multiple, versioned decoders. -6. Design and implement incrementally: +5. Design and implement incrementally: * v.1 will allow an effective (load-time and performance) [polyfill][] via client-side compilation to [asm.js][]. It will be a Minimum Viable Product: basically what you can do with [asm.js][]. @@ -21,13 +20,13 @@ - Finer-grained control on memory management. - Zero-cost exception handling. - Garbage collection. -7. Design to integrate well with the existing web platform: +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 and permissions security policies; and * access browser functionality through the same Web APIs that are accessible to JavaScript. -8. Design to allow execution in non-browser environments. +7. Design to allow execution in non-browser environments. [polyfill]: https://github.com/WebAssembly/polyfill [asm.js]: http://asmjs.org From db8c97ddc7d56b7baa5699c23cd46c0dbb18645e Mon Sep 17 00:00:00 2001 From: JF Bastien Date: Wed, 29 Apr 2015 20:09:33 -0700 Subject: [PATCH 4/5] Rework the programming languages bullet. I shortened from luke's suggestion and didn't mention GC. --- HighLevelGoals.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/HighLevelGoals.md b/HighLevelGoals.md index bc363815..687ab30c 100644 --- a/HighLevelGoals.md +++ b/HighLevelGoals.md @@ -5,7 +5,8 @@ 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. Support compiling various programming languages to the WebAssembly 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. From e3cbf4bea1b12b6d839acc18e45672b50660018e Mon Sep 17 00:00:00 2001 From: JF Bastien Date: Wed, 29 Apr 2015 20:31:01 -0700 Subject: [PATCH 5/5] Split upcoming features into its own file, and add to it. Add .gitignore file. --- .gitignore | 1 + HighLevelGoals.md | 16 +++++----------- UpcomingFeatures.md | 22 ++++++++++++++++++++++ 3 files changed, 28 insertions(+), 11 deletions(-) create mode 100644 .gitignore create mode 100644 UpcomingFeatures.md 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 687ab30c..dc0d543e 100644 --- a/HighLevelGoals.md +++ b/HighLevelGoals.md @@ -10,17 +10,10 @@ 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: - * v.1 will allow an effective (load-time and performance) [polyfill][] via - client-side compilation to [asm.js][]. It will be a Minimum Viable - Product: basically what you can do with [asm.js][]. - * Subsequent versions will expose further features, prioritized based on - developer feedback, such as: - - Concurrency and parallelism through threads and SIMD. - - Dynamic loading. - - Finer-grained control on memory management. - - Zero-cost exception handling. - - Garbage collection. +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; @@ -31,3 +24,4 @@ [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