意味論

プログラミングをするときの作法はいろいろとある。言語によっても違うし、プロジェクトによって規約を定めている場合もある。「キャストは避ける」「マジックナンバーを使うな」といったようなことだ。これらの作法に従うべき理由を挙げてみよう。

  • 実行速度
  • 移植性
  • 障害の起きやすさ
  • 読みやすさ

さて、ここで問題にしたいのは「読みやすさ」についてだ。近年では実行速度などよりも優先される傾向にある。読みやすければ間違いを起こしにくいし、結果的に障害も起きにくくなるだろう。読みやすさを実現するためには意味に基づいて書くべきであるとされる。「思考の表現」「機械に対する指示」という言語の両側面の内、前者を優先すべきだというわけだ。しかし、意味というものをどのように定義するかは難解な問題と言える。私は意味的というのは抽象的ということだと思っていたのだが、そう考えると矛盾が生じる。例えばアセンブリ言語のCALL命令について意味的に捉えようとすれば「サブルーチンの呼出し」ということになるだろうが、「IPレジスタをスタックに積んでジャンプする」ということよりも抽象的だろうかという疑問。CALL命令の実際の使用例からすれば、サブルーチンの呼出し以外にも使えるのだ。抽象的というのはより多くの事象を含むということであると考えれば後者の方が抽象的であるはずなのだがこれは感覚に反する。いったいどのように捉えればいいのか?
(どうでもいいことを深く考えようとしてる気がしないでもない。)