単位(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 型はパースされ表現できますが、不一致チェックがすべてのコンパイラモードで強制されていない可能性があります。単位チェッカーが end-to-end で統合されるまでは、単位を正しさの注釈として扱うのが安全です。