Ruby/文字列
T_STRINGのRVALUEとして表現される.
RVALUEはRStringという構造体で管理される.
文字列は書き換え可能.
文字列はエンコーディング情報を持っている.
デフォルトはUTF-8
String#engodeで他のエンコーディングにエンコードできる.
String#sizeでコードポイントの数を取得できる.
長さ情報を終端文字とバイト数記憶の両方で保持している.
終端文字だけではバイト列を走査するコストがかかるため.
終端文字をRubyの文字列に含めることができないため.
終端文字があることでCの関数と互換性を保持している.
CoWによって文字列リテラルを効率的に利用している.
部分文字列を生成する際にも利用されている.
部分文字列を生成するのにCoWの機構を利用するとコピー前を削除できなくなるため,メモリリークのような挙動をしてしまう.
Javaではメモリリークとされ部分文字列の生成に毎回コピーを行うようになった.