多値と意味論

http://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3a%E5%A4%9A%E5%80%A4の話。

手続き型言語におけるn-in, 1-outの関数は、処理系の実装の手抜きから生じたものだと思う。call by referenceやcall by nameの言語ではそれで困ることはなかった (関数は単純な数学関数にさえ使っておけば良かった)。それがCみたいにcall by valueにして何でも関数だ、と言い出したところではたと困った。複数の状態を返すにはどうしたらいいか。Cではポインタ渡しで call by referenceをエミュレートした。 C++では参照を言語に持ち込んで call by referenceを正式にサポートした。でも、アセンブラで書いていた時に多値を複数のレジスタで返すサブルーチンなんて皆書いてたんだよね。

ALGOL族の n-in, 1-out な関数は言語記法の手抜きから生じたものだと私は思う。もちろん引用部の話に全面的に賛成した上の補足として、実装の手抜きの中でも記法開発の手抜きが一番重大だったのではないか、という意味での話なのだけど。
で、ALGOL族に関してもメッセージ・パッシング的な観点から関数呼び出しを再解釈することも可能だと思う。C++

this->GetValue(1);

をthis, ->GetValue, (1)の三つに分解する。

  1. thisはC++のまま。
  2. ->GetValueはポインタからメソッドを取り出すメッセージ。
  3. (1)は多値。
  4. メソッドや関数に多値をメッセージとして送ると実行。