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