まつもと ゆきひろです

In message "[ruby-list:19331] Re: オブジェクトの代入について"
    on 99/12/09, GOTO Kentaro <gotoken / math.sci.hokudai.ac.jp> writes:

|ちょっと余計なことを考えてみるに、他の言語にモデルを求めなく
|ても整数はビットを格納する配列と考えることは計算機的には十分
|に自然だったのではないかしら。実際Integer#[]なんてのがあるし。
|むろん演算子の意味の違いってのがありますが、それを言うんなら
|どっちみち自然な String#- はないので、文字列が容器としても配
|列とはそんなに密接なアナロジーはないような気がします。

うーん、良く分かんないです。

Rubyと同様なモデルを採用している言語といえば Lisp や
Smalltalk がありますが、これらの言語では数は値がオブジェクト
です。もし、数が容器であったとするとこれらの言語のモデルと結
構違ったものになりそうでヤなんですけど。というより、どういう
体系になるのか想像できません。

一方、これらの言語では文字列も値であって容器ではないのですが、
これらはimmutableな文字列オブジェクトを採用している言語が別
にいくらでもあるので(たとえばC)、問題なくイメージできました。

ついでにいうと、immutableな数オブジェクトを採用すると、
Fixnumの即値というのも、Pythonのような数オブジェクトの使い回
しも使えないわけで、そうなると最適化手段の乏しいインタプリタ
には痛い制約だったかも知れませんね。

|あと、配列や文字列では連結は * で、繰り返しは ** の方が非対
|称性を反映してて自然だったと思います。

うーん、そうなんですか?

+ の意味のとり方の問題なのかなあ。

私にとって + という操作は「つなげる」なんですけど。やはり、
頭脳が算数レベルだから? たとえば、『算数すいすい』で行われ
るような説明ですが、

  □□□ + ■■■■ = □□□■■■■

で、

  ■■■■ + □□□ = ■■■■□□□

です。これらが文字列であったとすると今の String#+ の動作とばっ
ちり一致しますよね。+演算子が可換なのは「数の+」だからで、
文字列の+であれば可換ではないのは当然のように感じます。

*(×)も「くりかえす」であるので、

 □□□ × 2 = □□□□□□

 2 × □□□ = ?(□□□は数でないので繰り返せない)

と今の動作と一致します。むしろ、連結の*、繰り返しの ** の方
が演算子の意味との解離が大きくて説明に苦労しそうです。
数における演算子の性質(可換・非可換)を保存するために、本来の
意味とは違う演算子を割り当てるのでは本末転倒です。

有馬さんの

In message "[ruby-list:19332] Re: オブジェクトの代入について"
    on 99/12/09, ARIMA Yasuhiro <fit0298 / fitec.co.jp> writes:

|"*", "**" の採用はちょっとリスクが高いような気がしますが、それ以外の方法が
|あるとは考えられないような魅力があるとも思いました。

にどういう考えがあるのかは分かりませんが、私は全然魅力を感じ
ませんでした。ただ、

|Ruby のユーザはこれからどんどん増えていくので、今日までに Ruby を使いはじめた
|ユーザの数は、将来的にごく少ない割合になってしまうと考えれば、文法の変更に対する
|心理的障壁も低くなるのではないでしょうか?

こっちの発言には魅力を感じました。そーかあ、気軽に文法変更し
ても良いのか(それは絶対に違う)。

				まつもと ゆきひろ /:|)