An implementation of the Webassembly spec in Rust.
The structure of the project tries to follow the structure of the Spec where possible. Current progress:
- Stucture (crate
greenwasm-structure
): Typedefs for Wasm Types, Instructions and Modules. - Validation (crate
greenwasm-validation
): Validator for a Wasm Module. - Execution (crate
greenwasm-execution
): Naive Execution Engine for a Wasm Module. - Binary-Format (crate
greenwasm-binary-format
) parser for the.wasm
binary format. - Text-Format: Parser for the
.wat
text format.
The individual crates are reexported from the central greenwasm
crate,
which also ties them together with a testsuite and some fuzzer scripts.
In the current version this is mainly a learning exercise, but the long-term goals include:
- Modularity: It should be possible to use the parser/validator/typedefs independent from each other. This is already somewhat possible due to the split in different crates.
- Genericy: It should be possible to parse/validate independent from the underlying AST format.
- Performance: It should be usable for performance-oriented projects.
The greenwasm-spectest
crate contains a library shim around a mirror of the official Webasembly MVP testsuite.
It is used as a dev-dependency by the main greenwasm
crate,
but has no dependencies on other crates in this repo. As such, it can be used
as a independent testsuite launcher for other Webassembly implementations.
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.