Part 13.メモリレイアウト(6)
「プログラマは自分で好きなようにルールを作ることが出来る」とは言っても最低限守らなければいけないことはある。ゲーデルの不完全性定理を持ち出すまでもなく、ルールは無矛盾(consistent)でなければならない。(これについての哲学的な問題は、柄谷 行人の『隠喩としての建築』が参考になると思う。)
例えば、文字列長をLengthという変数に持たせるとルールを定めたならば、
void Clear() { Length = 0; }
bool IsEmpty() { return Length==0; }
という二つのメソッドを提供することが出来る。このとき二つのメソッド(「クリアする」と「クリアされているのか」)を“矛盾なく”提供できなければならない。つまり、(少なくとも)Clearを呼び出した直後にIsEmptyを呼び出せばtrueが戻ってこなければならない。
その他、文字連結を初めとする文字列操作すべてを矛盾なく提供出来なければならない。矛盾なく提供出来ないとしたら、プログラマが定めたルールは自己矛盾を孕んでいるということであり、そのようなルールに基づいて書かれたプログラムは自己矛盾(たいていはバグ)を含むだろう。
(つづく)