[Python] PEP 393 について
Python 3.3.0 beta2 リリース予定の日なので、3.3 系の変更 PEP 393 Flexible String Representation (フレキシブルな文字列表現) [1] について見てみます。GSoC 2011 で採択 [2] されていたようです。
PEP 393 のタイトル通り、文字列の内部形式をフレキシブルに、ASCII のみとそれ以外を分けたりします。また、それ以外の点でも変更があります。
これまでの問題点
Python 3 系では、2 系で分かれていた str と unicode が unicode に統合されています。unicode は、configure オプションで ucs2 もしくは ucs4 を指定することで、内部で使用するデータサイズが異なっていました。
なんでもかんでも unicode になると、ASCII 7bit のような 1 バイト範囲で表せる文字列に対して無駄が多くなります。
PEP 393 変更点の概要
内部での文字列のサイズ
内部で文字列が保持される場合、文字列によってコードポイントで以下のようになります。
- ASCII と Latin 1 (U+0000-U+00FF) 1 byte
- BMP 文字列 (U+0000-U+FFFF) 2 byte
- non-BMP 文字列 (U+10000-U+10FFFF) 4 byte
多くのコードでは、コードやその他 XML、JSON などなどは ASCII 文字ばかりのため、すべて unicode になっている場合と比べてメモリの使用量が減ります。ucs4 ビルドと比較するとかなり減るようです。
旧 C API との互換性あり、以前の API は deprecated 扱いで最低5年保守されるようです。
[1] http://www.python.org/dev/peps/pep-0393/
[2] http://wiki.python.org/moin/SummerOfCode/2011/PEP393