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日 |
#178 in 数学
每月353次下载
195KB
4K 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
数组
依赖项
~1.8–2.6MB
~58K SLoC