Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This pull-request adds a bytecode compiler and a virtual machine.
SATySFi interpreter is slow(see #63). This bytecode compiler improves an evaluation performance.
For example, it takes about 90 minutes to make a pdf of pi on my laptop by
the interpreter. By using the bytecode compiler, it only takes about 4 minutes.
The bytecode compiler can coexist with interpreter. You can use it by adding --bytecomp command line option.
To build the virtual machine, a Ruby script 'gen_code.rb' is used. This script reads 'src/frontend/bytecomp/vminstdef.yaml' and generates OCaml codes.
'vminstdef.yaml' is written in YAML format and contains instruction & primitive definitions. This mechanism makes it easier to add a new VM instruction or primtive. But now, interpreter and virtual machine are not share the code. Therefore you have to update both an interpreter and a virtual machine if you modify evaluator or add a new primitive.