Localized V2 rewrite for this language is in progress. Showing English-first content for now.

单位(Units)

定义并跟踪单位,减少维度分析错误。

单位(Units)

Sounio 提供了 单位(units of measure) 的专用语法,使程序可以通过类型系统携带物理维度含义。

单位声明

单位在顶层声明,当前需要以 ; 结尾:

unit kg;
unit g = 0.001 * kg;
unit mg = 0.001 * g;

单位可以通过乘法、除法与指数进行组合:

unit m;
unit s;
unit N = kg * m / s^2;

量(数值 + 单位)

编译器支持 quantity 类型形式:

Quantity[f64, mg]
Quantity[f64, kg*m/s^2]

要给数值字面量赋予单位类型,可使用 @:

unit kg;
unit g = 0.001 * kg;
unit mg = 0.001 * g;

fn main() {
    let dose: Quantity[f64, mg] = 500.0@Quantity[f64, mg]
    let half = 250.0@Quantity[f64, mg]
    let total = dose + half
}

规范 vs 实现

长期目标是编译期单位检查与转换,防止不匹配(例如不能把长度和质量相加)。

目前,单位与 quantity 类型可以解析并表示,但 完整的不匹配检查可能尚未在所有编译器模式中强制。在单位检查器端到端集成之前,建议把单位当作一种正确性注解来使用。