84 releases (6 breaking)
new 0.7.4 | Dec 4, 2024 |
---|---|
0.7.2 | Nov 27, 2024 |
0.5.1 | Jul 15, 2024 |
0.3.23 | Mar 31, 2024 |
0.2.0 | Oct 17, 2023 |
#612 in Memory management
2,353 downloads per month
Used in 23 crates
(14 directly)
51KB
1.5K
SLoC
Stak Scheme
The no-std
and no-alloc
R7RS Scheme implementation in Rust
The documentation is here.
License
lib.rs
:
A virtual machine and its runtime values.
Examples
use stak_device::FixedBufferDevice;
use stak_file::VoidFileSystem;
use stak_macro::compile_r7rs;
use stak_process_context::VoidProcessContext;
use stak_r7rs::SmallPrimitiveSet;
use stak_time::VoidClock;
use stak_vm::Vm;
const HEAP_SIZE: usize = 1 << 16;
const BUFFER_SIZE: usize = 1 << 10;
let mut heap = [Default::default(); HEAP_SIZE];
let device = FixedBufferDevice::<BUFFER_SIZE, 0>::new(&[]);
let mut vm = Vm::new(
&mut heap,
SmallPrimitiveSet::new(
device,
VoidFileSystem::new(),
VoidProcessContext::new(),
VoidClock::new(),
),
).unwrap();
const PROGRAM: &[u8] = compile_r7rs!(r#"
(import (scheme write))
(display "Hello, world!")
"#);
vm.initialize(PROGRAM.iter().copied()).unwrap();
vm.run().unwrap();
assert_eq!(vm.primitive_set().device().output(), b"Hello, world!");