WasmLean
A formalisation of the semantics of WebAssembly in Lean.
This is currently intended to be used in the target of a C0 (C subset) compiler also written in Lean. Hence, efforts here will mostly reflect parts of WASM that are useful there (i.e. Vector and Float related instructions may lag behind the rest of the project).
Usage
Currently only WASM (binary files) can be converted into WAT (wasm text format). Although, no checks will be performed beyond parsing (i.e. no typechecking, etc.).
First, use lake build
to compile the project.
Then you can run the following:
bin/wasm file.wasm
bin/wasm --output file.wat file.wasm
The first line will print the corresponding WAT program to the terminal. The
second writes it to the file file.wat
. If any error occurs an error message
will be printed (for both commands).
You can also specify what you are emitting:
bin/wasm --output file.wat --emit wat file.wasm
Project Organisation/Structure
Files are generally organised into a similar layout as defined by the WASM spec:
- Syntax corresponds to Structure
- Validation corresponds to Validation
- Dynamics corresponds to Execution
- Binary corresponds to Binary Format
- Text corresponds to Text Format
The most notably deviation to this is that the WASM definition of integers is defined in the Numbers library.
Progress/Todo
Vectors are not implemented or represented. Instructions for floats are represented, but the implementation of floats isn't yet.
- Syntax/Structure
- Values
- Types
- Instructions
- Modules
- Statics/Validation
- Types
- Instructions
- Modules
- Type-checker
- Dynamics/Execution
- Runtime Structure
- Numerics
- Integer Operations
- Floating-point Operations
- Conversions
- Instructions
- Numeric
- Floating-point
- All other numerics
- Reference
- Vector
- Parametric
- Variable
- Table
- Memory
- Blocks
- Function Calls
- Expressions
- Numeric
- Modules
- External Typing
- Value Typing
- Allocation
- Instantiation
- Invocation
- Intepreter
- Formats
- Binary
- Text
- Parsing
- Printing
- Validation/Transformation