From: Sho Hashimoto Date: 2011-06-14T21:00:14+09:00 Subject: [ruby-dev:43805] Re: Iconv#trivial? の仕様 橋本です。 神戸さん、成瀬さん、ありがとうございます。 >> 実際、GNU iconvを使用しないで作成したRubyでは、Iconv#trivial?は >> NotImplementedErrorとなる場合があります(というか、おそらくほとんどそう >> なるでしょう)。 >> >> 従って、回答は「GNU iconvにあり」です。:-) > > http://www.gnu.org/software/libiconv/documentation/libiconv/iconvctl.3.html > を見ると、the conversion が trivial なら、とありますね。 > trivial とはなんぞやの説明はないので、それはソース読まないとだめかも。 そうなんですよね。上記の HTML も情報量は変わりませんでした。 以下のコミットログで入った機能(r9514)だと思うのですが、ML を iconvctl で検索しても特に情報がないのでるりまを書くのに困ってるの でした。 * ext/iconv/iconv.c: iconvctl() support. [EXPERIMENTAL] GNU iconv のソースをもう少し見てみようかと思います。が、もし動作確 認などで知ってる方いらっしゃいましたら、是非教えてください。 >>> Iconv#trivial? の仕様について質問させてください。 >>> (どちらかというと、iconv の話かもしれませんが...) >>> >>> Iconv#trivial? の rdoc は以下のようにありますが、これがどういう意味なの >>> か理解できていません。 >> ...snip... >>> なお、上記を追ってる際にたまたま見つけたのですが iconv 1.13.1 の >>> iconvctl は ICONV_TRIVIALP の分岐だけフラグの値を返さずに何かしらの判定 >> iconv 1.13.1とありますように、このようなフラッグはGNU iconv独自のもの >> で、標準的なiconvには存在しません(と、思います)。 > > フラグ以前に、iconvctl(3) 自体が GNU libiconv 特有の関数ですね。 > http://www.gnu.org/software/libiconv/ > > なお、GNU な iconv は GNU libiconv 以外に The iconv Implementation in the GNU C library > ってのもありまして (いわゆる glibc iconv) こっちには iconvctl(3) はありません。 > Linux は普通 glibc iconv を使っていると思うので意外とある環境は少ないと思います。 > http://www.gnu.org/s/hello/manual/libc/glibc-iconv-Implementation.html そうだったんですね。知りませんでした。> iconvctl が GNU libiconv 特有の関数 僕の文章がかなり省略してあったのでわかりにくい気はしていたのですが、 「たまたま見つけたのですが〜」の件は Ruby の iconv.c の以下の部分 に関する指摘でした。 * Document-method: trivial? * call-seq: trivial? * * Returns trivial flag. 「Returns trivial flag.」ではなく、「trivial かどうかを返します」 にした方が正しいと考えています。iconvctl がないと使えない #transliterate? や #discard_ilseq? に対応する部分は iconvctl の実 装を見ると構造体のメンバを少し加工して返しています。しかし、 Iconv#trivial? に対応する部分は判定処理の結果を返しています。なの で、Iconv#trivial? の rdoc が「フラグを返す」とするのはおかしい、 という事なのでした。 ---------------------------- ネットワーク応用通信研究所 橋本 将(Sho HASHIMOTO) sho-h@netlab.jp ----------------------------