前田です。
fj.comp.oopsに振った方がいいかも。

At Fri, 29 Dec 2000 14:05:45 +0900,
Kazuyuki Shudo <shudoh / muraoka.info.waseda.ac.jp> wrote:
> 「(あらゆる JVM で) String インスタンスには identity がない」
> と言ってしまうと嘘だと思いますが、
> 「String インスタンスには identity がない、という JVM 実装は『あり』」
> だと考えてます。『あり』というのは、JVM 仕様に沿っている、ということです。
> 
>   String str1 = "abc";
>   String str2 = "ab";
>   String str3 = "c";
> 
> という状況で、たいていの JVM では
> 「str1 == (str2 + str3)」は false になりますが、
> これが必ず true になる、つまり String インスタンスには identity がない
> という JVM 実装もありだと思います。

いや、このケースでもidentityがないとは言えないと思いますよ。
この場合はすべての同値のStringオブジェクトは同一のオブジェクトで
ある、という形で説明できます。
RubyのFixnumも同じですね。

> > 同じ内容のStringリテラルは同一のオブジェクトになることが言語仕様
> > にあったような気がするので、
> 
> はい。
> (ただ…String インスタンスに identity があることの証左として
>  前田さんがこれを挙げた理由を理解できてないです。)
> JVM 仕様の 2.3 Literals にこうあります。
> 
>   String literals and, more generally, strings that are the values of
>   constant expressions are "interned" so as to share unique instances,
>   using the method String.intern.
> 
>   String リテラルと、値が定数式である string は
>   String.intern メソッドでintern されて、
>   (値が同じなら) 同一のインスタンスを共有する。

Stringインスタンスにidentityがなかったらuniqueという形容は無意味
ではありませんか?
identityがなければ、「*この*Stringインスタンスと*あの*Stringイン
スタンスは同一である」という言明は意味をなさないような気がします。
というか、私の感覚ではインスタンスという語がそもそもidentityを前
提としているような気がします。

> 大雑把に言ってしまうと、そういった dynamic な機能が、
> 将来、処理系の性能向上を図る際に障害になってくると思います。
> もっとも、Ruby は、きもちよく楽しく、が第一(?)なので、
> そちらをこそ貫いてほしいと思ってます。

そうですね。
そういうシステムが欲しい人はそれに合った言語を使えばよいんじゃな
いかな、と。
全部Rubyでカバーする必要はないわけで。

-- 
前田 修吾