AIR beautifier may output virtual `hopon` instruction based on specific pattern generated by the Aqua compiler.
The `air_beatifier::beatify` function has now an extra argument that determines if to perform the virtual instruction detection, giving more readable output.
The `air-beautify-wasm` crate has behavior of the `beautify` function changed: the functions now extracts virtual instructions, so it is a drop-in replacement for previous version with new functionality. New exported function `beautify_raw` is added, that doesn't look for virtual instructions' patterns, formatting the code as is.
* chore: release master
* chore: Bump air-interpreter and air-near-contract version to 0.56.0
* temporary disable risc-0
* remove the risc-0 part from the release-please at all
---------
Co-authored-by: Mike Voronov <michail.vms@gmail.com>
Instead of being boxed for each node, the `Instruction` type contains a boxed variable-size elements. Thus `Instruction` is quite lean, and the allocator deals with variable-sized elements.
Total number of allocations is more or less same, but less space is wasted for unused memory: previously the Instruction's size was 112 bytes in WASM, now it is 16.
It reduces memory consumption on large AIR scripts (heap size decreased from 7.7MiB to 4.625MiB in parser-10000-100, and for the new parser-calls-10000-100 benchmark, it decreased from 5.115MiB to 4.375MiB).
This is a breaking change as the API changes (though the code that navigates the parsed tree generally should work as is).
* feat(execution-engine)!: canon stream map support [fixes VM-301]
Canon stream map is a CRDT-like map structure that contains a
canonicalized stream map and allows indexed access to its
contents. ATM CSM supports both strings and int64 keys.
* chore: release master
* chore: Bump air-interpreter version to 0.40.0
* feat(aquavm-air): Set minimal supported version to 0.40.0
---------
Co-authored-by: Ivan Boldyrev <ivan@fluence.one>
* feat(tools): merge some tools into the `air` CLI tool
`air-beautify` and `air-trace` are merged into a single `air` tool. Its
crate name is `fluence-air-cli` as otherwise it confilicts with `air`
interpreter crate. The tool has subcommands `beautify`, `run`
and `stats`.
* Add one-letter aliases to `air` CLI subcommands
+ `air beautify` => `air b`
+ `air run` => `air r`
+ `air stats` => `air s`
---------
Co-authored-by: Mike Voronov <michail.vms@gmail.com>
This PR intended to reduce stream usage scope in order to make AquaVM truly deterministic.
Refs: #297.
Co-authored-by: Ivan Boldyrev <ivan@fluence.one>
Co-authored-by: Anatoly Laskaris <github_me@nahsi.dev>