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

最初のプログラム

いまのコンパイラで動く小さなエンドツーエンド例と、仕様レベルのエピステミック版。

最初のプログラム

このページでは同じアイデアを 2 つの形で示します:

  • 現在の souc ツールチェーンで いまコンパイルして実行できるプログラム
  • 仕様レベルのエピステミック版(不確かさ + 単位が完全に適用される世界)

バージョンA: いま動く(Knowledge + 明示的 Unwrap)

現在のコンパイラでは Knowledge<T> が存在し、下の値の抽出は unwrap(reason) で明示的に行います。

fn main() with IO {
    let k = Knowledge { value: 42.0 }

    // Explicit extraction requires a reason string.
    let x: f64 = k.unwrap("accepted for demo")

    if x == 42.0 {
        print("knowledge_unwrap: PASS\n")
    } else {
        print("knowledge_unwrap: FAIL\n")
    }
}

実行:

souc run first_program.sio

バージョンB: 仕様レベルのエピステミック BMI(Aspirational)

言語仕様と stdlib の設計は次を想定しています:

  • 単位(例: kg, m
  • 不確かさを伴う測定値
  • 信頼度に基づく制御フロー

これらが完全に統合されたとき、同じアイデアは次のようになります:

fn main() with IO {
    // Spec-level sketch (not all pieces are enforced by the compiler yet)
    let mass: Knowledge<f64> = measure(value: 75.3, variance: 0.5 * 0.5, source: "scale")
    let height: Knowledge<f64> = measure(value: 1.82, variance: 0.01 * 0.01, source: "tape")

    let bmi = mass / (height * height)

    if bmi.confidence > 0.90 {
        println("BMI is safe to use for a decision")
    } else {
        println("BMI is too uncertain")
    }
}

次に読む