しろやまです。

> 
>|個人的には String の下位クラスを作るのが単純で速くていいと 
>|思いますけどね。破壊的にコード変換をしなければクラスを 
>|差しかえたりする必要もないし… 
> 
>しかし、そうするとstring.cのほとんどコピーが各文字コード系毎 
>に発生することになりそうなんですよねえ。でないとパフォーマン 
>スが出ないし。 
> 

余談ですが、OpenStep/YellowBox/Cocoaなどと呼ばれております
NeXT起原のクラスライブラリ(FoundationKit)にある文字列クラスの
NSStringでは、「Class Clustor」という方式で上記の実装をしており
ます。

ClassClustorとはぶっちゃけたところ「サブクラスを知ってる親クラス」
でして、親クラスであるNSStringのインスタンスを適当に生成すると、
その時に与えられたデータに応じて適切なサブクラスを実際に生成する
というものです。そして、普段はそれぞれの文字コードでの実装である
サブクラスは伏せられていて、直接参照できないようになっております。


具体的には、

id aString = [ NSString stringWithCString:"ほげ" ];

という形で NSStringクラスのインスタンスを生成すると、「ほげ」の
文字コードに応じて実際には NSEUCJPStringクラスとか、NSShiftJIS
Stringクラスなどが内部的には生成され、aStringに渡されます。
Objective-Cではながらく +allocで生成、- init*メソッドで初期化という
慣習が続いていたので、

id aString = [ NSString alloc ];  // NSStringオブジェクトを生成
id bString = [ aString initWithCString:"ほげ" ]; // Cの文字列"ほげ"で初期化

とかすると、aString != bStringという現象が起こるのが難点ですが、
Rubyの場合は そういう問題はないかと思います。


なお、AppleではこのObjective-CでかかれたFoundationKitのサブセット
をCだけで書き直して CoreFoundationという名前でソースごと公開して
おります。DarwinというOSの中にはいっております。

少しは参考になるのではないか、っと思いますが。。。


---
SHIROYAMA Takayuki :psi / fortune.nest.or.jp