HyphaeVM Garbage Collection
All checks were successful
per-push tests / build (push) Successful in 36s
per-push tests / test-utility (push) Successful in 36s
per-push tests / test-frontend (push) Successful in 37s
per-push tests / test-backend (push) Successful in 31s
per-push tests / timed-decomposer-parse (push) Successful in 34s

This commit removes the dependency upon Mycelium::sexpr::Datum from Hyphae
and instead adds a heap.rs module including three types:

- Gc: This is essentially a Box<Rc<T>> but passed around as a *const Rc<T>.
    not only does this allow the wrapped T to be passed around in a format
    that fits completely within a single physical register, this also
    applies a greedy reference counting garbage collection to each and
    every object allocated in the VM.

- Datum: This is a simplified enum for type polymorphism. Similar to the
    original Mycelium::sexpr::Datum.

- Cons: This is a very standard Cons cell type.

Additionally, two new instructions are added:
- DUPL: a deep copy instruction
- CONST: an instruction to create number datum from embedded constants
- NTOI: casts a number to its inexact form
- NTOE: casts a number to its exact form

Fixes: #35 and #36

Signed-off-by: Ava Affine <ava@sunnypup.io>
This commit is contained in:
Ava Apples Affine 2025-07-26 01:13:13 +00:00
parent 8d2d0ebf0c
commit cf626b2bfc
7 changed files with 324 additions and 295 deletions

View file

@ -73,6 +73,12 @@ pub enum Number {
Sym(SymbolicNumber)
}
impl Default for Number {
fn default() -> Self {
Number::Fra(Fraction(0, 1))
}
}
impl From<SymbolicNumber> for Number {
fn from(value: SymbolicNumber) -> Self {
Number::Sym(value)