そこで活躍するのが意味論で、意味論というのはプログラミング言語のコードがどのように解釈されるか、あるいはどのようなアーキテクチャを持つ機械にどのように作用するかを形式的に規定します。
特にメジャーな方法としては、コードや部分式をなんとかして数学における式とか論理に帰着させる「表示的意味論」と、コードや部分式がどのように (仮想的な) 機械の状態を変更していくかを記述する「操作的意味論」があります
で、プログラミング言語がその状態だと困るわけですね。
たとえば「1+1」という式があったとして、これが32ビットで2の補数表現の整数の話で2になるかもしれないし、ブール代数における和で1かもしれないし、 XOR のつもりで0かもしれない。あるいは、文字列の1と文字列の1の結合で "11" かもしれないし、トークン 1 と + と 1 の結合で "1+1" かもしれない。
となると、プログラミング言語のコードの挙動や解釈を、何らかの形式的な (曖昧さのない形の) 方法で定めてやらないと、コードがどう動くかつまりプログラミング言語の仕様というのは共有が極めて難しいわけです。
これ、わかるなぁ。何を食べても美味しく感じるので、色々評価できたり、過去のどの店が美味しかったとか覚えてる人が凄いなぁと感心する。全部同じ味に感じてしまって、それで満足してしまう。>BT https://mstdn.maud.io/@giraffe_beer/102400029042610900