NOEMBLEM/エンブレムが設定されていません。

メールの詳細(トピック表示)

CVS 版 gawk の sprintf() の遅さ

投稿者:Roccoさん  2009/02/01 01:39  MLNo.223   [メール表示]

斉藤です。

ふと以下の URL を見て sprintf() でスクリプトを作ってみて気がつきました。

http://d.hatena.ne.jp/moriyoshi/20090125/1232916998
http://blog.livedoor.jp/dankogai/archives/51172176.html

作ったものは以下のようなものです。

BEGIN {
print repeat_str("test", 10000);
}

function repeat_str(str, num) {
for (i = 1; i <= num; i++) {
result = sprintf("%s%s", result, str);
}
return result;
}

これを CVS 版 gawk で実行すると 10 秒以上かかってしまう結果になりました。
http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_096

nawk や Fedora10 の gawk では問題がないことから CVS 版の問題と思われます。

他の方で同様の問題に遭遇された方いますか?

--
----------
日本 GNU AWK ユーザー会
Hirofumi Saito (斉藤博文)
hi_saito@…


 読み込み中...
最新の10件 1 2
  • MLNo.225   Roccoさん  (0) 2009/02/01 02:12  [メール表示する]
    斉藤です。

    すっかり locate のことを忘れていました。

    repeat_str_2.awk というのは最初のメールのスクリプトです。

    $ time LC_ALL=C gawk -f repeat_str_2.awk > /dev/null
    LC_ALL=C gawk -f repeat_str_2.awk > /dev/null 0.07s user 0.00s system
    80% cpu 0.092 total

    確かに高速になりました。
    さすがです。

    しかし、locate の問題とは言え、速度差が異常なので何とかならないもので
    しょうかねぇ。


    On Sun, 1 Feb 2009 01:56:59 +0900 (JST)
    KIMURA Koichi wrote:

    > 木村です。
    > もう一個。
    >
    > locale 設定を C にしても状況は変わりませんか?
    >
    > Hirofumi Saito さんは書きました (2009/02/01 1:39):
    > > 斉藤です。
    > >
    > > ふと以下の URL を見て sprintf() でスクリプトを作ってみて気がつきました。
    > >
    > > http://d.hatena.ne.jp/moriyoshi/20090125/1232916998
    > > http://blog.livedoor.jp/dankogai/archives/51172176.html
    > >
    > > 作ったものは以下のようなものです。
    > >
    > > BEGIN {
    > > print repeat_str("test", 10000);
    > > }
    > >
    > > function repeat_str(str, num) {
    > > for (i = 1; i <= num; i++) {
    > > result = sprintf("%s%s", result, str);
    > > }
    > > return result;
    > > }
    > >
    > > これを CVS 版 gawk で実行すると 10 秒以上かかってしまう結果になりました。
    > > http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_096
    > >
    > > nawk や Fedora10 の gawk では問題がないことから CVS 版の問題と思われます。
    > >
    > > 他の方で同様の問題に遭遇された方いますか?
    > >
    >
    >
    > --
    > 木村浩一
    > I thought what I'd do was, I'd pretend I was one of those deaf-mutes or should I?
    > mail kbk at kt.rim.or.jp
    > web www.kt.rim.or.jp/~kbk/zakkicho/
    > homepage3.nifty.com/farstar/
    >
    >
    > 【MLコミュホームページ】http://www.freeml.com/gauc
    >
    > --[PR]------------------------------------------------------------------
    > ◇◆◇◆ 憧れの4LDKや共用施設充実マンション    ◇◆◇◆
    > ◆◇◆◇賃貸じゃ難しい?理想の住まい探しは早めの資料請求で先手!◆◇◆◇
    > ◇◆◇◆  これから販売予定のおNewなマンション、即チェック ◇◆◇◆
    >  
    > http://ad.freeml.com/cgi-bin/sa.cgi?id=dwZ8K
    > ------------------------------------------------------------------[PR]--
    > ■GMO INTERNET GROUP■ GMO INTERNET www.gmo.jp
    >
    >
    >


    --
    ----------
    日本 GNU AWK ユーザー会
    Hirofumi Saito (斉藤博文)
    hi_saito@…

  • MLNo.226   ほげむたさん  (0) 2009/02/01 02:36  [メール表示する]
    木村です。
    多分ここだと思うのですが、ちょっと確かめてみてもらえますか。

    builtin.c の format_tree の中です。

    case 's':
    need_format = FALSE;
    if (zero_flag && ! lj)
    fill = zero_string;
    parse_next_arg();
    arg = force_string(arg);
    char_count = mbc_char_count(arg->stptr, arg->stlen);
    if (fw == 0 && ! have_prec)
    prec = arg->stlen;
    else if (! have_prec || prec > char_count)
    prec = char_count;
    cp = arg->stptr;
    goto pr_tail;

    ↑の mbc_char_count の呼び出しが多分足を引っ張ってます。
    犯人がこいつかどうかを判断するために

    arg = force_string(arg);
    if (! have_prec || prec > arg->stlen)
    prec = arg->stlen;
    cp = arg->stptr;
    goto pr_tail;


    のようにしてビルドしなおしてから計測してもらえますか。
    書式指定によってはフォーマットが崩れる可能性がありますが
    速度判定とは関係ないのでとりあえず。


    つーか、マルチバイト文字の処理根本的にどうにかしないと
    この種の問題止みませんよ。
    #どーする?

    Hirofumi Saito さんは書きました (2009/02/01 2:12):
    > 斉藤です。
    >
    > すっかり locate のことを忘れていました。
    >
    > repeat_str_2.awk というのは最初のメールのスクリプトです。
    >
    > $ time LC_ALL=C gawk -f repeat_str_2.awk > /dev/null
    > LC_ALL=C gawk -f repeat_str_2.awk > /dev/null 0.07s user 0.00s system
    > 80% cpu 0.092 total
    >
    > 確かに高速になりました。
    > さすがです。
    >
    > しかし、locate の問題とは言え、速度差が異常なので何とかならないもので
    > しょうかねぇ。
    >
    >
    > On Sun, 1 Feb 2009 01:56:59 +0900 (JST)
    > KIMURA Koichi wrote:
    >
    >> 木村です。
    >> もう一個。
    >>
    >> locale 設定を C にしても状況は変わりませんか?
    >>
    >> Hirofumi Saito さんは書きました (2009/02/01 1:39):
    >>> 斉藤です。
    >>>
    >>> ふと以下の URL を見て sprintf() でスクリプトを作ってみて気がつきました。
    >>>
    >>> http://d.hatena.ne.jp/moriyoshi/20090125/1232916998
    >>> http://blog.livedoor.jp/dankogai/archives/51172176.html
    >>>
    >>> 作ったものは以下のようなものです。
    >>>
    >>> BEGIN {
    >>> print repeat_str("test", 10000);
    >>> }
    >>>
    >>> function repeat_str(str, num) {
    >>> for (i = 1; i <= num; i++) {
    >>> result = sprintf("%s%s", result, str);
    >>> }
    >>> return result;
    >>> }
    >>>
    >>> これを CVS 版 gawk で実行すると 10 秒以上かかってしまう結果になりました。
    >>> http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_096
    >>>
    >>> nawk や Fedora10 の gawk では問題がないことから CVS 版の問題と思われます。
    >>>
    >>> 他の方で同様の問題に遭遇された方いますか?
    >>>
    >>
    >> --
    >> 木村浩一
    >> I thought what I'd do was, I'd pretend I was one of those deaf-mutes or should I?
    >> mail kbk at kt.rim.or.jp
    >> web www.kt.rim.or.jp/~kbk/zakkicho/
    >> homepage3.nifty.com/farstar/
    >>
    >>
    >> 【MLコミュホームページ】http://www.freeml.com/gauc
    >>
    >> --[PR]------------------------------------------------------------------
    >> ◇◆◇◆ 憧れの4LDKや共用施設充実マンション    ◇◆◇◆
    >> ◆◇◆◇賃貸じゃ難しい?理想の住まい探しは早めの資料請求で先手!◆◇◆◇
    >> ◇◆◇◆  これから販売予定のおNewなマンション、即チェック ◇◆◇◆
    >>  
    >> http://ad.freeml.com/cgi-bin/sa.cgi?id=dwZ8K
    >> ------------------------------------------------------------------[PR]--
    >> ■GMO INTERNET GROUP■ GMO INTERNET www.gmo.jp
    >>
    >>
    >>
    >
    >


    --
    木村浩一
    I thought what I'd do was, I'd pretend I was one of those deaf-mutes or should I?
    mail kbk at kt.rim.or.jp
    web www.kt.rim.or.jp/~kbk/zakkicho/
    homepage3.nifty.com/farstar/

  • MLNo.227   Roccoさん  (0) 2009/02/01 02:55  [メール表示する]
    斉藤です。

    最新の CVS 版に対して修正して実行してみました。

    結果、問題なく高速に動作してくれるようになりました。

    $ time ./gawk -f ../repeat_str/repeat_str_2.awk > /dev/null
    ./gawk -f ../repeat_str/repeat_str_2.awk > /dev/null 0.09s user 0.00s system 98% cpu 0.094 total
    $ time LC_ALL=C ./gawk -f ../repeat_str/repeat_str_2.awk > /dev/null
    LC_ALL=C ./gawk -f ../repeat_str/repeat_str_2.awk > /dev/null 0.08s user 0.00s system 96% cpu 0.087 total

    出力は ASCII なので特に崩れていません。
    UTF-8 で「ほげほげふがふが」にしても崩れていないようです。

    > つーか、マルチバイト文字の処理根本的にどうにかしないと
    > この種の問題止みませんよ。
    > #どーする?

    どうするのがいいんですかね?

    とりあえず、Arnold に投げておきますかね。


    On Sun, 1 Feb 2009 02:36:18 +0900 (JST)
    KIMURA Koichi wrote:

    > 木村です。
    > 多分ここだと思うのですが、ちょっと確かめてみてもらえますか。
    >
    > builtin.c の format_tree の中です。
    >
    > case 's':
    > need_format = FALSE;
    > if (zero_flag && ! lj)
    > fill = zero_string;
    > parse_next_arg();
    > arg = force_string(arg);
    > char_count = mbc_char_count(arg->stptr, arg->stlen);
    > if (fw == 0 && ! have_prec)
    > prec = arg->stlen;
    > else if (! have_prec || prec > char_count)
    > prec = char_count;
    > cp = arg->stptr;
    > goto pr_tail;
    >
    > ↑の mbc_char_count の呼び出しが多分足を引っ張ってます。
    > 犯人がこいつかどうかを判断するために
    >
    > arg = force_string(arg);
    > if (! have_prec || prec > arg->stlen)
    > prec = arg->stlen;
    > cp = arg->stptr;
    > goto pr_tail;
    >
    >
    > のようにしてビルドしなおしてから計測してもらえますか。
    > 書式指定によってはフォーマットが崩れる可能性がありますが
    > 速度判定とは関係ないのでとりあえず。
    >
    >
    > つーか、マルチバイト文字の処理根本的にどうにかしないと
    > この種の問題止みませんよ。
    > #どーする?
    >
    > Hirofumi Saito さんは書きました (2009/02/01 2:12):
    > > 斉藤です。
    > >
    > > すっかり locate のことを忘れていました。
    > >
    > > repeat_str_2.awk というのは最初のメールのスクリプトです。
    > >
    > > $ time LC_ALL=C gawk -f repeat_str_2.awk > /dev/null
    > > LC_ALL=C gawk -f repeat_str_2.awk > /dev/null 0.07s user 0.00s system
    > > 80% cpu 0.092 total
    > >
    > > 確かに高速になりました。
    > > さすがです。
    > >
    > > しかし、locate の問題とは言え、速度差が異常なので何とかならないもので
    > > しょうかねぇ。
    > >
    > >
    > > On Sun, 1 Feb 2009 01:56:59 +0900 (JST)
    > > KIMURA Koichi wrote:
    > >
    > >> 木村です。
    > >> もう一個。
    > >>
    > >> locale 設定を C にしても状況は変わりませんか?
    > >>
    > >> Hirofumi Saito さんは書きました (2009/02/01 1:39):
    > >>> 斉藤です。
    > >>>
    > >>> ふと以下の URL を見て sprintf() でスクリプトを作ってみて気がつきました。
    > >>>
    > >>> http://d.hatena.ne.jp/moriyoshi/20090125/1232916998
    > >>> http://blog.livedoor.jp/dankogai/archives/51172176.html
    > >>>
    > >>> 作ったものは以下のようなものです。
    > >>>
    > >>> BEGIN {
    > >>> print repeat_str("test", 10000);
    > >>> }
    > >>>
    > >>> function repeat_str(str, num) {
    > >>> for (i = 1; i <= num; i++) {
    > >>> result = sprintf("%s%s", result, str);
    > >>> }
    > >>> return result;
    > >>> }
    > >>>
    > >>> これを CVS 版 gawk で実行すると 10 秒以上かかってしまう結果になりました。
    > >>> http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_096
    > >>>
    > >>> nawk や Fedora10 の gawk では問題がないことから CVS 版の問題と思われます。
    > >>>
    > >>> 他の方で同様の問題に遭遇された方いますか?


    --
    ----------
    日本 GNU AWK ユーザー会
    Hirofumi Saito (斉藤博文)
    hi_saito@…

  • MLNo.228   Roccoさん  (0) 2009/02/01 21:32  [メール表示する]
    斉藤です。

    Arnold から連絡がありました。

    木村さんのパッチと同じ気がするのですが、弊害になりそうなところってありますか?
    問題が起きそうな sprintf() の引数とか。

    http://lists.nongnu.org/archive/html/bug-gnu-utils/2009-01/msg00071.html


    On Sun, 1 Feb 2009 02:55:33 +0900 (JST)
    Hirofumi Saito wrote:

    > 斉藤です。
    >
    > 最新の CVS 版に対して修正して実行してみました。
    >
    > 結果、問題なく高速に動作してくれるようになりました。
    >
    > $ time ./gawk -f ../repeat_str/repeat_str_2.awk > /dev/null
    > ./gawk -f ../repeat_str/repeat_str_2.awk > /dev/null 0.09s user 0.00s system 98% cpu 0.094 total
    > $ time LC_ALL=C ./gawk -f ../repeat_str/repeat_str_2.awk > /dev/null
    > LC_ALL=C ./gawk -f ../repeat_str/repeat_str_2.awk > /dev/null 0.08s user 0.00s system 96% cpu 0.087 total
    >
    > 出力は ASCII なので特に崩れていません。
    > UTF-8 で「ほげほげふがふが」にしても崩れていないようです。
    >
    > > つーか、マルチバイト文字の処理根本的にどうにかしないと
    > > この種の問題止みませんよ。
    > > #どーする?
    >
    > どうするのがいいんですかね?
    >
    > とりあえず、Arnold に投げておきますかね。
    >
    >
    > On Sun, 1 Feb 2009 02:36:18 +0900 (JST)
    > KIMURA Koichi wrote:
    >
    > > 木村です。
    > > 多分ここだと思うのですが、ちょっと確かめてみてもらえますか。
    > >
    > > builtin.c の format_tree の中です。
    > >
    > > case 's':
    > > need_format = FALSE;
    > > if (zero_flag && ! lj)
    > > fill = zero_string;
    > > parse_next_arg();
    > > arg = force_string(arg);
    > > char_count = mbc_char_count(arg->stptr, arg->stlen);
    > > if (fw == 0 && ! have_prec)
    > > prec = arg->stlen;
    > > else if (! have_prec || prec > char_count)
    > > prec = char_count;
    > > cp = arg->stptr;
    > > goto pr_tail;
    > >
    > > ↑の mbc_char_count の呼び出しが多分足を引っ張ってます。
    > > 犯人がこいつかどうかを判断するために
    > >
    > > arg = force_string(arg);
    > > if (! have_prec || prec > arg->stlen)
    > > prec = arg->stlen;
    > > cp = arg->stptr;
    > > goto pr_tail;
    > >
    > >
    > > のようにしてビルドしなおしてから計測してもらえますか。
    > > 書式指定によってはフォーマットが崩れる可能性がありますが
    > > 速度判定とは関係ないのでとりあえず。
    > >
    > >
    > > つーか、マルチバイト文字の処理根本的にどうにかしないと
    > > この種の問題止みませんよ。
    > > #どーする?
    > >
    > > Hirofumi Saito さんは書きました (2009/02/01 2:12):
    > > > 斉藤です。
    > > >
    > > > すっかり locate のことを忘れていました。
    > > >
    > > > repeat_str_2.awk というのは最初のメールのスクリプトです。
    > > >
    > > > $ time LC_ALL=C gawk -f repeat_str_2.awk > /dev/null
    > > > LC_ALL=C gawk -f repeat_str_2.awk > /dev/null 0.07s user 0.00s system
    > > > 80% cpu 0.092 total
    > > >
    > > > 確かに高速になりました。
    > > > さすがです。
    > > >
    > > > しかし、locate の問題とは言え、速度差が異常なので何とかならないもので
    > > > しょうかねぇ。
    > > >
    > > >
    > > > On Sun, 1 Feb 2009 01:56:59 +0900 (JST)
    > > > KIMURA Koichi wrote:
    > > >
    > > >> 木村です。
    > > >> もう一個。
    > > >>
    > > >> locale 設定を C にしても状況は変わりませんか?
    > > >>
    > > >> Hirofumi Saito さんは書きました (2009/02/01 1:39):
    > > >>> 斉藤です。
    > > >>>
    > > >>> ふと以下の URL を見て sprintf() でスクリプトを作ってみて気がつきました。
    > > >>>
    > > >>> http://d.hatena.ne.jp/moriyoshi/20090125/1232916998
    > > >>> http://blog.livedoor.jp/dankogai/archives/51172176.html
    > > >>>
    > > >>> 作ったものは以下のようなものです。
    > > >>>
    > > >>> BEGIN {
    > > >>> print repeat_str("test", 10000);
    > > >>> }
    > > >>>
    > > >>> function repeat_str(str, num) {
    > > >>> for (i = 1; i <= num; i++) {
    > > >>> result = sprintf("%s%s", result, str);
    > > >>> }
    > > >>> return result;
    > > >>> }
    > > >>>
    > > >>> これを CVS 版 gawk で実行すると 10 秒以上かかってしまう結果になりました。
    > > >>> http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_096
    > > >>>
    > > >>> nawk や Fedora10 の gawk では問題がないことから CVS 版の問題と思われます。
    > > >>>
    > > >>> 他の方で同様の問題に遭遇された方いますか?
    >
    >
    > --
    > ----------
    > 日本 GNU AWK ユーザー会
    > Hirofumi Saito (斉藤博文)
    > hi_saito@…
    >
    >
    > 【MLコミュホームページ】http://www.freeml.com/gauc
    >
    > --[PR]------------------------------------------------------------------
    > 〓〓〓〓〓皆さんは生命保険にどれくらいのお金をかけてますか?〓〓〓〓〓
    > 案外、商品内容をよく理解せずに多額のお金を支払っている人が多いのでは。
    > なぜ?そういことになるかと言うと“生命保険の仕組み”が複雑すぎるから。
    > ▼▽▼そんな日本の生命保険に「風穴」を開けようとする会社が登場した!!
    > http://ad.freeml.com/cgi-bin/sa.cgi?id=dwZLI
    > ------------------------------------------------------------------[PR]--
    > ■GMO INTERNET GROUP■ GMO INTERNET www.gmo.jp
    >
    >
    >


    --
    ----------
    日本 GNU AWK ユーザー会
    Hirofumi Saito (斉藤博文)
    hi_saito@…

  • MLNo.229   Roccoさん  (0) 2009/02/02 00:41  [メール表示する]
    斉藤です。

    以下のように sprintf() に %s ではなく %10s とかを指定するとやはり遅くな
    りますね。

    BEGIN {
    str = "abc";
    for (i = 1; i <= 10000; i++) {
    result = sprintf("%10s%s", result, str);
    }
    print result;
    }

    どうしたものか・・・。


    On Sun, 1 Feb 2009 21:32:32 +0900 (JST)
    Hirofumi Saito wrote:

    > 斉藤です。
    >
    > Arnold から連絡がありました。
    >
    > 木村さんのパッチと同じ気がするのですが、弊害になりそうなところってありますか?
    > 問題が起きそうな sprintf() の引数とか。
    >
    > http://lists.nongnu.org/archive/html/bug-gnu-utils/2009-01/msg00071.html


    --
    ----------
    日本 GNU AWK ユーザー会
    Hirofumi Saito (斉藤博文)
    hi_saito@…

  • MLNo.230   ほげむたさん  (0) 2009/02/02 01:03  [メール表示する]
    木村です。

    やっぱりかw

    Hirofumi Saito さんは書きました (2009/02/02 0:41):
    > 斉藤です。
    >
    > 以下のように sprintf() に %s ではなく %10s とかを指定するとやはり遅くな
    > りますね。
    >
    > BEGIN {
    > str = "abc";
    > for (i = 1; i <= 10000; i++) {
    > result = sprintf("%10s%s", result, str);
    > }
    > print result;
    > }
    >
    > どうしたものか・・・。

    今回のパッチというのが、%10s のように幅指定があるときや、その幅が
    出力対象の文字列の長さより長い(あ、逆か?)ときにだけ、足を引っ張る
    例の関数(バイトではなく、文字数を返す?)を呼ぶというものです。
    ですから、上記のようなパターンでは見事に引っかかります。

    詳しい経緯を調べているのは面倒なのでやりませんが、たしか
    ヨーロッパのどこかの国のユーザーが、sprintf などで指定する数字が
    「文字単位」じゃなくて「バイト単位」なのはおかしいだろうとか
    クレームをつけたのが発端だと思います。

    んが、この数字を「文字単位」にすると日本語の文字のようなラテンアルファベット
    よりも表示幅が倍の文字を持っているユーザーにはとんでもない迷惑になります。
    といって、表示幅を基準に決めようとしても、それをポータブルに行う手段が
    現状存在していません。はっきりいってあけないでもいい地獄の釜の蓋を
    あけたようなもんです。

    他の言語でそれをやってるのが一個もないのをみれば見当つきそうなものですけどねえ。

    この辺りを説明する英文書くのめんどーw


    --
    木村浩一
    I thought what I'd do was, I'd pretend I was one of those deaf-mutes or should I?
    mail kbk at kt.rim.or.jp
    web www.kt.rim.or.jp/~kbk/zakkicho/
    homepage3.nifty.com/farstar/

  • MLNo.231   Roccoさん  (0) 2009/02/02 01:58  [メール表示する]
    斉藤です。

    On Mon, 2 Feb 2009 01:03:17 +0900 (JST)
    KIMURA Koichi wrote:
    > 今回のパッチというのが、%10s のように幅指定があるときや、その幅が
    > 出力対象の文字列の長さより長い(あ、逆か?)ときにだけ、足を引っ張る
    > 例の関数(バイトではなく、文字数を返す?)を呼ぶというものです。
    > ですから、上記のようなパターンでは見事に引っかかります。
    >
    > 詳しい経緯を調べているのは面倒なのでやりませんが、たしか
    > ヨーロッパのどこかの国のユーザーが、sprintf などで指定する数字が
    > 「文字単位」じゃなくて「バイト単位」なのはおかしいだろうとか
    > クレームをつけたのが発端だと思います。

    覚えているのですが、メールが追いきれていません。
    以下で mbc_byte_count が加わっているのは確かなのですが・・・。

    http://cvs.savannah.gnu.org/viewvc/gawk-stable/builtin.c?root=gawk&r1=1.21&r2=1.22


    > んが、この数字を「文字単位」にすると日本語の文字のようなラテンアルファベット
    > よりも表示幅が倍の文字を持っているユーザーにはとんでもない迷惑になります。
    > といって、表示幅を基準に決めようとしても、それをポータブルに行う手段が
    > 現状存在していません。はっきりいってあけないでもいい地獄の釜の蓋を
    > あけたようなもんです。
    >
    > 他の言語でそれをやってるのが一個もないのをみれば見当つきそうなものですけどねえ。

    FIELDWIDTH も同じような感じではなかったでしたっけ?
    ラテンアルファベットの文字数になってしまっていますよね。

    > この辺りを説明する英文書くのめんどーw

    # ネイティブな英語が書ける人を募集。(w

    さて、どうしたものでしょうか。

    もっとも、awk で 10000 回も連接するようなケースは滅多にないし、それが個
    人的に必要というわけでもないので、「awk なんだから遅くてもいいよ」という
    のも解だと思います。(苦笑)


    --
    ----------
    日本 GNU AWK ユーザー会
    Hirofumi Saito (斉藤博文)
    hi_saito@…

  • MLNo.232   ほげむたさん  (0) 2009/02/02 02:50  [メール表示する]
    木村です。

    Hirofumi Saito さんは書きました (2009/02/02 1:58):

    >> 詳しい経緯を調べているのは面倒なのでやりませんが、たしか
    >> ヨーロッパのどこかの国のユーザーが、sprintf などで指定する数字が
    >> 「文字単位」じゃなくて「バイト単位」なのはおかしいだろうとか
    >> クレームをつけたのが発端だと思います。
    >
    > 覚えているのですが、メールが追いきれていません。
    > 以下で mbc_byte_count が加わっているのは確かなのですが・・・。
    >
    > http://cvs.savannah.gnu.org/viewvc/gawk-stable/builtin.c?root=gawk&r1=1.21&r2=1.22

    ユーザークレームは夏ごろだったような気もするんですが、どうだったかなあ。

    >> んが、この数字を「文字単位」にすると日本語の文字のようなラテンアルファベット
    >> よりも表示幅が倍の文字を持っているユーザーにはとんでもない迷惑になります。
    >> といって、表示幅を基準に決めようとしても、それをポータブルに行う手段が
    >> 現状存在していません。はっきりいってあけないでもいい地獄の釜の蓋を
    >> あけたようなもんです。
    >>
    >> 他の言語でそれをやってるのが一個もないのをみれば見当つきそうなものですけどねえ。
    >
    > FIELDWIDTH も同じような感じではなかったでしたっけ?
    > ラテンアルファベットの文字数になってしまっていますよね。

    ああ、そうですね。

    そこかしこに一文字==1オクテットであるというのを暗黙のうちに仮定しているのが
    ありますね。POSIX(≒Cライブラリ)からしてその辺の考慮が全然ないのに、それに
    依存しているgawkにどうにかしろというのは酷ですよ。そもそも多言語対応自体
    POSIXレベルではろくなことができないw
    iconv も iconv で(ry

    文句を言うユーザーの気持ちもわかりますが、お前らだけの都合で決めてくれるなと。
    ってやっぱArnoldあたりにはきちんと説明せんといかんよなあ。
    #内職するかw

    >
    >> この辺りを説明する英文書くのめんどーw
    >
    > # ネイティブな英語が書ける人を募集。(w
    >
    > さて、どうしたものでしょうか。
    >
    > もっとも、awk で 10000 回も連接するようなケースは滅多にないし、それが個
    > 人的に必要というわけでもないので、「awk なんだから遅くてもいいよ」という
    > のも解だと思います。(苦笑)

    まあそうなるでしょうね。


    --
    木村浩一
    I thought what I'd do was, I'd pretend I was one of those deaf-mutes or should I?
    mail kbk at kt.rim.or.jp
    web www.kt.rim.or.jp/~kbk/zakkicho/
    homepage3.nifty.com/farstar/

  • MLNo.233   Roccoさん  (0) 2009/02/04 00:22  [メール表示する]
    斉藤です。

    "%10s" とかにするとそれでも遅いぞ。とメールを出したのですが、返事が来て
    います。

    http://lists.nongnu.org/archive/html/bug-gnu-utils/2009-02/msg00005.html

    簡単に要約すると、「かなり大掛かりな修正になるから、特に問題がないのであ
    れば、このまま進めさせて欲しい」ということです。

    とりあえず、このまま進めてもらいましょうかね。(弱気)
    sprintf() を 10000 回もぶん回すこともないでしょうから。

    明日いっぱいくらいまで意見を待ちます。


    --
    ----------
    日本 GNU AWK ユーザー会
    Hirofumi Saito (斉藤博文)
    hi_saito@…

  • MLNo.234   Roccoさん  (0) 2009/02/04 20:43  [メール表示する]
    斉藤です。

    一旦、%s だけの高速化 (前のパッチ) でコミットしておいてと伝えておきまし
    た。


    --
    ----------
    日本 GNU AWK ユーザー会
    Hirofumi Saito (斉藤博文)
    hi_saito@…

最新の10件 1 2
メールへの返信はMLのメンバーしかできません。
4LDK超ってこんなに広い?/SUUMO