Fizzy 0.2.0
Firstly, this release implements many validation steps prescribed by the specification, with the exception of type checking.
It passes a large part of the official test suite (spectest 1.0):
- 4481 of 4490 binary parser and execution tests,
- 659 of 942 validation tests,
- 6381 skipped due to containing floating-point instructions or testing text format parser.
Secondly, two major optimisations are included: branch resolution is done once in the parser and not during execution; and an optimised stack implementation is introduced.
In many cases this results in v0.2.0 executing code twice as fast compared to v0.1.0.
Added
- Introduced a Fizzy logo. #326 #344 #399
- API for resolving imported function names into function types. #318
- Validation of alignment argument in memory instructions. #310
- Validation of
br_table
instruction. #368 - Validation of constant expressions. #352 #393 #394 #397
- Validation of data section. #317
- Validation of element section. #350
- Validation of export section. #357
- Validation of
global.get
/global.set
instructions. #351 - Validation of
local.get
/local.set
/local.tee
instructions. #363 - Validation of stack height at the end of blocks and functions, at branch instructions, and after unreachable
instructions. #319 #356 #343 #384 #386 - Validation of start section. #353
fizzy-bench
now requires.inputs
files to include the signature of the called function. #331- Better unit tests coverage. #320 #335 #337 #346 #364 #378 #380
- CI improvements. #322 #330 #333 #342 #336 #348 #361
- Micro-benchmark for executing interpreter switch. #374 #396
Changed
- Exception error messages cleaned up. #315
fizzy-bench
now reports more useful error messages. #316- Operand stack optimizations. #247 #265 #339
- Optimization to resolve all jump destinations during parsing instead of having control stack in execution. #304 #312 #341 #373 #391
- Better execution time measurement in
fizzy-bench
. #383