[#24112] ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。原因を追求してたのですが、力尽きました。

19 messages 2004/08/18
[#24127] Re: ruby/tk crashes on bcc32 — Hidetoshi NAGAI <nagai@...> 2004/08/19

永井@知能.九工大です.

[#24131] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。

[#24135] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。試行錯誤の結果、これで落ちなくなりました。

[ruby-dev:24016] Re: String#each -> String#each_char

From: Minero Aoki <aamine@...>
Date: 2004-08-02 11:40:51 UTC
List: ruby-dev #24016
青木です。

  In mail "[ruby-dev:24015] Re: String#each -> String#each_char"
    WATANABE Hirofumi <eban@os.rim.or.jp> wrote:

> わたなべです。

> > * each_line が each でなくなると不便
> >   (行単位の each や map や select を活用しているから)
> >
> > * 文字単位の each があっても不便
> >   (map とか select とか inject を使う場面に出会ったことがない)
> >   (Rubyレベルで文字単位に処理するのは遅すぎて使いものに
> >    ならなかった経験がある。正規表現を活用したほうがずっといい)
> 
> どちらも結局文字単位での処理が遅いから、行単位で扱っていると
> いう話になりそうな。

速度だけを根拠にしているつもりは全くありません。わたしが使って
いる (自作の) ライブラリは文字列を中間形態にすることが多く、
かつ行単位のフォーマットをよく使うから、多段の変形をかけるときに
文字列 each が増えざるをえないのです。あと、フォーマット変換中の
部分文字列を扱う時も使います。(例:BitChannel の pre 部分とか)

あとは、SOME_CLASS#parse と SOME_CLASS#load を両方用意するときに
共通のインターフェイスとして each を使うとか、load で全部読んで
から parse に渡すとか。こういう使いかたをしている場合に問題になって
いるのは意味とかコード共有であって、速度は関係しません。


> > 他の傍例としては、IO#each が「行」を単位に選んでいることが挙げら
> > れます。IO#each を each_byte や each_block (ないけど) の alias に
> > することも可能だったはずです。この事実は、文字列のかたまりを扱う
> > 場合は行を単位として扱うのが *現実的に便利だ* ということを表して
> > いるのではないでしょうか?
> 
> 便利かどうかと言われると複数行含んだ文字列を扱うことがどれく
> らい多いかという話になると思います。現にIO#eachで1行ずつ持っ
> てくればString#each_lineの出番はなくなりますし。
> 
> それともここもreadで全部読みこんだ後の話になりますか?
> だとするとやはり速さの問題なのかなあ。

上記の通り、まず第一には何段も変形するときの中間形態の問題です。

それから、わたしは IO#each と String#each の関係も同時に問題に
しています。それなのに、「IO#each が行単位だから String#each は
なんでもいいじゃん」と IO#each の現状の動作を前提とされるのは
納得できません。
-------------------------------------------------------------------
青木峰郎

In This Thread