From: Nobuyoshi Nakada Date: 2008-03-03T19:48:31+09:00 Subject: [ruby-dev:33980] Re: なぜ transcode.c の transcode_loop で from_utf8 が特別扱い なかだです。 At Mon, 3 Mar 2008 17:19:19 +0900, Martin Duerst wrote in [ruby-dev:33972]: > > cd enc/trans > > grep 'offsets\[256\]' *.c|wc > 78 234 3386 > > grep 'offsets\[64\]' *.c|wc > 985 2955 42584 256*78 + 64*985 = 83008byte > 数字がちょっと違うかもしれませんが、結局 UTF-8 で特別扱い > されているテーブルはそうでないテーブルより10倍ほど多い。 > なぜなら UTF-8 への文字コード変換の場合、テーブルはおおむね > コンパクトであるなのに、UTF-8 からの場合は結構バラバラになる > ことが多いです。しかも UTF-8 から (二バイト目以降) を特別扱い > するとテーブルの大きさが 1/4 になるのに、他のテーブルでは > 1/3 とか 1/2 とかしか期待できないです。よって UTF-8 の二バイト目 > 以降だけを特別扱いすると相当データの量が減るが、別のケースを > 特別扱いしてもそれ以上そんなに減らないと言うことです。 たとえばoffsetsの先頭の2byteに範囲をいれるとすると、仮りに from_utf8以外は1/2になると仮定すれば (128+2)*78 + (64+2)*985 = 75150byte で、約一割の削減になり、from_utf8のテーブルも一部しか使っていな いものがあるので、もう少々効果があるのではないかと思うのですが。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦