「マーズ・クライメイト・オービター」をご存知でしょうか。火星の気象調査をミッションとして、NASAが1998年に打ち上げた探査機です。1億2500万ドルを費やして作られたこの探査機は、本務に就く前に火星周回軌道内で炎上、そのまま消息を絶ちました。原因はヤード・ポンド法単位とメートル法単位の取り違え。
かの有名な「もう助からないゾ♡」の事故もやはり単位変換ミスが発端でした。人類史上において、不適切な単位の取り扱いが悲惨な事故に繋がる例は枚挙にいとまがありません。
プログラミングにおいても同じです。接頭辞の変換を忘れたり、numpyの三角関数にradianではなくdegreeで角度を与えて時間を溶かした人は私だけではないでしょう1。もっと安全・便利に数値を扱えるように人類をサポートする仕組みが必要です。
......そんな感じの問題意識から生まれたプログラミング言語、それが「Numbat」です。
Numbatは、科学技術計算を安全かつ効率的に行うことを目的する静的型付け言語です。この言語は、物理次元(長さ、時間、質量など)をファーストクラスの型として扱うことで、単位の不適切な取扱いを型エラーとして検出できます。単位変換はすべて自動で行われ、書き手が自分で行う必要はありません。
まず特徴的なのが代入操作です。数値型の場合、let : = の形で変数に値を代入します。型名はLength, Time, Mass等の物理次元の名前になります(無次元量はScalar)。
let w1: Mass = 0.5 kg
# let : =
ただし、型推論が働くので、型名は省略しても構いません。
let w2 = 2 lb
#...