From: Martin Duerst Date: 2008-03-03T17:19:19+09:00 Subject: [ruby-dev:33972] なぜ transcode.c の transcode_loop で from_utf8 が特別扱い 中田さん、皆さん、こんにちは。 この間のミーティングで中田さんに 「なぜ transcode.c の transcode_loop で from_utf8 が特別扱いされているのか」 と聞かれました。 その時はすぐに返事が出ませんでしたが、なんとなく自分の 設計でいいとは思いました。最近多分一番分納得するようなものを 見つけました。 > cd enc/trans > grep 'offsets\[256\]' *.c|wc 78 234 3386 > grep 'offsets\[64\]' *.c|wc 985 2955 42584 数字がちょっと違うかもしれませんが、結局 UTF-8 で特別扱い されているテーブルはそうでないテーブルより10倍ほど多い。 なぜなら UTF-8 への文字コード変換の場合、テーブルはおおむね コンパクトであるなのに、UTF-8 からの場合は結構バラバラになる ことが多いです。しかも UTF-8 から (二バイト目以降) を特別扱い するとテーブルの大きさが 1/4 になるのに、他のテーブルでは 1/3 とか 1/2 とかしか期待できないです。よって UTF-8 の二バイト目 以降だけを特別扱いすると相当データの量が減るが、別のケースを 特別扱いしてもそれ以上そんなに減らないと言うことです。 宜しくお願いします。 Martin. #-#-# Martin J. Du"rst, Assoc. Professor, Aoyama Gakuin University #-#-# http://www.sw.it.aoyama.ac.jp mailto:duerst@it.aoyama.ac.jp