As discussed previously, Seax consists of three primary components. These three components are broken into separate software packages ('crates' in Rust parlance) in order to promote modularity and to permit the various components of Seax to be used independantly of one another.
The seax_svm
crate contains the Seax virtual machine. This includes code for representing a VM state and evaluating instructions, representations of SVM data types and instructions, and a singly linked list implementation.
The seax_scheme
crate contains the Seax Scheme compiler. It includes the Scheme parser, abstract syntax tree implementation for representing and compiling programs, and an implementation of the ForkTable data structure for internally representing scoped bindings.
Finally, the seax
crate contains the Seax command-line driver application. This contains very little code related to Scheme or to the virtual machine, and is simply responsible for parsing command-line instructions, reading source code files, and dispatching to the correct library functions from the compiler and virtual machine crates. The seax
application contains functionality for interpreting Scheme source code files and a read-evaluate-print loop (REPL) for interactive programming. In the future, it will also include functionality for compiling Scheme programs to bytecode files, and executing Seax bytecode programs.