9.2
静的意味論
297
9.2
静的意味論
ここまで、実際に計算を実行することなく、計算に関する近似した情報をいかにして見つけるか、
「おもちゃ」レベルの例を見てきました。実際に計算をすればもっと多くのことが学べるでしょうが、近
似した情報もないよりはましです。ルート計画のように、目的によっては、それこそが本当に必要とす
る情報かもしれません。
掛け算と足し算の例では、具体的な数の代わりに抽象的な値を入力として与えることによって、小
さな問題をさらに小さく、抽象的なものにすることができました。ところが、もっと大きな、もっと複
雑なプログラムを調べたい場合、このやり方でできることは限られます。独自の掛け算と足し算の実装
を持つ値であれば簡単に作れますが、たとえば
if
文中で使われたときなど、もっと一般的に独自の振
る舞いをするような値を作ることは、Rubyでは許されていません。具体的な構文がどのように振る舞
うかについて、ハードコードされた規則が存在しているためです
†
。さらには、実行して出力を待つこと
によってプログラムについて学ぶという方法をとった場合、結果を返さずに永久にループするプログラ
ムが存在するため、一般的には適切でないという問題が依然として残ります。
もう1つ、掛け算と足し算の例にある欠点は、あまり面白くないことです。プログラムが正や負の数を
返すかどうかなど、だれも気にしていません。実際には「私のプログラムを実行してもクラッシュしな
いか」「私のプログラムを変換してもっと効率良くできないか」