"自由は、制約を知って初めて成立する。"
多くのプログラミング言語が「自由度」を求める中、Adaは「制約」を徹底する。
とりわけその設計思想は、型に対する厳密な定義の中に最も端的に現れる。
本稿では、Adaにおけるサブタイプ(subtype)とレンジ型(range)の持つ哲学的・構造的意義を探る。
範囲を定めることで、誤りを定めない
プログラムの不具合の多くは、「本来来ないはずの値」が来ることで発生する。
Adaはこの問題に対して、設計時に「来るべき値」しか存在し得ない構造を作る。
subtype Score is Integer range 0 .. 100;
この一行で、0〜100以外の値を受け取る余地が、文法的に消える。
不正な値が来る可能性そのものを、構文段階で封じるのだ。
サブタイプは設計者の意志を表す構造
Adaにおけるsubtypeは、単なる型の再定義ではない。
それは「文脈における有効値の定義」であり、意味論的な明示である。
type Temperature is range -273 .. 1000; -- 絶対零度を下回らない
subtype Celsius is Temperature range 0 .. 100;
subtype Kelvin is Temperature range 273 .. 373;
ここには、物理法則への忠実さと文脈ごとの値制限が自然に反映される。
実行時ではなく設計時に「止まる」ことの美しさ
多くの言語では、制約は実行時の例外やエラーハンドリングで対応する。
しかしAdaでは、「最初に止まる」ことが美徳である。
type Age is range 0 .. 120;
My_Age : Age := -3; -- コンパイル時に拒否
このようにして、設計の意図を未来の実行ではなく、現在の構文で語る。
設計は「意志の構文」である
Adaのsubtype/range構造は、設計者の意図を静的に定義し、文法上の保証へと昇華する。
これは単なる「型の厳密さ」ではなく、仕様書を書かずに設計思想を伝える手段でもある。
結語:制約の先にある自由
自由とは、無制限ではない。
設計された制限の中で初めて、コードは意味を持った構造体として立ち上がる。
Adaが語るのは、「すべてを許さないこと」ではない。
むしろ、「意味を持つことしか許さない」という、設計に対する誠実な態度である。
"最も自由なコードは、最も厳格な制約の中に生まれる。"