まつもと ゆきひろです

In message "[ruby-list:18759] Re: constant?"
    on 99/11/19, Shin-ichiro Hara <sinara / blade.nagaokaut.ac.jp> writes:

||その通りです。先週金曜日の秘密会談(?)により、将来のバージョ
||ン(2.0?)では別の名前で呼ばれることになります。名称はまだ決まっ
||てませんが、多分「共有変数(shared variable)」のような名前に
||なるでしょう。
|
|どういう会談なんでしょう。そういうコンソーシアムができたのかな?:-)

本来はRubyの打ち上げだったはずですが、実装と仕様の検討会のよ
うになってました。

|いまや、もう完全に定数は定数ではなくなってるわけですよね。Warning を出す
|今の仕様は互換性のためにあるのでしょうが、超中途半端ですね。

「定数は定数でない」ことに同意します。1.5系ではすでにwarning
も出ません。

|定数を定数として使うために、定数への代入は必ず Module#const_set(,) を経
|由する事にして、ユーザーが適宜再定義するという案はどうでしょう?

「定数を定数として使う」必要はないだろう、だから「定数と言う
名前を止めよう」というのが私の方針なんですが、原さんはRubyの
通常代入レベルでは定数は以前の定数としての挙動を保存しようと
いうものですよね。一番最初の挙動でも「定数」としては、かなり
怪しいのですが、それは置いとくとして。

どうなんでしょう。私自身は「(当時の発想では)あれを定数として
実装せざるをえなかったので定数にした」程度にしか「定数」とい
う概念にこだわってないんで、互換性の心配がなければ(あと、適
切な名前があれば)、定数の定数性を保存する必要はないように感
じているんですが、いかがでしょうか?

定数が定数であることのデメリットはあります。

  * クラス変数をひねくれた方法で実現する必要がある
  * ライブラリの再ロードができない

メリットは「うっかり代入を検出できる」ことでしょうが、これっ
て本当にメリットなの?
                                まつもと ゆきひろ /:|)