pywasm
pywasm copied to clipboard
A WebAssembly interpreter written in pure Python
pywasm: A WebAssembly interpreter written in pure Python.
A WebAssembly interpreter written in pure Python.
The wasm version currently in use is: WebAssembly Core Specification, W3C Recommendation, 5 December 2019. Just like Firefox or Chrome does.
Installation
$ pip3 install pywasm
Some simple examples
-
First we need a wasm module! Grab our
./examples/fib.wasmfile and save a copy in a new directory on your local machine. Note:fib.wasmwas compiled from./examples/fib.cby WasmFiddle. -
Now, compile and instantiate WebAssembly modules directly from underlying sources. This is achieved using the
pywasm.loadmethod.
import pywasm
# pywasm.on_debug()
runtime = pywasm.load('./examples/fib.wasm')
r = runtime.exec('fib', [10])
print(r) # 55
A brief description for ./examples
| File | Description |
|---|---|
| ./examples/add.wasm | Export i32.add function |
| ./examples/env.wasm | Call python/native function in wasm |
| ./examples/fib.wasm | Fibonacci, which contains loop and recursion |
| ./examples/str.wasm | Export a function which returns string |
| ./examples/sum.wasm | Equal difference series summation |
Of course there are some more complicated examples!
- Zstandard decompression algorithm: https://github.com/dholth/zstdpy
- Run AssemblyScript on pywasm: https://github.com/mohanson/pywasm_assemblyscript
Test
$ python3 ./test/test_spec.py
Tested in the following environments:
- Python >= 3.6
Thanks
License
MIT