問い1(続々々)

【なぜ「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言語ライクな表現を取り入れる場合も、副作用の問題などは取り込まない様になっているようですね。

以上

 

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください