From: Nobuyoshi Nakada Date: 2007-12-14T15:59:29+09:00 Subject: [ruby-dev:32592] Re: transcoder loading なかだです。 At Thu, 13 Dec 2007 17:30:28 +0900, Martin Duerst wrote in [ruby-dev:32576]: > 作業の話のではなく、データの話です。似たような文字を扱うコード変換で > データをある程度共用できますので、例えば iso-8859-1 (文字種: Latin) > と iso-8859-7 (ASCII 以外の文字種: Greek) を一緒にするのではなく、 > iso-8859-1 と windows-1252 を一緒にした方がいいです。 iso-8859-*をまとめて扱うのではなくて別々にするということですか。 そうしようかなとも思ったのですが、無駄に大きなパッチになりそうだっ たので、やめておきました。 > 大体一発ロードするものでは何キロバイトぐらいが適切なのか > (極端に rubygems でメガ単位で増えたとしたら文字コード変換では > 二三百キロでわさわさ動的にロードする必要がないという意見もある > かも知れませんので)、今ディレクトリに小分けするのは早すぎだと > 思います。 了解ですが、巨大なrubygemsを使う場面ばかりではありませんので。 > >> >-/* in the future, add some mechanism for dynamically adding stuff here */ > >> >-#define MAX_TRANSCODERS 29 /* todo: fix: this number has to be adjusted > >> >by hand */ > >> >-static transcoder transcoder_table[MAX_TRANSCODERS]; > >> >+static st_table *transcoder_table; > >> > >> ハッシュにするのはありかと思います。 内部テーブルだけハッシュにしておきましょうか。変換可能な encodingを羅列することを考えると、二重ハッシュあたりのほうがいい かもしれませんが。 > >> このやり方でルビの内部でどの変換があるのか分からないという問題になる > >> のもよく分かります。これは例えば force_encoding の ([ruby-dev:32563] > >> など) と関係するだけではなく、utf-8 とか経由の二段階とかで変換するときにも > >> 問題になりそうです。 > > > >変換パスを登録するDBのようなものが必要になりますかねぇ。 > > 本当の DB の意味でしょうか。そうではなく何かのデータ構造に > 前もって登録するように考えています。今のコードでいうと > (rb_)register_transcoder を Ruby 全体の init 時にやって、 > そこにロードされているかどうかやデータのファイル名など > を追加する。 「本当のDB」までは考えていません。init時に登録するというのは、た とえば特定のディレクトリにあるライブラリをロードする、とかでしょ うか。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦