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