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
- Text-Format: Parser for the
The individual crates are reexported from the central
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.
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
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.