【なぜ「Pascal 日和」でC言語の話か?】
実はC言語がどうこうというのはどうでも良い話で、Modula-2 R10 の仕様が気になったからです。
C言語は、副作用の問題を抱えながら長年使用され続け、定着しているのでどうこう言うつもりはありません。
現在進んでいる Modula-2 R10 の「Modula-2 R10 Language Report」を見ると、これまでのModula-2に無かった‘++’と‘–‘が追加されていました。
もし「問い1(続々)」の話の様なことが突然Modula-2にも起こったら皆さん困ると思います。
しかし、「Modula-2 R10 Language Report」の記載を見ると
‘++’は Increment Statement Suffix
‘–‘は Decrement Statement Suffix
となっています。
Operator(演算子)ではなくStatement(文)となっているので、C言語とは違う扱いで実装されるようです。
X++; は INC(X, 1); と同じ。
X–; は DEC(X, 1); し同じ。
これらは文なので値として評価できないので、Y := X++; や A[X++] := Y; や IF X++ = Y THEH… などはできません。
つまり、Modula-2 R10 では、「問い1(続々)」の様なことは起こらないということになります。
まずまず一安心というところです。
ちなみに
Free Pascal(Lazarus)ではどうかというと、代入文(Assignment Statement)として、‘+=’、‘-=’、‘*=’、‘/=’が実装されていますが、Pascalではこれらは代入式ではなく代入文なので、これについても問題ありません。
X += Y; は X := X + Y; と同じ。
X -= Y; は X := X – Y; と同じ。
X += Y; は X := X * Y; と同じ。
X /= Y; は X := X / Y; と同じ。’div’ではなく’/’なので、実数演算に限定されます。
Inc()とDec()手続きがあるので、‘++’と‘–‘は実装していないようです。‘+=’と‘-=’もいらないと思いますが。
ということで、Free Pascalも大丈夫そうです。
.NETのObject Pascalである、RemObject社のOxygeneはイベントの割当てと解除のための‘+=’と‘-=’はありますが、数値の演算に‘++’、’–‘、‘+=’、‘-=’、‘*=’、‘/=’はありません。
こちらも大丈夫そうです。
Modula-2やPascal系のコンパイラは、C言語ライクな表現を取り入れる場合も、副作用の問題などは取り込まない様になっているようですね。
以上