From: "K.Kosako" Date: 2002-04-03T16:35:48+09:00 Subject: [ruby-dev:16726] Re: [OniGuruma] nested repeat operator Tanaka Akiraさんのから > > そうですね。やっとわかりました。 > > (?:a*)??は(?:a+)??に自動的に変換するようにします。 > > 自動的に変換するのはこのパターンだけです。 > > その他はエラーか警告表示するだけです。 > > えぇと、なんでこれだけ変換するんでしょう? 最適化のためなら、たとえば > (?:a*)* を a* にするとか候補はいろいろあると思うんですが。 最適化はしない、ユーザが自分でやればよい、 というつもりでいたんですが、(?:a*)??を(?:a+)??にすべきというのは 私自身が気付かなかった位だから、気の毒かと思ってそうしました。 しかし仕様として分かりにくいので、 (?:a*)??に対しても警告を表示、に変更しましょう。 > つまり方針がよくわかりません。 > > * 冗長な記述を認める。 > * 冗長な記述を認めない。 > > * なるべく最適化する。 > * 最適化しない。 > > それぞれどっちなんでしょう。 > > おそらく、冗長性を認めるか否かは人間があえて冗長に書きたいような記述が > 存在するかどうかが問題で、安全な最適化はやれる時には常にやった方がいい > んだと思いますが。 方針も何もなくて適当に作っていました。 あえて冗長に書きたいような記述というのは、全く考慮していませんでした。 これは、やりたいことの意味をなるべくそのままに表現すると冗長になるということ ですよね。 どのくらいそのような場合というか要望があるのか私にはわからないということと、 不注意で冗長な記述をしたときのことを考えると、エラーも警告も出さないように するというのは不親切な気がするし、どう変更しても不満な感じがするので、 エラーと警告については現状のままにしておきたいと思います。 良い判定基準があれば、それに従いますが。 冗長が不注意によるのか、意図したものなのか判定できますか? 最適化は、やります。 -- 小迫@ソフネック 渋谷区恵比寿1-15-1