#unit #safe #computation #si #time #length #velocity

nightly measurement

在 Rust 中实现单位安全的计算

2 个不稳定版本

0.3.0 2023年4月26日
0.2.0 2023年4月25日
0.1.1 2023年4月1日
0.1.0 2022年12月31日

#3#velocity


被用于 tafelwerk

MIT/Apache 许可

8KB
145 代码行(不包括注释)

测量

向 Rust 添加数量和单位,以允许以零成本抽象进行单位安全计算。

注意:此包使用不稳定功能,需要您添加 #![feature(generic_const_exprs)] 并使用 nightly 编译器。

使用方法

通过在 main.rslib.rs 文件中添加 #![feature(generic_const_exprs)] 添加 generic_const_exprs 功能。

use measurement::si::{Length, Time, Velocity};

fn main() {
    let length = Length::new(20.0); // 20m
    let time = Time::new(5.0); // 5s
    
    // you can specify the type of the quantity but you don't have to
    // (see the example below)
    let velocity: Velocity = length / time;

    println!("{}", velocity.value);
}
use measurement::si::{Mass, Acceleration};

fn main() {
    let mass = Mass::new(50.0);
    let acceleration = Acceleration::new(10.0);

    let force = mass * acceleration;

    println!("{}", force.value);
}

定义新的数量

目前仅支持三个维度:时间、长度、质量

use measurement::{Quantity, Dimension};

pub type Length                  = Quantity<Dimension<1, 0, 0, 0, 0, 0, 0>>;
pub type Mass                    = Quantity<Dimension<0, 1, 0, 0, 0, 0, 0>>;
pub type Time                    = Quantity<Dimension<0, 0, 1, 0, 0, 0, 0>>;
pub type ElectricalCurrent       = Quantity<Dimension<0, 0, 0, 1, 0, 0, 0>>;
pub type ThermodynamicTemperatur = Quantity<Dimension<0, 0, 0, 0, 1, 0, 0>>;
pub type AmountOfSubstance       = Quantity<Dimension<0, 0, 0, 0, 0, 1, 0>>;
pub type LuminousIntensity       = Quantity<Dimension<0, 0, 0, 0, 0, 0, 1>>;

pub type Velocity     = Quantity<Dimension<1, 0, -1, 0, 0, 0, 0>>;
pub type Acceleration = Quantity<Dimension<1, 0, -2, 0, 0, 0, 0>>;
pub type Force        = Quantity<Dimension<1, 1, -2, 0, 0, 0, 0>>;

无运行时依赖