2011年2月23日

[ruby-list:47917] Re: 2種類のリテラル

郡司と申します。

#雑談です ;-)

> きしもとです

> インスタンスがシングルトンないし有限個なオブジェクトは
> 同じオブジェクトが返ってくるほうになりますかね。


なんか「シングルトンなリテラル」でいいような気がしてきました。
識者のご意見を伺いたいところです。


> リテラルとは何か、という話にもなりそうに思いますが、(たまたま手元に
> あった)岩波情報科学辞典や、FOLDOC では、リテラルとは定数である、という
> 流儀で説明されていますが、(たとえば)Ruby のリテラルとは違う感じが
> しますね。

「直接オブジェクトを生成する式」という表現が一番しっくり来ますね。

http://i.loveruby.net/ja/rhg/book/minimum.html


> Bignum だとキャッシュする実装もあっておかしくないように感じます。

ですね。なぜ毎回違うオブジェクトが生成されるのかは、
識者の方の解説を期待してみたり。


で、さらに余談なのですが、もともとの話は

「常に同じオブジェクトが返るリテラルのことを何と呼ぶか」

という話だったかと思うのですが、たとえば

10000000000

というリテラル表現がありますが、これは32ビットCRuby環境だと
Bignumが返り、64ビットCRuby環境ではFixnumが返ります。

・32bit CRuby

--------
irb(main):001:0> 10000000000.class
=> Bignum
irb(main):002:0> 10000000000.object_id
=> -609828758
irb(main):003:0> 10000000000.object_id
=> -609839038
irb(main):004:0>
--------


・64bit CRuby

--------
irb(main):001:0> 10000000000.class
=> Fixnum
irb(main):002:0> 10000000000.object_id
=> 20000000001
irb(main):003:0> 10000000000.object_id
=> 20000000001
irb(main):004:0>
--------

で、「常に同じオブジェクトが返るリテラル表現」に名前があったとして、
たとえば

10000000000

はそれに該当するのでしょうか。

#「32ビットのCRubyの環境では該当しないが、64ビットのCRubyの
#環境ならそれに該当する」みたいな前提をつければいいのかも
#しれませんが、なんだか面倒‥‥。


投稿者 xml-rpc : 2011年2月23日 17:30
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/102247
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。