Roadmap updated

This commit is contained in:
Volker Berlin 2020-03-08 12:18:31 +01:00
parent 5eed2c2e79
commit 2121984eea

View File

@ -1,5 +1,4 @@
JWebAssembly
======
# JWebAssembly
[![Build Status](https://travis-ci.org/i-net-software/JWebAssembly.svg)](https://travis-ci.org/i-net-software/JWebAssembly)
[![License](https://img.shields.io/github/license/i-net-software/jwebassembly.svg)](https://github.com/i-net-software/jwebassembly/blob/master/LICENSE.txt)
@ -11,23 +10,23 @@ As output it generates the binary format (.wasm file) or the text format (.wat f
The difference to similar projects is that not a complete VM with GC and memory management should be ported. It's more like a 1: 1 conversion. The generated WebAssembly code is similar in size to the original Java class files.
Documentation
----
## Documentation
The documentation can be found in the [wiki](https://github.com/i-net-software/JWebAssembly/wiki).
Status of the project
----
## Roadmap
The project is currently not production ready but you can run already some tests.
### Version 1.0 (Milestone 1)
#### Desired Features
* [x] Java byte code parser
* [x] test framework
* [x] Public API of the Compiler see [class JWebAssembly](src/de/inetsoftware/jwebassembly/JWebAssembly.java)
* [x] [Gradle Plugin](https://github.com/i-net-software/JWebAssembly-Gradle)
* [x] Binary format file writer and Text format file writer (195 of 201 Java byte code instructions)
* [x] [Emulator](https://github.com/i-net-software/JWebAssembly/wiki/Debugging)
* [x] Binary format file writer and Text format file writer
* [x] Support for native methods [#2](https://github.com/i-net-software/JWebAssembly/issues/2)
* [ ] Exception handling - required the next version of WebAssembly
* [ ] Multiple threads - required the next version of WebAssembly
* [x] Memory Management - currently with a polyfill on JavaScript side
* [x] invoke static method calls
* [x] invoke instance method calls
@ -35,12 +34,12 @@ The project is currently not production ready but you can run already some tests
* [ ] invoke dynamic method calls (lambdas)
* [x] invoke default method calls
* [x] String support
* [ ] Simple Class object support
* [ ] static constructors
* [x] Optimizer - Optimize the WASM output of a single method after transpiling before writing to output
* [ ] Library for accessing the DOM
* [x] Hello World sample [(live)](https://i-net-software.github.io/JWebAssembly/samples/HelloWorld/HelloWorld.html), [(source code)](https://github.com/i-net-software/JWebAssembly/blob/master/docs/samples/HelloWorld/HelloWorld.java)
### Status of Required WebAssembly Features
#### Status of Required WebAssembly Features
The following table shows the status of future WebAssembly features required by JWebAssembly in nightly builds in various implementations. These features are already used by the trunk version of JWebAssembly. If you want know the status of your current browser then look for [your browser support](https://wasm-feature-detect.surma.technology/).
| Feature | Importance | V8/Chrome | SpiderMonkey/FF | WABT |
@ -49,13 +48,8 @@ The following table shows the status of future WebAssembly features required by
| [float-to-int][2] | high | yes | yes | yes |
| [Sign-extension][3] | high | yes | yes | yes |
| [Reference Types][4] | high | yes | yes | yes |
| [JavaScript BigInt][5] | medium | yes | - | yes |
| [JavaScript BigInt][5] | medium | yes | yes | yes |
| ~~[Multi-value][6]~~ | medium | yes | - | yes |
| [Garbage collection][7] | medium | - | [partly][11] | - |
| [Exceptions][8] | low | partly | - | partly |
| [Threads][9] | low | yes | ? | yes |
| [Tail call][10] | very low | yes | ? | yes |
- For V8 it based on the [V8 - node.js integrations builds](https://ci.chromium.org/p/v8/builders/luci.v8.ci/V8%20Linux64%20-%20node.js%20integration).
- For SpiderMonkey it based on the nightly build of [jsshell](https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central/).
@ -65,6 +59,30 @@ To use it also some flags and switches are currently needed.
Importance: All with high marked features are required for a hello word sample. For a first version that can be used for production.
### Version 2.0 (Milestone 2)
#### Desired Features
* [ ] Full featured [library for accessing the DOM](https://github.com/i-net-software/JWebAssembly-API/tree/master/src/de/inetsoftware/jwebassembly/web).
### Version 3.0 (Milestone 3)
#### Desired Features
* [ ] Exception handling - required the next version of WebAssembly
* [ ] Multiple threads - required the next version of WebAssembly
* [ ] Memory Management with build in GC without JavaScript polyfill
* [ ] More Optimize like Tail Calls
#### Status of Required WebAssembly Features
| Feature | Importance | V8/Chrome | SpiderMonkey/FF | WABT |
| ----------------------- |----------- | --------- | --------------- | ------ |
| [Garbage collection][7] | medium | - | [partly][11] | - |
| [Exceptions][8] | low | partly | - | partly |
| [Threads][9] | low | yes | ? | yes |
| [Tail call][10] | very low | yes | ? | yes |
Required Java Version
----
The JWebAssembly compiler requires Java SE 8 or higher. It is tested with Java SE 8 on [travis-ci.org](https://travis-ci.org/i-net-software/jwebassembly).
@ -102,7 +120,7 @@ In version 1 of WebAssembly you can only compile:
* static methods
* use the data types int, long float and double
This is state of JWebAssembly 0.1.
This is state of JWebAssembly 0.1. With version 0.2 you can use Objects via JavaScript polyfill.
### Alternatives
* [TeaVM](https://github.com/konsoletyper/teavm)