Bytecode VM, dynamic number package, and R7RS compliant Scheme implementation.
Find a file
Ava Affine 3a0a141738 QuickMap and CI
This commit adds a new datatype: the quickmap. It provides an extremely
fast but relatively high collision string hash to whatever key hashmap.

This is optimized purely for variable names, and is intended to use for
variable name lookup during (eval ...) or (string->symbol ...) if I must
implement that.

The hashmap is bucketed, with a set number of buckets (199 in this case).
Each bucket is preallocated at initialization containing an empty vector.
There will only ever be one of these initialized as it is only to contain
globally accessible names.

The interface provides new, get, remove, contains_key, insert, and an
iterator implementation.

Unit tests are included and CI is updated.

Signed-off-by: Ava Affine <ava@sunnypup.io>
2025-06-10 14:16:38 -07:00
decomposer Decomposer: fixes from found code 2025-05-21 14:48:36 -07:00
mycelium QuickMap and CI 2025-06-10 14:16:38 -07:00
.gitignore Lexer and S-Expression data types 2025-05-07 09:19:33 -07:00
.gitlab-ci.yml QuickMap and CI 2025-06-10 14:16:38 -07:00
Cargo.lock StackStack and CI Updates 2025-05-28 11:54:40 -07:00
Cargo.toml Decomposer: fixes from found code 2025-05-21 14:48:36 -07:00
LICENSE Lexer and S-Expression data types 2025-05-07 09:19:33 -07:00
readme.md Readme and early CI 2025-05-21 15:10:44 -07:00

Mycelium

Mycelium aims to provide an efficient compiled to intermediate bytecode implementation of R7RS Scheme as well as a virtual machine that will execute such bytecode.

Two major use cases are at the forefront of mind when designing and implementing this project: a POSIX shell interpreter as well as a compiled to bytecode language for running on ESP32 devices.

Current Status

Currently the lexer and parser are implemented. On an X86 machine equipped with 64GB RAM and an AMD Ryzen 7900 CPU this lexer and parser are capable of creating a fully validated abstract syntax tree from approximately 11200 lines of handwritten scheme in about 55 milliseconds on average.

Currently the bytecode VM and its instruction set are next to implement.