1 个不稳定版本
0.1.0 | 2023年1月20日 |
---|
#75 在 #de
3KB
这是什么?
这是一个 derive 宏,用于将您自己的枚举类型序列化和反序列化为字节码,主要用于构建虚拟机。
为什么?
将具有数百个变体的枚举类型转换为字节码并返回并不有趣。这个crate旨在通过一种相当有偏见的布局来自动化这个任务,使您能够专注于VM的指令,而不是它在内存中的布局。
用法
// The instructions our VM can handle
pub enum Instruction {
// Unit variants
Nop,
// Tuple variants
Jmp(usize),
// Struct variants
Add {
a: usize,
b: usize,
store_in: usize,
},
//Supports most `std` types
Etc(u8, i16, f32, usize, Option<char>, bool),
// Variable-size items
PushString(String),
PushMany(Vec<u32>),
// Arrays and tuples
Foo( ([u8; 3], [u32; 4]) ),
// Rust type system allows for powerful composition
DoFiveTimes(Box<Instruction>)
}
自动调整大小
默认情况下,枚举变体被编码为 u8
。但是,如果您的枚举增长到 >256 项,则 Serialize
宏将改用 u16
。请注意,这可能会使以前编译的字节码文件无效!
依赖项
~290–750KB
~17K SLoC