まつもと ゆきひろ@トヨタケーラムです.

In message "[ruby-list:125] i++ ????"
    on 96/02/05, P nakawtse <nakawtse / syrinx.dq.isl.ntt.jp> writes:

|中渡@NTTです.
|
|-----------
|まつもと ゆきひろ@トヨタケーラムです.
|どうも私の説明が悪いんでしょうね.
|-----------
|  謎が深まってしまいました.#寝た子をおこすな?(^^).

いいですよ,納得するまで説明させてください.

|Cのレベルでは「変数iの値に1を加える」という変数に対する操作
|ですよね.

|---------------
|  値に対する操作って.
| 1++ -> 2
|  ということですか?

そうですね.1オブジェクトに++メッセージを送ると2になるという
のが値に対する操作としての「++」というつもりでした.ただし,
これは明らかにおかしいのでrubyでもできません.つまり,rubyの
メソッドは基本的に値に対する操作だが,++は値に対する操作とし
て実現するのは無理があるという意味です.

| ちなみに
| print 1++; −> -:1: syntax error
| でした???

えーと,上で説明したような理由もあって,rubyでは「i++」とい
う文法はサポートしていません.だからシンタックスエラーになり
ます.

なぜサポートしていないかもうすこし詳しくいうと

# 繰り返しになりますが

 * 「i++」という式をオブジェクト指向的にとらえるとするならば,
   「変数オブジェクトiに++というメッセージを送って格納されて
   いる値を『次の』値にする」という動作であるべきだと(松本は)
   考える.

 * しかし,rubyでは変数はオブジェクトではなく,変数に対する
   操作(参照と代入)は言語組込みの機能である.

 * ここで「i++」を実装するために変数をオブジェクト化するとい
   う選択肢も考えられないことはないが,たかが「i++」を実装す
   るだけのためにそれだけのことをするのは大げさな気がするし,
   言語の他の部分への影響も大きそうだ.

 * しかも,rubyの文法に「i++」を導入しても,結局はメソッド呼
   出になるわけで,「i+=1」に比べて,それほど実行が高速にな
   るわけではないと容易に予想される(多分かえって遅くなる).

 * C++では整数型の変数に`++'が適用されると,変数の値を1増や
   し,それ以外の型の変数に`++'が適用されるとoperator ++を呼
   び出すことになっている.しかし,これは1)変数に型の無い
   rubyでは静的に実現できない,2)実行時に動的に判別したとし
   ても,実行速度が高速になるわけでもなく,オブジェクト指向
   的な意味づけもはっきりしない,という理由でrubyでは採用し
   なかった.

ということです.

|  やっぱり動作を調べないとダメなのか???
| #シンタックスを縮小して動かせます?

parse.yに手をいれればもちろん可能ですけど,そうとうyaccに詳
しくないと止めた方が良いと思います.

|#このMLはfmlですか?

そうです.過去のメイルも参照できるはずです.