#value #pointers #i32 #f64 #u32 #boolean #nan-tagged

nanoval

用于表示f64、i32、u32、布尔值、null和任意指针的nan标签值

5个不稳定版本

0.3.1 2024年4月30日
0.3.0 2024年4月30日
0.2.1 2024年4月30日
0.2.0 2024年4月30日
0.1.0 2024年4月29日

#1186 in Rust模式

26 每月下载量

MIT 许可证

16KB
329

nanoval - NaN标签值

此库提供了一种NaN标签值的实现,支持f64booli32u32、null值和指针的子集。每个值大小仅为8字节,并使用NaN值的大空间在单个64位双精度浮点值中存储额外信息。

此实现深受Wren编程语言的启发,尽管在某些方面有所不同。

如果您发现错误或有改进的想法,请提交一个问题或拉取请求。

希望您觉得这个库很有用!

用法

Value类型可以从f64booli32u32i64()和任意T的指针构建

use nanoval::Value;

fn creation() {
    let double = Value::from(3.14);
    let integer = Value::from(42);
    let boolean = Value::from(true);
    let null = Value::from(());
    let pointee = 42;
    let pointer = Value::try_from(&pointee as *const i32).unwrap();
}

构建的值可以转换回原始类型

fn getters() {
    assert_eq!(double.as_f64(), Some(3.14));
    assert_eq!(integer.as_int(), Some(42));
    assert_eq!(boolean.as_bool(), Some(true));
    assert!(null.is_null());
    assert_eq!(pointer.as_pointer::<i32>(), Some(&pointee as *const i32));
}

无运行时依赖