A pluggable virtual machine for constrained environments.
Fuste is a programmability adapter and virtual machine stack designed for integration with Robles, Ramate's implementation of BFA protocols.
Note
Currently, Fuste implements only the RV32I ISA. Since Fuste is intended as a programmability stack and does not ultimately have general opinions about the ISA, we may choose to implement other ISAs as Fuste virtual machines in the future.
Tip
You can shortcut these steps by cloning this repository, cd into fuste/tests/toolchain, and nix develop.
NOTE: Depending on your system you may still need to build fubox beforehand.
- Review the programs in the
tests/toolchainworkspace before you begin writing your own. - Ensure you have built
fuboxand that is available on yourPATH. - Configure a workspace with the desired
env/fustecrates. - Configure the toolchain similar to
tests/toolchain. You can change the memory layout in the linker script if you like. - Write your program:
#![no_std]
#![no_main]
use fuste::println;
pub fn add(a: u32, b: u32) -> u32 {
a + b
}
fuste::entry! {
fn main() -> Result<(), ()> {
let mut j = 0;
for i in 0..10 {
assert_eq!(i, i);
j += i;
j = add(j, i);
println!("Hello, world!");
println!("i: {}, j: {}", i, j);
}
Ok(())
}
}- Run!
cargo run --target riscv32i-ramate-fuste-elf.json -p my-fuste-programenv/fuste provides the following:
fuste-ecallfor defining basicecallinterrupt APIs with an implementing machine.fuste-exitfor defining program termination interrupts.fuste-writefor making one-way writes to a system.println!is implemented usingfuste-write.fuste-channelfor opening a kernel channel with a stack-allocated buffer. Network requests are implemented usingfuste-channel.fusteincludes all of the above for those who want a complete stack-based set of symbols.fuste-gallocdefines a global heap allocator for those interested in writing heap programs. It is not infustebecause--owing to the highly constrained targets for the virtual machine--purely stack-based programs are preferred.
fubox currently implements a debugging form of the fuste environment.
my-program: a program for thefustetarget without any of thefustepreludemy-fuste-program: a simple program using thefusteprelude.my-fuste-heap-program: a program using thefustegallocdynamic memory allocator.my-fuste-dlt-program: a program using thefusteDLT primitives.
| Task | Description |
|---|---|
| Upcoming Events | High-priority event issues with planned completion dates. |
| Release Candidates | Feature-complete versions linked to events. |
| Features & Bugs | High-priority feature and bug issues. |