4个版本 (2个破坏性更新)
新增 0.4.0 | 2024年8月10日 |
---|---|
0.3.1 | 2024年8月6日 |
0.3.0 | 2024年8月5日 |
0.2.0 | 2024年8月5日 |
在#quantities中排名6
每月下载量351次
在dana中使用
48KB
1K SLoC
Dana
通过泛型类型实现编译时维度分析。
概述
维度分析是一种通过跟踪单位之间的关系来确保计算正确性的方法。这也可以在无需查找的情况下确定关系时非常有用。例如,假设你有时间t (T
) 和速度v (L/T
),你想要找到距离d (L
)。简单的代数可以告诉你L
= (L/T)
× T
,因此,d = v × t。
这个库使用Rust的静态类型系统来实现这些检查。因此,任何单位之间的不兼容性都会成为编译时错误,确保所有代码都是维度一致的。
这个函数可以成功编译
use dana::{Quantity, units::{Length, Speed, Time}};
fn speed(dist: Quantity<Length>, time: Quantity<Time>) -> Quantity<Speed> {
dist / time
}
而这个函数,因为Speed
被定义为UnitDiv<Length, Time>
,所以无法编译,因为它会引发一个mismatched types
错误,因为表达式是错误的
use dana::{Quantity, units::{Length, Speed, Time}};
fn speed(dist: Quantity<Length>, time: Quantity<Time>) -> Quantity<Speed> {
time / dist
}
error[E0308]: mismatched types
--> src/main.rs:4:5
|
3 | fn speed(dist: Quantity<Length>, time: Quantity<Time>) -> Quantity<Speed> {
| --------------- expected `Quantity<UnitDiv<Length, Time>>` because of return type
4 | time / dist
| ^^^^^^^^^^^ expected `Quantity<UnitDiv<Length, Time>>`, found `Quantity<UnitDiv<Time, Length>>`
|
= note: expected struct `Quantity<UnitDiv<Length, Time>>`
found struct `Quantity<UnitDiv<Time, Length>>`
有关更多信息,请参阅库文档。
Cargo功能
以下Cargo功能可用于启用额外功能
chrono
:支持在Quantity<Time>
和chrono::TimeDelta
之间进行转换rand
:支持rand
抽样特性serde
:支持serde
特性simd
:使用不稳定功能portable_simd
的实验性QtySimd
数组
依赖项
~0.8–1.3MB
~28K SLoC