Unicode APIをC++標準ライブラリに入れる難しさについての考察

Unicode APIC++標準ライブラリに入れる設計的な難しさについての思考整理。

たとえば、以下のような「あるコードポイントが結合文字かを判定する非メンバ関数」をC++標準ライブラリに入れることはできない。

bool is_combining_character(char32_t code_unit);

Unicodeのプロパティ取得には超巨大な辞書が必要になる。そしてC++の設計思想としてゼロオーバーヘッド原則というのがあるから(D&E読もう)、こういう設計はできない。

もしやるなら、unicode_propertyのようなクラスを作り、そのインスタンスを経由してプロパティを取得することになる。そして超巨大な辞書をいくつもぽんぽん作られると困るので、ここはシングルトンにするのが適切となる。しかしシングルトンが一般的に嫌われているというのと、C++標準ライブラリにシングルトンを取り入れた事例がないというのもまた、採用を難しくする一因になる。

ICUはシングルトンなのだけど。